假设我有一张桌子
artists
和一张桌子
tracks
,两者之间存在多对多的关系。
当我删除一个艺术家时,我还想自动删除所有不再有相应艺术家的曲目,即在删除操作的同一命令中。
我可以对关联表执行此操作(即删除引用艺术家的相应行),但不能对曲目表中的孤立行执行此操作。
代码示例:
DROP TABLE IF EXISTS artists2tracks;
DROP TABLE IF EXISTS artists;
DROP TABLE IF EXISTS tracks;
CREATE TABLE artists (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL);
CREATE TABLE tracks (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL);
CREATE TABLE artists2tracks (
id INTEGER PRIMARY KEY,
artists_id INTEGER REFERENCES artists(id) ON DELETE CASCADE,
tracks_id INTEGER REFERENCES tracks(id) ON DELETE CASCADE
);
INSERT INTO artists (name) VALUES ("A1"),("A2"),("A3");
INSERT INTO tracks (title) VALUES ("T1"),("T2"),("T3");
INSERT INTO artists2tracks (artists_id, tracks_id) VALUES (1,1),(1,2),(2,2),(2,3),(3,3);
DELETE FROM artists WHERE id=1;