如何删除多个表中的数据在一个查询
问题描述:
我有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;
如果这是应该始终发生的事情你可能想看看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