我在数据库中创建触发器时遇到问题。这个想法是,当从播放列表中删除歌曲时,相应的行将从表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附近的语法有问题;在第1行的pycs中选择持续时间INTO dur从pycs处playlisID = OLD.pla'
我正在使用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;
如果您面临更多问题,最好使用触发器中涉及的所有表的插入脚本发布。
关于mysql - 创建删除触发器时的MySQL语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63186713/