mysql触发器检查约束

时间:2014-01-23 22:34:58

标签: mysql sql triggers

我有一个错误,当我想创建一个触发器来检查salle表中的新条目 我有一张表(nSalle,nbComputer,负责) 如果nSalle在(1,2,3,4,5),我想在插入前ckeck否则,我将限制插入

我创建了一个触发器,我没有错误但是当我插入一个值!=(1,2,3,4,5)我得到它插入女巫不是我想要的

到目前为止她是我的代码

delimiter // 

create trigger before_insert_salle before insert
on salle
for each row
begin
(nSalle,nbComputer,responsible) 
if new.nSalle in (1,2,3,4,5) then 
 set new.nSalle = new.nSalle,
     new.nbComputer = new.nbComupter,
     new.responsible = new.responsible ; 
end if ; 
end // 

当我插入像这样的记录时

insert into salle values (10,20,'Joe')是有效的,女巫是错的10不在(1,2,3,4,5)

1 个答案:

答案 0 :(得分:1)

您希望在违反约束时发出错误信号。 MySQL现在允许您使用signal执行此操作:

delimiter // 

create trigger before_insert_salle before insert
on salle
for each row
begin
declare msg varchar(255);
if new.nSalle not in (1,2,3,4,5) then 
    SET msg = concat('Constraint on nSalle violated: invalid value ', cast(new.nSalle as varchar(255)));
    SIGNAL sqlstate '45000' SET message_text = msg;
end if ; 
end //

signal上的文档是here