Menggunakan pencetus untuk menghentikan sisipan atau kemas kini dalam MySQL?

PHPz
Lepaskan: 2023-08-25 20:49:16
ke hadapan
1219 orang telah melayarinya

使用触发器来停止 MySQL 中的插入或更新?

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 ;
Salin selepas log masuk

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 &#39;45000&#39;
   -> SET MESSAGE_TEXT = &#39;You can not insert record&#39;;
   -> END IF;
   -> END //
Query OK, 0 rows affected (0.20 sec)
mysql> DELIMITER ;
Salin selepas log masuk

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)
Salin selepas log masuk

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
Salin selepas log masuk

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)
Salin selepas log masuk

Gunakan pernyataan pilih untuk memaparkan semua rekod dalam jadual. Pertanyaannya adalah seperti berikut:

mysql> select *from Insert_Prevent;
Salin selepas log masuk

Berikut ialah output:

+------+
| Id   |
+------+
|    1 |
|    5 |
|    2 |
|    3 |
+------+
4 rows in set (0.00 sec)
Salin selepas log masuk

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!

sumber:tutorialspoint.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!