我想在插入之前创建一个测试条件的触发器,如果条件满足则取消插入。
我在包含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;
答案 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并选择更合适的错误编号。