MySQL CHECK কনস্ট্রেইন্ট সরাসরি সমর্থন করে না (৮.০.১৬ এর আগে), কিন্তু GENERATED COLUMN ব্যবহার করে এটি অনুকরণ করা যায়।
উদাহরণ: গাড়ির নম্বার ফরম্যাট ভ্যালিডেশন
ফরম্যাট: AB-235-YZ (দুই অক্ষর-ড্যাশ-তিন ডিজিট-ড্যাশ-দুই অক্ষর)।
mysql> CREATE TABLE car2 (number CHAR(9));
Query OK, 0 rows affected (0.32 sec)
mysql> INSERT INTO car2 VALUES('AB-235-YZ'); -- বৈধ
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO car2 VALUES('AB-2X5-YZ'); -- অবৈধ
Query OK, 1 row affected (0.04 sec) -- কোনো এরর নেই!
GENERATED COLUMN যোগ করা (VIRTUAL, NOT NULL)
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 -- আপডেটও ব্লক
কারণ
number_validate কলামটি VIRTUAL GENERATED এবং NOT NULL। যদি রেজেক্স মিল না খায়, তবে CASE এক্সপ্রেশন NULL রিটার্ন করে, যা NOT NULL লঙ্ঘন করে এবং এরর ফেলে।