Operasi Transaksi (Pembina Pertanyaan 16)


Cara paling mudah ialah menggunakan kaedah urus niaga untuk mengendalikan transaksi pangkalan data Apabila pengecualian berlaku dalam kod dalam penutupan, ia akan kembali secara automatik, contohnya:

Db::transaction(function () {
    Db::table('think_user')->find(1);
    Db::table('think_user')->delete(1);
});

Anda juga boleh mengawal transaksi secara manual, contohnya. :

// 启动事务
Db::startTrans();
try {
    Db::table('think_user')->find(1);
    Db::table('think_user')->delete(1);
    // 提交事务
    Db::commit();
} catch (\Exception $e) {
    // 回滚事务
    Db::rollback();
}

Beri perhatian kepada operasi transaksi, pastikan sambungan pangkalan data anda menggunakan yang sama.

boleh menyokong transaksi XA MySQL untuk melaksanakan transaksi global (teredar) Anda boleh menggunakan:

Db::transactionXa(function () {
    Db::connect('db1')->table('think_user')->delete(1);
    Db::connect('db2')->table('think_user')->delete(1);
}, [Db::connect('db1'),Db::connect('db2')]);

Pastikan enjin jadual data anda adalah InnoDB dan dayakan sokongan transaksi XA.