事务:是一种机制,独立的工作单元,保证结果只产生成功或失败
特性(ACID):
原子性:要么成功,要么失败
一致性:操作前后表中数据是一致的
隔离性:当前事务操作的数据,对其它事务是隔离的
持久性:一旦提交到服务器就是永久性的,不能回滚
事务的分类:
显式事务: 一个功能,需要多个sql语句共同完成
开启事务:begin transaction(tran)
提交事务:commit transaction
回滚事务:rollback transaction
隐式事务:
自动提交事务(默认):sql中默认每个sql都是一个单独的事务
创建一个表做演示
if exists(select * from sys.objects where name='accountInfo') begin drop table accountInfo end go create table accountInfo ( id int primary key identity, accountName varchar(10) not null, balance money check(balance>=1) not null ) go --添加两个帐户 insert into accountInfo values('韦小宝',5000000) insert into accountInfo values('梅超风',6000000) go select * from accountInfo
事务处理语句
--定义变量累加错误号 declare @error_num int set @error_num = 0 --事务来处理转帐 --开启事务 begin transaction update accountInfo set balance=balance+5000000 where accountName='韦小宝' --累加错误号:上面不报错,所以不会累积事务 set @error_num=@error_num+@@ERROR update accountInfo set balance=balance-5000000 where accountName='梅超风' --累加错误号:前面已经限制钱>=1使用,这里就会报错,则累积一个事务 set @error_num=@error_num+@@ERROR --@@ERROR:当前一个语句遇到错误,则返回错误号,否则返回0。需要注意的是@ERROR在每一条语句执行后会被立刻重置,因此应该在要验证的语句执行后检查数值或者是将它保存到局部变量中以备将来使用。 if(@error_num =0) begin --提交 commit transaction print '转帐成功' end else begin --回滚 rollback transaction print '转帐失败' end select * from accountInfo