大事务拆分项目应用-再看事务嵌套

一、何为事务嵌套

最简单的事务嵌套情况:开启了一个事务的情况下,再开启一个事务2。

或者:在t1、t2分别为两个事务操作,而外层t3事务包含t1(t2),t3跟t1(t2)

         OR          

例如在支付系统中,在进行支付校验时,事务1负责更新账单状态&插入历史表,事务2负责创建支付记录及明细,如果假设更新账单状态成功,二创建支付记录失败,则导致账单状态与支付状态丢失数据一致性。故除保证事务1、2的原子性外,还得在1、2上层增加事务3以保证两个事务组合也具有原子性。

二、事务嵌套有何问题?

思考一个问题:理论上,t1事务执行完毕后,如果t2执行失败,往上t3因为t2执行失败而回滚。此时t1能回滚成功么?talk is cheap ,show me the case!测试case如下。

case结果:

1、session1中首先执行开始事务命令, start transaction;然后插入1条记录,查询session1中正常显示
2、在session2中查询该条记录,无匹配结果。 因为此时session1中未执行commit命令。mysql与oracle一样,commit的数据除了当前session之外,其他session是看不到的。
3、直接开启第二个事务,即再一次执行s
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值