花了大约一个小时来理解。 这个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)和(NEW.shared = 0)那么 UPDATE etv.p'在第1行
答案 0 :(得分:2)
通过使用
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
结束(这就是为什么在该点之后发生解析错误。)