如何解决在插入之前创建触发器时,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 ;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。