MySQL không hỗ trợ CHECK constraint (trước 8.0.16), nhưng có thể mô phỏng bằng trigger.
Ví dụ: Kiểm tra định dạng biển số xe
Yêu cầu: 2 chữ cái - 3 chữ số - 2 chữ cái (ví dụ: AB-235-YZ).
mysql> CREATE TABLE car (number CHAR(9));
mysql> INSERT INTO car VALUES('AB-235-YZ'); -- hợp lệ
mysql> INSERT INTO car VALUES('AB-2X5-YZ'); -- KHÔNG hợp lệ (chữ giữa số) nhưng MySQL chấp nhận
Tạo trigger BEFORE INSERT
mysql> DELIMITER //
mysql> CREATE TRIGGER car_insert_check 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 ;
Kiểm tra:
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)
Tạo trigger BEFORE UPDATE
mysql> DELIMITER //
mysql> CREATE TRIGGER car_update_check 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 chặn cả INSERT và UPDATE dữ liệu không hợp lệ.