Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การใช้ BEFORE UPDATE Trigger เพื่อจำลอง CHECK CONSTRAINT สำหรับการ UPDATE ค่าในตาราง


MySQL รองรับ foreign key สำหรับ referential integrity แต่ **ไม่รองรับ CHECK constraint** สามารถจำลองได้ด้วย trigger ตัวอย่าง:

ตัวอย่าง

ตาราง car คอลัมน์ number ต้องมีรูปแบบคงที่: 2 ตัวอักษร - 3 หลัก - 2 ตัวอักษร (เช่น AB-123-CD)

mysql> Create table car (number char(9));
Query OK, 0 rows affected (0.32 sec)

หาก UPDATE ด้วยค่าผิดรูปแบบ MySQL ไม่หยุด:

mysql> update car set number='AB-2X5-YZ';
Query OK, 1 row affected (0.04 sec)

สร้าง BEFORE UPDATE trigger ตรวจสอบรูปแบบด้วย regex:

mysql> delimiter //
mysql> create trigger car_update_value before update on car
-> for each row
-> begin
-> if new.number not rlike '^[[:alpha:]]{2}-[[:digit:]]{3}-[[:alpha:]]{2}$'
-> then
->   signal sqlstate '45000' set message_text = 'Not a valid number';
-> end if;
-> end //
Query OK, 0 rows affected (0.11 sec)
mysql> Delimiter ;
mysql> update car set number='AB-2X5-YZ';
ERROR 1644 (45000): Not a valid number

Trigger ป้องกันการ UPDATE ค่าที่ไม่ตรงรูปแบบได้สำเร็จ