Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm thế nào chúng ta có thể mô phỏng CHECK CONSTRAINT bằng cách sử dụng MySQL GENERATED COLUMN?


Như chúng ta biết rằng MySQL hỗ trợ khóa ngoại cho tính toàn vẹn tham chiếu nhưng nó không hỗ trợ ràng buộc CHECK. Nhưng chúng ta có thể mô phỏng chúng bằng cách sử dụng trình kích hoạt. Nó có thể được minh họa với sự trợ giúp của một ví dụ dưới đây -

Ví dụ

Giả sử chúng ta có một bảng tên là "car" có thể có số đăng ký theo cú pháp sửa chữa như hai chữ cái, một dấu gạch ngang, ba chữ số, một dấu gạch ngang, hai chữ cái như sau -

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)

Giá trị trên là giá trị hợp lệ nhưng còn giá trị mà chúng ta sẽ chèn trong truy vấn tiếp theo thì sao.

mysql> insert into car2 values('AB-2X5-YZ');
Query OK, 1 row affected (0.04 sec)

Giá trị trên không phải là giá trị hợp lệ vì nó chứa một ký tự nằm giữa các chữ số trái với cú pháp cố định mà chúng tôi đang sử dụng.

Sử dụng COLUMN ĐÃ TẠO để mô phỏng CHECK CONSTRAINT để chèn và cập nhật các giá trị -

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)
Records: 0 Duplicates: 0 Warnings: 0

mysql> Describe car2;
+-----------------+---------+------+-----+---------+-------------------+
| Field           | Type    | Null | Key | Default | Extra             |
+-----------------+---------+------+-----+---------+-------------------+
| number          | char(9) | YES  |     | NULL    |                   |
| number_validate | char(0) | NO   |     | NULL    | VIRTUAL GENERATED |
+-----------------+---------+------+-----+---------+-------------------+
2 rows in set (0.00 sec)

mysql> Insert into car2 (number) values('AB-235-YZ');
Query OK, 1 row affected (0.09 sec)

Truy vấn trên sẽ chèn số hợp lệ do đó nó được chấp nhận. Nhưng truy vấn dưới đây không chèn cũng như cập nhật số hợp lệ.

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