MySQL ไม่รองรับ CHECK constraint แต่สามารถจำลองได้ด้วย GENERATED COLUMN (รองรับ MySQL 5.7+)
ตัวอย่าง
ตาราง 'car2' รูปแบบเลขทะเบียน: 2 ตัวอักษร, ขีด, 3 ตัวเลข, ขีด, 2 ตัวอักษร
mysql> CREATE TABLE car2 (number CHAR(9));
mysql> INSERT INTO car2 VALUES('AB-235-YZ');
mysql> INSERT INTO car2 VALUES('AB-2X5-YZ'); -- ไม่ถูกต้อง (มีตัวอักษรระหว่างตัวเลข)
ใช้ GENERATED COLUMN จำลอง CHECK CONSTRAINT
mysql> ALTER TABLE car2 ADD COLUMN number_validate CHAR(0) AS (
-> CASE WHEN number RLIKE '^[[:alpha:]]{2}-[[:digit:]]{3}-[[:alpha:]]{2}$'
-> THEN '' END
-> ) VIRTUAL NOT NULL;
Query OK, 0 rows affected (0.53 sec)
mysql> DESCRIBE car2;
+-----------------+---------+------+-----+---------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------+------+-----+---------+-------------------+
| number | char(9) | YES | | NULL | |
| number_validate | char(0) | NO | | NULL | VIRTUAL GENERATED |
+-----------------+---------+------+-----+---------+-------------------+
เพิ่มค่าที่ถูกต้อง ได้:
mysql> INSERT INTO car2 (number) VALUES('AB-235-YZ');
Query OK, 1 row affected (0.09 sec)
เพิ่มหรืออัปเดตค่าที่ไม่ถูกต้อง ล้มเหลว:
mysql> INSERT INTO car2 (number) VALUES('AB-2X5-YZ');
ERROR 1048 (23000): Column 'number_validate' cannot be null
mysql> UPDATE car2 SET number='AB-2X5-YZ';
ERROR 1048 (23000): Column 'number_validate' cannot be null