事务嵌套的两种方法
参考事务操作
-- 第一个事务 --
BEGIN;
update yyy;
-- 第两个事务 ---
begin;
update xxx;
commit;
update zzz;
commit;
注意事项:
正常情况下mysql不存在事务的嵌套 当第一个事务执行, 遇到了第二个事务begin等代码 就会自动把第一个事务提交,去执行第二个事务 执行完第二个事务, 后面的代码相当于是没有事务了 导致割裂
场景1
- 融入外界的事务
相当于把内部事务的begin, commit删除了 相当于下面的效果
-- 第一个事务 --
BEGIN;
update yyy;
update xxx;
update zzz;
commit;
场景2
- A事务与B事务具有一定的独立性, 不希望b事务的异常导致a事务的回滚, a事务异常导致b事务回滚
两个连接在做两个事情, 但是有一个同步的机制 确保b事务执行完了, a事务唤醒继续执行
-- 第一个事务 --
BEGIN;
update yyy;
-- 第两个事务 ---
begin;
update xxx;
commit;
update zzz;
commit;
场景3
- 嵌套事务 通过设置保存点来模拟, 将内部事务转化为保存点和回滚至保存点, 实现类是两个事务的操作;
-- 第一个事务 --
BEGIN;
update yyy;
-- 第两个事务 ---
savepoint a; -- 保存点 --
update xxx;
rollback to a; -- 回滚点 --
update zzz;
commit;