【问题标题】:mysql trigger ckeck constraintmysql触发器检查约束
【发布时间】:2014-01-23 22:34:57
【问题描述】:

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

我创建了一个触发器,我没有错误但是当我插入一个值时!=(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) 中

【问题讨论】:

    标签: mysql sql triggers


    【解决方案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

    【讨论】:

    • 我得到一个错误 ERROR 1193 (HY000): Unknown system variable 'msg'
    • 我添加了声明语句。
    猜你喜欢
    • 2014-06-28
    • 2017-02-28
    • 2013-08-26
    • 2012-03-12
    • 2015-01-02
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多