簡體   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