1. 程式人生 > 其它 >MySQL事務巢狀

MySQL事務巢狀

技術標籤:mysqlmysql資料庫php

最近因為工作中遇到了這個問題,對於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事務巢狀主要以上一層事務的操作為主,上層如果提交事務,則當前層根據自己的操作執行,上層如果回滾事務,則下層所有操作均回滾。