Mencegah Kemas Kini Jadual Menggunakan Pencetus MySQL dengan Pengendalian Ralat
MySQL menyediakan mekanisme yang berkuasa untuk menguatkuasakan integriti data dan peraturan perniagaan melalui pencetus. Satu senario kritikal adalah menghalang kemas kini yang tidak dibenarkan atau tidak sah pada jadual. Artikel ini menunjukkan cara memanfaatkan pencetus MySQL untuk membuang ralat dan menghalang kemas kini sedemikian.
Melempar Ralat dalam Pencetus
Setakat MySQL 5.5, sintaks SIGNAL membenarkan pembangun membuang pengecualian dalam pencetus. Pernyataan SIGNAL mengambil dua parameter:
SIGNAL sqlstate SET message_text = 'Error Message';
di mana sqlstate menentukan jenis pengecualian dan message_text mentakrifkan mesej ralat tersuai. Jenis pengecualian hendaklah kod lima digit yang mewakili keadaan ralat yang berkenaan.
Mencipta Pencetus Tersuai untuk Pengendalian Ralat
Pertimbangkan contoh berikut: anda ingin menghalang kemas kini ke jadual jika nilai baharu lajur tertentu adalah negatif. Untuk mencapai matlamat ini, cipta pencetus sebelum operasi kemas kini seperti berikut:
CREATE TRIGGER trg_before_update BEFORE UPDATE ON my_table FOR EACH ROW BEGIN DECLARE msg VARCHAR(128); IF NEW.column_name < 0 THEN SET msg = CONCAT('MyTriggerError: Negative value in column_name: ', CAST(NEW.column_name AS CHAR)); SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg; END IF; END
Pencetus menyemak sama ada nilai baharu lajur_nama_lajur adalah negatif. Jika ya, ia membina mesej ralat tersuai dan membuang pengecualian menggunakan pernyataan SIGNAL. 45000 SQLSTATE mewakili pengecualian takrif pengguna yang tidak dikendalikan.
Menguji Pencetus
Laksanakan pernyataan berikut untuk menguji pencetus:
-- Insert valid and invalid data: INSERT INTO my_table (column_name) VALUES (1), (-1), (2); -- Display the table contents: SELECT * FROM my_table; -- Attempt to insert invalid data: INSERT INTO my_table (column_name) VALUES (-1);
Pernyataan INSERT pertama akan gagal kerana satu baris mengandungi nilai negatif, mencetuskan ralat tersuai yang ditakrifkan dalam pencetus. Pernyataan INSERT seterusnya juga akan gagal kerana pencetus menghalang kemas kini dengan nilai negatif.
Atas ialah kandungan terperinci Bagaimanakah Pencetus MySQL Dapat Menghalang Kemas Kini Jadual dan Mengendalikan Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!