MySQL รองรับ foreign key สำหรับ referential integrity แต่ไม่รองรับ CHECK constraint แต่สามารถจำลองได้ด้วย triggers
ตัวอย่าง
สมมติว่ามีตาราง 'car' ที่มีรูปแบบเลขทะเบียนคงที่: 2 ตัวอักษร, ขีด, 3 ตัวเลข, ขีด, 2 ตัวอักษร
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 จำลอง CHECK CONSTRAINT
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)
ลองเพิ่มเลขทะเบียนผิด trigger จะบล็อกและแสดงข้อผิดพลาด:
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)
สร้าง BEFORE UPDATE Trigger จำลอง CHECK CONSTRAINT สำหรับ UPDATE
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