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