插入前的MySQL测试和条件满足时取消

时间:2016-07-26 08:36:16

标签: mysql triggers insert

我想在插入之前创建一个测试条件的触发器,如果​​条件满足则取消插入。

我在包含if语句的手册中遇到了这段代码,但在文档中没有指定取消插入的方法。

CREATE TRIGGER upd_check BEFORE UPDATE ON account -> FOR EACH ROW -> BEGIN -> IF NEW.amount < 0 THEN -> SET NEW.amount = 0; -> ELSEIF NEW.amount > 100 THEN -> SET NEW.amount = 100; -> END IF; -> END;

1 个答案:

答案 0 :(得分:2)

您必须使用signal

  

SIGNAL是“返回”错误的方法。 SIGNAL提供错误   信息到处理程序,应用程序的外部,或   给客户。此外,它还可以控制错误   特征(错误号,SQLSTATE值,消息)。

因此你可以拥有

CREATE TRIGGER upd_check BEFORE UPDATE ON account
    -> FOR EACH ROW
    -> BEGIN
    ->     IF NEW.amount < 0 THEN
    ->         SET NEW.amount = 0;
    ->     ELSEIF NEW.amount > 100 THEN
    ->         SET NEW.amount = 100;
           ELSE
               SIGNAL SQLSTATE '01000'
                 SET MESSAGE_TEXT = 'Sorry cannot insert', MYSQL_ERRNO = 1000;
    ->     END IF;
    -> END;

更新:您可能还想查看error messages list并选择更合适的错误编号。