我有3個表,就像這樣:如何刪除多個表中的數據在一個查詢
release (release_id, name, ...)
medium (medium_id, release_id, name, ...)
track (track_id, medium_id, title, ...)
只具有RELEASE_ID,我希望能夠同時刪除曲目,並與RELEASE_ID在相關媒體一次使用一個查詢。
可能嗎?如果是,我可以得到一個粗略的模板,我會找出其餘的。
我需要多個刪除查詢嗎?
我有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