繁体   English   中英

这个sql触发器在哪里包含语法错误?

[英]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 ; 

您缺少BEGINEND并且您还需要分隔符技巧,因为目前您的触发器定义在第一个NEW.rubric_id结束(这就是解析错误发生在该点之后的原因)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM