[英]Where is this sql trigger contain syntax error?
花了大约一个小时才明白。 这个sql触发器在哪里包含语法错误?
CREATE
TRIGGER playlis_trubric_count_on_playlist_shared_update
AFTER UPDATE ON playlist_playlist
FOR EACH ROW
IF (NEW.shared != OLD.shared) AND (NEW.shared = 1) THEN
UPDATE etv.playlist_playlistrubric
SET count = playlist_playlistrubric.count + 1
WHERE etv.playlist_playlistrubric.id = NEW.rubric_id;
ELSEIF (NEW.shared != OLD.shared) AND (NEW.shared = 0) THEN
UPDATE etv.playlist_playlistrubric
SET count = playlist_playlistrubric.count - 1
WHERE etv.playlist_playlistrubric.id = NEW.rubric_id
END IF;
错误说:
您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在'ELSEIF(NEW.shared!= OLD.shared)附近使用正确的语法AND(NEW.shared = 0)THEN UPDATE etv.p'在第1行
从文档 :
通过使用
BEGIN ... END
构造,您可以定义执行多个语句的触发器。 在BEGIN
块中,您还可以使用存储例程(例如条件和循环)中允许的其他语法。 但是,就像存储例程一样,如果使用mysql程序来定义执行多个语句的触发器,则需要重新定义mysql语句分隔符,以便可以使用; 触发器定义中的语句分隔符。 以下示例说明了这些要点。 它定义了一个UPDATE
触发器,用于检查用于更新每一行的新值,并将该值修改为0到100之间的范围。这必须是BEFORE
触发器,因为在将值用于之前需要检查该值更新行:mysql> delimiter // mysql> 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;// mysql> delimiter ;
您缺少BEGIN
和END
并且您还需要分隔符技巧,因为目前您的触发器定义在第一个NEW.rubric_id
结束(这就是解析错误发生在该点之后的原因)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.