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

Bagaimana untuk Melancarkan Transaksi MySQL secara Automatik pada Pengecualian?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-23 03:24:10207semak imbas

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 ;

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:
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