Anda perlu menggunakan arahan SIGNAL SQL STATE untuk menghentikan sisipan atau kemas kini dalam MySQL. Sintaks pencetus adalah seperti berikut:
DELIMITER // CREATE TRIGGER yourTriggerName BEFORE INSERT ON yourTableName FOR EACH ROW BEGIN yourCondition THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'anyMessageToEndUser'; END // DELIMITER ;
Sekarang, cipta pencetus untuk mengelakkan daripada memasukkan rekod dalam jadual dalam keadaan tertentu. Pertanyaan untuk mencipta pencetus adalah seperti berikut:
mysql> DELIMITER // mysql> CREATE TRIGGER InsertPreventTrigger BEFORE INSERT ON Insert_Prevent -> FOR EACH ROW -> BEGIN -> IF(new.Id < 1 or new.Id > 5) THEN -> SIGNAL SQLSTATE '45000' -> SET MESSAGE_TEXT = 'You can not insert record'; -> END IF; -> END // Query OK, 0 rows affected (0.20 sec) mysql> DELIMITER ;
Setiap kali rekod kurang daripada 0 atau lebih daripada 5 dimasukkan, pencetus di atas akan berhenti memasukkan.
Sekarang mari buat jadual dahulu. Pertanyaan untuk mencipta jadual adalah seperti berikut:
mysql> create table Insert_Prevent -> ( -> Id int -> ); Query OK, 0 rows affected (0.62 sec)
Sekarang masukkan rekod kurang daripada 0 atau lebih daripada 5. Ini akan mengakibatkan mesej ralat kerana apabila rekod kurang daripada 0 atau lebih besar daripada 5 dimasukkan, pencetus dicipta untuk menghentikan pemasukan. Mesej ralat adalah seperti berikut:
mysql> insert into Insert_Prevent values(0); ERROR 1644 (45000): You cannot insert record mysql> insert into Insert_Prevent values(6); ERROR 1644 (45000): You cannot insert record
Jika anda memasukkan rekod antara 1 dan 5, tiada ralat akan berlaku. Ia tidak menghalang pemasukan rekod kerana seperti yang dinyatakan di atas, kami mencipta pencetus untuk memasukkan rekod antara 1 dan 5. Pertanyaan untuk memasukkan rekod adalah seperti berikut:
mysql> insert into Insert_Prevent values(1); Query OK, 1 row affected (0.20 sec) mysql> insert into Insert_Prevent values(5); Query OK, 1 row affected (0.17 sec) mysql> insert into Insert_Prevent values(2); Query OK, 1 row affected (0.11 sec) mysql> insert into Insert_Prevent values(3); Query OK, 1 row affected (0.23 sec)
Gunakan pernyataan pilih untuk memaparkan semua rekod dalam jadual. Pertanyaannya adalah seperti berikut:
mysql> select *from Insert_Prevent;
Berikut ialah output:
+------+ | Id | +------+ | 1 | | 5 | | 2 | | 3 | +------+ 4 rows in set (0.00 sec)
Atas ialah kandungan terperinci Menggunakan pencetus untuk menghentikan sisipan atau kemas kini dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!