触发器IF语句中的MySQL语法错误?
我对SQL非常陌生,在触发器中遇到语法问题。我正在尝试设置一个最低等级为1,最高等级为5的马后,比赛。问题似乎在于IF语句。 任何帮助都将不胜感激触发器IF语句中的MySQL语法错误?,mysql,sql,triggers,Mysql,Sql,Triggers,我对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
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; //
创建新的触发等级
在统计数据上插入后
每行
开始
如果(新评级>5),则
设置新的额定值=5
ELSEIF(新评级<1)则
设置新的额定值=1
如果结束;
结束//
错误1362(HY000):在after触发器中不允许更新新行
这就是错误所在。这意味着您不能使用SET
更改正在插入的行的任何值,因为在插入后的触发器中,该行已被插入。您必须在插入触发器之前在中执行此操作,才能使其工作
你应该读一读,上面写着:
这样的SET语句在AFTER触发器中无效,因为行更改将已经发生
如果在插入触发器之前更正此错误并将其更改为,则会出现以下错误:
错误1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near'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
在插入统计数据之前创建触发新的_评级
每行开始
如果(新评级>5),则
设置新的。额定值=5;
ELSEIF(新评级<1)则
设置新的。额定值=1;
如果结束;
结束