Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Memastikan Pengembalian Transaksi MySQL pada Pengecualian?

Bagaimanakah Saya Boleh Memastikan Pengembalian Transaksi MySQL pada Pengecualian?

Barbara Streisand
Lepaskan: 2024-11-26 00:35:12
asal
149 orang telah melayarinya

How Can I Ensure MySQL Transaction Rollback on Exception?

Getaran Balik Urus Niaga MySQL pada Pengecualian

Anda ingin memastikan bahawa semua arahan MySQL dalam transaksi anda berjaya dilaksanakan atau keseluruhan transaksi ditarik balik sekiranya berlaku sebarang kesilapan. Pendekatan biasa melibatkan penggunaan blok cuba/tangkap atau prosedur tersimpan dengan pengendalian ralat. Walau bagaimanapun, pilihan yang lebih serba boleh ialah memanfaatkan sintaks DECLARE ... HANDLER dalam MySQL.

Sintaks DECLARE ... HANDLER membolehkan anda mentakrifkan pengendali yang dilaksanakan apabila pengecualian SQL tertentu berlaku. Dengan menggunakan ciri ini, anda boleh mengkonfigurasi MySQL untuk melancarkan semula transaksi secara automatik apabila menghadapi sebarang ralat.

Begini cara untuk melaksanakannya:

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

Dalam contoh ini, prosedur tersimpan bernama ' sp_fail' dicipta dengan pengendali untuk pengecualian SQL. Jika sebarang pengecualian berlaku semasa pelaksanaan transaksi, pengendali menetapkan bendera '_rollback' kepada '1'. Selepas semua pernyataan SQL telah dilaksanakan, pernyataan IF menyemak nilai '_rollback'. Jika ia adalah '1', urus niaga digulung semula menggunakan penyata ROLLBACK. Jika tidak, urus niaga dilakukan menggunakan penyata COMMIT.

Dengan memanfaatkan teknik ini, anda boleh memastikan transaksi MySQL anda sama ada dilaksanakan sepenuhnya atau ditarik balik sepenuhnya, menghalang kemas kini separa atau ketidakkonsistenan data.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memastikan Pengembalian Transaksi MySQL pada Pengecualian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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