数据库事务TRANSACTION

时间:2021-02-09 16:20:36

TRANSACTION     简单点说就是同生共死


比如说下表(bank)有个约束 ,pay不能小于10.

id pay
001 1000
002 500
现在执行  下面两个SQL语句(把001的pay借给002)

①update bank set pay=pay-1000 where id='001'

②update bank set pay=pay+1000 where id='002'

有问题吗?


答案是有问题。001由于有限制,执行不能成功,但是002的不受影响,导致001的钱没少,而002的钱多了一千。

会出现下面的情况:

id pay
001 1000
002 1500

这种情况是不可以的。

我们想要得到的效果是 两个都成功的情况下数据库数据再进行操作。任何一个出问题,都不执行操作。

这个时候就要用到事务。


  • 开始事务  BEGIN TRANSACTION
  • 提交事务  COMMIT TRANSACTION
  • 回滚事务  ROLLBACK TRANSACTION

比如新建一个查询:(@@ERROR 参考点击打开链接
BEGIN TRANSACTION
DECLARE @errorSun INT    --定义错误计数器
SET @errorSun=0          --没错为0


       update bank set pay=pay-1000 where id='001'
       SET @errorSun=@errorSun+@@ERROR --累计是否有错


       update bank set pay=pay+1000 where id='002'
       SET @errorSun=@errorSun+@@ERROR --累计是否有错


IF @errorSun<>0  --失败的场合
BEGIN
    ROLLBACK TRANSACTION  --事务回滚语句(这种时候上面所有语句是不执行的)
END


ELSE             --成功的场合
BEGIN

    COMMIT TRANSACTION    --事务提交语句
END
end