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

Làm cách nào để sử dụng trình kích hoạt TRƯỚC KHI CẬP NHẬT để mô phỏng CHECK CONSTRAINT để cập nhật các giá trị trong bảng?


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 car (number char(9));
Query OK, 0 rows affected (0.32 sec)

Tạo trình kích hoạt TRƯỚC KHI CẬP NHẬT để mô phỏng CHECK CONSTRAINT để cập nhật các giá trị -

Bây giờ, giả sử nếu chúng tôi cố gắng cập nhật bảng với một giá trị không chính xác thì MySQL sẽ không ngăn chúng tôi làm như vậy như sau -

mysql> update car set number='AB-2X5-YZ';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Truy vấn trên đã cập nhật giá trị không chính xác trong bảng ‘car’. Trong truy vấn sau, chúng tôi sẽ tạo một trình kích hoạt TRƯỚC KHI CẬP NHẬT sẽ ngăn chúng tôi cập nhật dữ liệu không chính xác trong bảng -

mysql> delimiter //
mysql> create trigger car_update_value 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