2011-11-09 26 views
0

花了大约一个小时才明白。 这个sql触发器在哪里包含语法错误?这个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; 

ERROR表示:

您的SQL语法错误;请检查手册 对应于您的MySQL服务器版本的正确语法在'ELSEIF(NEW.shared!= OLD.shared)AND(NEW.shared = 0)'附近使用 然后 UPDATE etv.p'在第1行

+1

错误说的是什么? –

回答

2

the documentation

通过使用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结束(这是为什么在那个点之后出现解析错误)。

+0

是的......就是这样..谢谢... delimeters是邪恶的:) – Pol