Mysql 事务嵌套问题

发布于 2022-09-06 03:06:53 字数 424 浏览 35 评论 0

比如我控制器里面有事务,然后在事务里面调用Model的另一个事务

use Model;
Db::startTrans();
try{
    Db::name('table1')->update(1);
    Db::name('table2')->update(2);
    //另一个事务
    Model::update(2);
    Db::commit();
    }catch(){

    Db::rollback();
}
这样执行有什么错误吗?还是说执行完一个事务之后在执行另一个??

看了这个问题,不是很理解
https://segmentfault.com/q/10...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清醇 2022-09-13 03:06:53

我用个小例子说说

        $t1 = M('t1',null,$connection);
        $t2 = M('t2',null,$connection);

        // 开启t1 的事务
        $t1 -> startTrans();
        $t1 -> add(["t" => "xxx"]);

        // 开启 t2 的事务,所谓隐式,就是在这里提交了
        // 把上面的 事务中的 $t1 -> add(["t" => "xxx"]) 提交了
        // 因为下面的 t2 创建了新事务
        $t2 -> startTrans();
        // 下面的就是 t2 的事务了,与t1无关,因为t1 已经提交了
        $t2 -> add(["t" => "xx1"]);
        $t2 -> add(["t" => "xx2"]);
        // 提交 t2 事务
        $t1 -> commit();
        // 无意义了
        $t1 -> commit();
凝望流年 2022-09-13 03:06:53

不建议使用嵌套事务,不管在哪一层回滚则全部回滚,即使你内层已经提交了,还是会回滚的,这根本不是嵌套关系。
还有一个事务就能解决的你所说的嵌套事务,干嘛还用嵌套

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文