Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách dùng BEFORE UPDATE trigger để mô phỏng CHECK CONSTRAINT khi cập nhật giá trị

MySQL hỗ trợ khóa ngoại cho tính toàn vẹn tham chiếu nhưng không hỗ trợ CHECK constraint. Có thể mô phỏng bằng trigger. Ví dụ:

Ví dụ

Bảng car có cột số đăng ký dạng cố định: 2 chữ cái, gạch ngang, 3 chữ số, gạch ngang, 2 chữ cái.

mysql> Create table car (number char(9));
Query OK, 0 rows affected (0.32 sec)

Tạo BEFORE UPDATE trigger mô phỏng CHECK CONSTRAINT:

Nếu cập nhật giá trị sai, MySQL không ngăn chặn:

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

Tạo trigger BEFORE UPDATE ngăn chặn dữ liệu sai:

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

Trigger dùng regex kiểm tra định dạng, ném lỗi SIGNAL SQLSTATE '45000' nếu không khớp.