如何在一个查询中删除多个表中的数据

时间:2015-04-05 12:33:32

标签: mysql

我有3张桌子,如下:

release (release_id, name, ...)

medium (medium_id, release_id, name, ...)

track (track_id, medium_id, title, ...)

只有release_id,我希望能够使用一个查询一次性删除与该release_id相关联的曲目和媒体。

有可能吗?如果是的话,我可以得到一个粗略的模板,我会弄清楚其余的。

我是否需要多次删除查询?

3 个答案:

答案 0 :(得分:2)

严格地说,是的,你需要三个单独的删除声明。

但是,如果您始终希望在从“发布”中删除行时从其他两个表中删除关联的行。表,您可以在'发布'上使用外键和ON DELETE CASCADE约束。表

参见,例如http://www.mysqltutorial.org/mysql-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;

Sample SQL Fiddle

如果这是应该经常发生的事情,您可能需要查看外键的on delete cascade选项。有关详细信息,请参阅文档:13.1.14.2 Using FOREIGN KEY Constraints