数据库事务TRANSACTION

本文阐述了在数据库操作中使用事务管理来确保并发更新的一致性和完整性,通过实例展示了如何避免数据一致性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TRANSACTION     简单点说就是同生共死


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

idpay
0011000
002500
现在执行  下面两个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的钱多了一千。

会出现下面的情况:

idpay
0011000
0021500

这种情况是不可以的。

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

这个时候就要用到事务。


  • 开始事务  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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值