การจำลอง CHECK CONSTRAINT ด้วย BEFORE INSERT Trigger
MySQL รองรับ Foreign Key สำหรับความสมบูรณ์ของการอ้างอิง แต่ไม่รองรับ CHECK Constraint โดยตรง อย่างไรก็ตาม เราสามารถจำลองได้โดยใช้ Trigger
ตัวอย่าง
สมมติเรามีตาราง car ที่ต้องการหมายเลขทะเบียนรูปแบบคงที่: ตัวอักษร 2 ตัว - ตัวเลข 3 ตัว - ตัวอักษร 2 ตัว (เช่น AB-235-YZ)
mysql> CREATE TABLE car (number CHAR(9));
Query OK, 0 rows affected (0.32 sec)
mysql> INSERT INTO car VALUES('AB-235-YZ');
Query OK, 1 row affected (0.10 sec)
ค่าด้านบนถูกต้อง แต่ถ้าเราแทรกค่าที่ไม่ถูกต้อง:
mysql> INSERT INTO car VALUES('AB-2X5-YZ');
Query OK, 1 row affected (0.04 sec)
ค่านี้ไม่ถูกต้องเพราะมีตัวอักษรอยู่ระหว่างตัวเลข ซึ่งขัดกับรูปแบบที่กำหนด
สร้าง BEFORE INSERT Trigger เพื่อป้องกันการแทรกข้อมูลที่ไม่ถูกต้อง
mysql> DELIMITER //
mysql> CREATE TRIGGER car_insert_value BEFORE INSERT 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.15 sec)
mysql> DELIMITER ;
mysql> DELETE FROM car;
Query OK, 2 rows affected (0.06 sec)
ตอนนี้ลองแทรกข้อมูลที่ไม่ถูกต้องอีกครั้ง:
mysql> INSERT INTO car VALUES('AB-2X5-YZ');
ERROR 1644 (45000): Not a Valid Number
แต่ข้อมูลที่ถูกต้องยังแทรกได้ปกติ:
mysql> INSERT INTO car VALUES('AB-235-YZ');
Query OK, 1 row affected (0.04 sec)