MySQL 如何使用BEFORE UPDATE触发器模拟CHECK CONSTRAINT以更新表中的值?

MySQL 如何使用BEFORE UPDATE触发器模拟CHECK CONSTRAINT以更新表中的值?

如我们所知,MySQL支持外键用于引用完整性检查,但不支持CHECK约束。但是我们可以使用触发器来模拟它们。下面的示例可以说明:

阅读更多:MySQL 教程

示例:

假设我们有一个名为“car”的表,其注册号码的固定语法如下 – 两个字母、一个短横线、三个数字、一个短横线、两个字母。如下所示:

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

创建BEFORE UPDATE触发器,以模拟更新值的CHECK CONSTRAINT-

现在,假设我们尝试使用不正确的值更新表,那么 MySQL 将不会阻止我们这样做,如下所示:

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

上述查询在表“car”中更新了不正确的值。在以下查询中,我们将创建一个BEFORE UPDATE触发器,它将防止我们更新表中的不正确数据 –

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程