2011-11-09 40 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