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

时间:2012-04-16 03:31:37

标签: mysql triggers

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

例如:

表格foo有一个名为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中进行检查约束吗?

2 个答案:

答案 0 :(得分:22)

尝试使用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 'your error message'
  end if 
end

答案 1 :(得分:4)

如果您的MySQL版本低于5.5,请尝试将表的非空字段设置为NULL。这是一个黑客攻击,但它确实阻止了更新或插入完成。

Naveen建议的SIGNAL命令看起来很棒,我期待在升级后使用它。