我有3张桌子,如下:
release (release_id, name, ...)
medium (medium_id, release_id, name, ...)
track (track_id, medium_id, title, ...)
只有release_id,我希望能够使用一个查询一次性删除与该release_id相关联的曲目和媒体。
有可能吗?如果是的话,我可以得到一个粗略的模板,我会弄清楚其余的。
我是否需要多次删除查询?
答案 0 :(得分:2)
严格地说,是的,你需要三个单独的删除声明。
但是,如果您始终希望在从“发布”中删除行时从其他两个表中删除关联的行。表,您可以在'发布'上使用外键和ON DELETE CASCADE约束。表
答案 1 :(得分:1)
在第一行中,您可以定义要在连接中删除哪些表
delete r, m, t
from release r
left join medium m on m.release_id = r.release_id
left join track t on t.medium_id = m.medium_id
where r.release_id = 123
答案 2 :(得分:1)
是的,您可以通过在delete语句中引用多个表在一个语句中执行此操作:
DELETE FROM `release`, medium, track
USING `release`, medium, track
WHERE `release`.release_id = medium.release_id
AND medium.medium_id = track.medium_id
AND `release`.release_id = 1;
如果这是应该经常发生的事情,您可能需要查看外键的on delete cascade
选项。有关详细信息,请参阅文档:13.1.14.2 Using FOREIGN KEY Constraints