我有歌手、专辑和单曲三张表,关系如下:

如果删除歌手,专辑和单曲会被删除;
但,专辑被删除前,单曲会阻止专辑被删除;
现在我删除张三报错了(在 Django ORM 构建的这种关系是可以将张三删除的)
DELETE FROM Artist WHERE id=1; # 无法删除 张三
请问有没有大佬了解 MySQL 里外键的 CASCADE 、RESTRICT 选项有没有优先级?或其它什么机制?
我测试的表结构及数据如下:
CREATE TABLE Artist(# 歌手
id INT PRIMARY KEY,
NAME VARCHAR(10)
)
CREATE TABLE Album(# 专辑
id INT PRIMARY KEY,
artist VARCHAR(10),
artist_id INT,
FOREIGN KEY (artist_id) REFERENCES Artist(id)
ON DELETE CASCADE ON UPDATE CASCADE # 歌手被删除时,他的专辑跟随一起被删除
)
CREATE TABLE Song(# 单曲
id INT PRIMARY KEY,
NAME VARCHAR(10),
artist_id INT,
album_id INT,
FOREIGN KEY (album_id) REFERENCES Album(id)
ON DELETE RESTRICT ON UPDATE RESTRICT,# 专辑被删除前,单曲阻止专辑被删除
FOREIGN KEY (artist_id) REFERENCES Artist(id)
ON DELETE CASCADE ON UPDATE CASCADE# 歌手被删除时,单曲跟随一起被删除
)
INSERT INTO Artist VALUES (1, "张三"), (2, "李四"); # 添加两名歌手:张三、李四
INSERT INTO Album VALUES (1, "光专辑", 1), (2, "夜专辑", 2); # 添加两张专辑:光专辑 属于 张三,夜专辑 属于 李四
INSERT INTO Song VALUES (1, "太阳", 1, 1), (2, "月亮", 1, 2); # 添加两首单曲:太阳 属于 张三的光专辑,月亮 属于 夜专辑(但不属于李四的单曲,而是属于张三的单曲)