Melindungi Integriti Data: Melancarkan Transaksi MySQL pada Pengecualian
Salah satu prinsip utama pengurusan pangkalan data ialah mengekalkan integriti dan ketekalan data . Transaksi memainkan peranan penting dalam memastikan berbilang operasi pangkalan data sama ada komited sepenuhnya atau dibatalkan semula sekiranya berlaku ralat.
Cabaran: Automatik Rollback pada Ralat
Pertimbangkan senario berikut: satu siri arahan MySQL dilaksanakan dalam urus niaga. Walau bagaimanapun, salah satu daripada arahan, katakan yang kedua, menghadapi ralat. Tingkah laku yang diharapkan adalah untuk keseluruhan urus niaga gagal dan melancarkan semula, sekali gus menghalang data yang tidak lengkap daripada ditulis ke pangkalan data. Walau bagaimanapun, diperhatikan bahawa ralat tidak menyebabkan urus niaga ditarik balik.
Penyelesaian: ISYTIHKAN ... Sintaks PENGENDALI
Untuk mengendalikan cabaran ini, MySQL menyediakan sintaks DECLARE ... HANDLER, yang membolehkan anda menentukan pengendali tersuai untuk pelbagai jenis pengecualian. Dengan menggunakan sintaks ini, adalah mungkin untuk melancarkan semula transaksi secara automatik jika berlaku sebarang ralat.
Coretan kod berikut menunjukkan cara menggunakan sintaks DECLARE ... HANDLER untuk mencapai rollback automatik:
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 kod ini, pengendali tersuai diisytiharkan menggunakan pernyataan DECLARE CONTINUE HANDLER FOR SQLEXCEPTION. Apabila pengecualian SQL berlaku, pembolehubah _rollback ditetapkan kepada 1, menunjukkan bahawa urus niaga harus digulung semula. Penyataan IF ... THEN ... ELSE pada penghujung menyemak nilai _rollback dan melaksanakan sama ada ROLLBACK atau COMMIT sewajarnya.
Dengan menggunakan pendekatan ini, sebarang ralat yang dihadapi semasa pelaksanaan transaksi akan mencetuskan rollback, memastikan pangkalan data kekal dalam keadaan yang konsisten dan sah.
Atas ialah kandungan terperinci Bagaimanakah Transaksi MySQL Boleh Digulung Kembali Secara Automatik pada Pengecualian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!