Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Melancarkan Transaksi MySQL secara Automatik pada Pengecualian?

Bagaimana untuk Melancarkan Transaksi MySQL secara Automatik pada Pengecualian?

Mary-Kate Olsen
Lepaskan: 2024-11-23 03:24:10
asal
311 orang telah melayarinya

How to Automatically Roll Back MySQL Transactions on Exceptions?

Memutar Kembali Transaksi MySQL pada Pengecualian

Apabila melaksanakan satu siri arahan MySQL, adalah penting untuk mengendalikan ralat untuk memastikan integriti data. Satu cara untuk mencapai matlamat ini ialah dengan melancarkan keseluruhan transaksi secara automatik sekiranya mana-mana arahan menghadapi pengecualian.

Untuk menyediakan rollback automatik, gunakan sintaks DECLARE ... HANDLER:

DELIMITER $$

CREATE PROCEDURE `sp_fail`()
BEGIN
    DECLARE `_rollback` BOOL DEFAULT 0;
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
    START TRANSACTION;
    INSERT INTO `tablea` (`date`) VALUES (NOW());
    INSERT INTO `tableb` (`date`) VALUES (NOW());
    INSERT INTO `tablec` (`date`) VALUES (NOW()); -- FAIL
    IF `_rollback` THEN
        ROLLBACK;
    ELSE
        COMMIT;
    END IF;
END$$

DELIMITER ;
Salin selepas log masuk

Prosedur ini mentakrifkan pengendali (CONTINUE HANDLER FOR SQLEXCEPTION) yang menetapkan bendera _rollback kepada 1 jika pengecualian SQL berlaku. Selepas melaksanakan perintah individu dalam urus niaga, ia menyemak bendera _rollback untuk menentukan sama ada hendak melancarkan semula atau melakukan transaksi.

Dengan melaksanakan teknik ini, sebarang pengecualian yang dihadapi semasa pelaksanaan perintah akan menyebabkan keseluruhan transaksi digulung. kembali, memastikan perubahan separa tidak digunakan pada pangkalan data.

Atas ialah kandungan terperinci Bagaimana untuk Melancarkan Transaksi MySQL secara Automatik pada Pengecualian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan