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

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

问题描述:

我有3个表,就像这样:如何删除多个表中的数据在一个查询

release (release_id, name, ...) 

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

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

只具有RELEASE_ID,我希望能够同时删除曲目,并与RELEASE_ID在相关媒体一次使用一个查询。

可能吗?如果是,我可以得到一个粗略的模板,我会找出其余的。

我需要多个删除查询吗?

是的,你可以在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

严格来说,是的,你需要三个单独的删除语句。

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

参见,例如, http://www.mysqltutorial.org/mysql-on-delete-cascade/

在第一行定义要在加盟删除该表

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