微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在插入之前创建触发器时,IF ELSE块附近的MySQL错误代码#1064

如何解决在插入之前创建触发器时,IF ELSE块附近的MySQL错误代码#1064

我正在尝试对数据库进行约束,如果必须维护generic_asset.type = 'raw'则必须generic_asset.atomic = 1。为此,我编写了以下类型为BEFORE INSERT的触发器。这是代码段:

DELIMITER //

CREATE TRIGGER generic_asset_check BEFORE INSERT ON generic_asset FOR EACH ROW
BEGIN
   IF NEW.type = 'raw' THEN
   BEGIN
       IF NEW.atomic = 0 THEN
           SET sqlSTATE = 'Sorry cannot insert';
       END IF;
   END IF;
END //


DELIMITER ;

错误就像:

#1064 - Syntax error near 'sqlSTATE = 'Sorry cannot insert';
       END IF;
   END IF;
END' in line 6

(从法语翻译)。

我尝试了各种语法,但是所有缝隙都不起作用,并且知道我的更改与更改双引号一样,用BEGIN删除END IF;太少了...所以我知道这些转弯是无礼的。

我在许多互联网资源和官方文档中修改了语法,没有任何帮助。

解决方法

MySQL的IF语句不使用BEGIN关键字。另外,如果要从触发器内引发错误,则需要SIGNAL。最后,这两个嵌套条件可以展平。

考虑:

DELIMITER //
CREATE TRIGGER generic_asset_check BEFORE INSERT ON generic_asset FOR EACH ROW
BEGIN
   IF NEW.type = 'raw' AND NEW.atomic = 0 THEN
       SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Sorry cannot insert';
   END IF;
END //
DELIMITER ;

Demo on DB Fiddle

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。