首页 > 解决方案 > 如何在表中删除后更新某些元组

问题描述

我正在尝试在 SQLite 中对音乐流服务数据库进行建模,并且我想创建这个触发器:当从播放列表中删除一首歌曲时,在它之后出现的每首歌曲都需要减少其位置。我不太确定如何编写此触发器。

这是播放列表表的示例(对不起葡萄牙语名称。idMusica = 歌曲 ID;posicao = 歌曲在播放列表中的位置)

播放列表

为了进一步解释我想要的例子:如果我从播放列表 1 中删除歌曲 6,歌曲 11 的位置将变为 3。

标签: sqlitetriggers

解决方案


我相信以下内容会如您所愿:-

CREATE TRIGGER IF NOT EXISTS playlistreorder 
    AFTER DELETE ON playlist
    BEGIN
        UPDATE playlist SET posicao = posicao -1 WHERE posicao > old.posicao AND idPlayList = old.idPlayList;
    END
;
  • 请注意,表名称已假定为播放列表

例子

考虑以下测试:-

DROP TABLE IF EXISTS playlist;
CREATE TABLE IF NOT EXISTS playlist (idMusica INTEGER, idPlayList INTEGER, posicao INTEGER);
INSERT INTO playlist (idMusica,idPlayList, posicao) VALUES
    (12,1,1),(5,1,2),(6,1,3),(11,1,4),
    (1,2,1),(2,2,2),(3,2,2),(4,2,4),(9,2,5)
;

CREATE TRIGGER IF NOT EXISTS playlistreorder 
    AFTER DELETE ON playlist
    BEGIN
        UPDATE playlist SET posicao = posicao -1 WHERE posicao > old.posicao AND idPlayList = old.idPlayList;
    END
;
SELECT * FROM playlist;
DELETE FROM playlist WHERE posicao = 3 AND idplayList = 1;
SELECT * FROM playlist;

示例结果

重新排序之前(第一次查询):-

在此处输入图像描述

重新排序后(第二次查询):-

在此处输入图像描述


推荐阅读