mysql - 创建删除触发器时的MySQL语法错误

标签 mysql triggers syntax-error

我在数据库中创建触发器时遇到问题。这个想法是,当从播放列表中删除歌曲时,相应的行将从表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/

相关文章:

mysql - INSERT 后触发到 INCREMENT

sql - PLS-00103 : Encountered the symbol when expecting one of the following:

php - 使用 session 变量从数据库中提取额外数据

mysql - 在 yii2 事件记录中的同一个表的两个列日期之间搜索

mysql - 我可以将此模式用于 where 子句的可选部分吗?

mysql - 查询 Neo4j 数据库中公交车出发时间的问题

php - 每天自动检查网站数据库栏目

sql - 当某些列 = 0 时动态删除记录;数据清理

r - rowSums(Qf) 错误: 'x' 必须是至少二维数组 (msm::msm2surv)

python - 为什么双分号是 Python 中的 SyntaxError?