[英]Mysql syntax error when creating trigger on delete
我在數據庫中創建觸發器時遇到問題。 這個想法是,當從播放列表中刪除一首歌曲時,相應的行會從表playlistcancion
中刪除。 觸發器的想法是它從播放列表的總時間中刪除已刪除歌曲的時間。
view name: pycs (shows songs of corresponding playlists)
column name | SongID | playlistID | Playlist | songName | Duration
data type | INT | INT | varchar | varchar | TIME
table name: playlistcancion (keeps track of which songs are in which playlists)
column name | songID | playlistID
data type | INT | INT
table name: playlists (playlist data and creators userID)
column name | playlistID| userID | Followers | Title | TotalDuration
data type | INT | INT | INT | varchar| TIME
這是我的觸發器查詢:
CREATE TRIGGER remove_time
AFTER DELETE ON playlistcancion
FOR EACH ROW
DECLARE dur TIME;
SELECT Duration INTO dur FROM pycs WHERE playlistID = OLD.playlistID AND songID = OLD.songID;
UPDATE playlists SET TotalDuration = SEC_TO_TIME(TIME_TO_SEC(TotalDuration) - TIME_TO_SEC(dur))
WHERE playlistID = OLD.playlistID;
我得到的錯誤是:MySQL 說:#1064 - 'DECLARE dur TIME; 附近的語法有問題; SELECT Duration INTO dur FROM pycs WHERE playlisID = OLD.pla' 在第 1 行我使用 phpMyAdmin 創建觸發器。 提前致謝。
添加 BEGIN 和 END 解決了您遇到的錯誤。
CREATE TRIGGER remove_time
AFTER DELETE ON playlistcancion
FOR EACH ROW BEGIN
DECLARE dur TIME;
SELECT Duration INTO dur FROM pycs WHERE playlistID = OLD.playlistID AND songID = OLD.songID;
UPDATE playlists SET TotalDuration = SEC_TO_TIME(TIME_TO_SEC(TotalDuration) - TIME_TO_SEC(dur))
WHERE playlistID = OLD.playlistID;
END;
如果您遇到更多問題,最好使用觸發器中涉及的所有表的插入腳本發布。
將您的觸發器組合成單語句形式:
CREATE TRIGGER remove_time
AFTER DELETE
ON playlistcancion
FOR EACH ROW
UPDATE playlists
SET TotalDuration = SEC_TO_TIME( TIME_TO_SEC(TotalDuration)
- TIME_TO_SEC(SELECT Duration
FROM pycs
WHERE playlistID = OLD.playlistID
AND songID = OLD.songID))
WHERE playlistID = OLD.playlistID;
現在它不需要在中間變量、BEGIN-END 塊和 DELIMITER 中重新分配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.