Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีจำลอง CHECK CONSTRAINT ด้วย MySQL GENERATED COLUMN

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