一尘不染

使用触发器停止插入或更新

mysql

由于MySQL忽略了检查约束,如何使用触发器来阻止插入或更新的发生?

例如:

表foo有一个称为agency的属性,并且agency属性只能是1、2、3、4或5。

delimiter $$
create trigger agency_check
before insert on foo
for each row
begin
if (new.agency < 1 or new.agency > 5) then

#Do nothing?

end if;
end
$$
delimiter ;

还是有更好的方法来进行MySQL中的检查约束?


阅读 270

收藏
2020-05-17

共1个答案

一尘不染

尝试SIGNAL语法-https:
//dev.mysql.com/doc/refman/5.5/en/signal.html

create trigger agency_check
before insert on foo
for each row
begin
  if (new.agency < 1 or new.agency >5) then
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'your error message';
  end if 
end

编辑

根据Bill Karwin下面的热门评论进行了更新。

2020-05-17