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 ;
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!