--开启事务
begin transaction
declare @sum int=0;
update bank set Balance=Balance-100 where cid='3'
set @sum=@sum+@@error--如果上条语句出错,则@@error会记录下来值
update bank set Balance=Balance+100 where cid='1'
set @sum=@sum+@@ERROR
if(@sum<>0)
begin
rollback
end
else
begin
commit
end
最终数据没有发生改变。
在事务中,开始有begin,但结束时不写end,而且transaction可以省略或者写成tran.
事务一旦开始,只有两种结果,要么commit,要么rollback。
在sqlserver中,事务分为三种:自动提交事务,隐式事务,显式事务。
在 执行一条sql操作语句时,都会给你自动提交事务,失败则回滚。
显式事务则是手动打开事务,提交或回滚。
隐式事务:set implicit_transactions {on|off},每次执行一个sql语句时,数据库替我们打开事务,但是需要我们手动提交事务,或者回滚事务。
例如,当set implicit_transactions on执行后,执行了对一张表的操作,除非你commit或rollback后,否则你不能查到该表,以及对该表的操作