我是SQL的新手,触发器中的语法有问题。我试图将赛后的马匹的最低额定为1,最高额定为5。问题似乎出在IF语句上。 任何帮助将不胜感激。
CREATE TRIGGER new_rating
AFTER insert on stats
FOR EACH ROW
BEGIN
IF (new.rating > 5) THEN
SET new.rating = 5
ELSEIF (new.rating < 1) THEN
SET new.rating = 1
END IF;
END; //
答案 0 :(得分:1)
错误1362(HY000):触发后不允许更新NEW行
这是错误。这意味着您不能使用SET
来更改要插入的行的任何值,因为在AFTER INSERT
触发器中,该行已被插入。您必须在BEFORE INSERT
触发器中执行此操作,才能使其正常工作。
您应该阅读https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html,其中指出:
这种SET语句在AFTER触发器中不起作用,因为行更改已经发生。
如果我更正此错误并将其更改为BEFORE INSERT
触发器,则会收到此错误:
错误1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册以获取正确的语法,以在'ELSEIF(new.rating <1)附近使用...
我注意到您没有用分号结束SET
语句。必须终止触发器中的每个语句,包括SET
语句。
这是有效的触发器:
CREATE TRIGGER new_rating BEFORE insert on stats
FOR EACH ROW BEGIN
IF (new.rating > 5) THEN
SET new.rating = 5;
ELSEIF (new.rating < 1) THEN
SET new.rating = 1;
END IF;
END