[ Mysql事务 ]


事务嵌套的两种方法

参考事务操作

-- 第一个事务 --
BEGIN;
    update yyy;
        -- 第两个事务 ---
        begin;
            update xxx;
        commit;
    update zzz;
commit;

注意事项:

正常情况下mysql不存在事务的嵌套 当第一个事务执行, 遇到了第二个事务begin等代码 就会自动把第一个事务提交,去执行第二个事务 执行完第二个事务, 后面的代码相当于是没有事务了 导致割裂

场景1

  1. 融入外界的事务

    相当于把内部事务的begin, commit删除了 相当于下面的效果

-- 第一个事务 --
BEGIN;
    update yyy;
    update xxx;
    update zzz;
commit;

场景2

  1. A事务与B事务具有一定的独立性, 不希望b事务的异常导致a事务的回滚, a事务异常导致b事务回滚

    两个连接在做两个事情, 但是有一个同步的机制 确保b事务执行完了, a事务唤醒继续执行

-- 第一个事务 --
BEGIN;
    update yyy;
        -- 第两个事务 ---
        begin;
            update xxx;
        commit;
    update zzz;
commit;

场景3

  1. 嵌套事务 通过设置保存点来模拟, 将内部事务转化为保存点和回滚至保存点, 实现类是两个事务的操作;
-- 第一个事务 --
BEGIN;
    update yyy;
        -- 第两个事务 ---
        savepoint a;   -- 保存点 --
            update xxx;
        rollback to a; -- 回滚点 --
    update zzz;
commit;