TRANSACTION 简单点说就是同生共死
比如说下表(bank)有个约束 ,pay不能小于10.
id | pay |
001 | 1000 |
002 | 500 |
①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