MySQL事務巢狀
阿新 • • 發佈:2020-12-22
最近因為工作中遇到了這個問題,對於mysql事務回滾機制,主要記錄兩種特殊情況。
-
場景1:第一層commit 第二層rollback
<?php function insert23(){ Db::startTrans(); $res1 = Db::name('test_table')->insert(['name'=>'張三','age'=>23]); $this->insert24(); Db::commit(); } function insert24(){ Db::startTrans(); $res1 = Db::name('test_table')->insert(['name'=>'李四','age'=>24]); Db::rollback(); } insert23();
-
實際執行結果:只插入了第一層資料
-
場景2:第一層rollback 第二層commit
PHP <?php function insert23(){ Db::startTrans(); $res1 = Db::name('test_table')->insert(['name'=>'張三','age'=>23]); $this->insert24(); Db::rollback(); } function insert24(){ Db::startTrans(); $res1 = Db::name('test_table')->insert(['name'=>'李四','age'=>24]); Db::commit(); } insert23();
-
實際執行結果,沒有資料插入
-
總結:
mysql事務巢狀主要以上一層事務的操作為主,上層如果提交事務,則當前層根據自己的操作執行,上層如果回滾事務,則下層所有操作均回滾。