[英]Mysql: delete rows in two tables with foreign keys
我有兩個數據表。 我想刪除兩個表中的行。 但是我在它們之間有外鍵。 我該怎么做?
departure
id departure_date
1 2016-09-29
2 2016-09-30
departure_time
id departure_id (fk)
1 1
2 2
最好的辦法是有一個查詢來刪除所有行,並同時刪除兩個表中的行。 有沒有辦法在不刪除約束/ FK的情況下做到這一點?
在這個例子中,假設我想刪除日期為 2016-09-30 的所有出發時間
(刪除出發時間:id 2和出發時間:id:2)
請試試這個,希望它會有所幫助。
DELETE FROM departure, departure_time
USING departure
INNER JOIN departure_time
WHERE departure_date = '2016-09-30'
AND departure_time.id = departure.id
或者
DELETE FROM departure, departure_time
USING departure
INNER JOIN departure_time
WHERE departure_date = '2016-09-30'
AND departure_time.departure_id = departure.id
或者您可以使用ON DELETE CASCADE
自動為您工作。
在 MySQL 中,您還可以在一個語句中從多個表中刪除:
delete d, dt
from departure d join
departure_time dt
on d.id = dt.departure_id
where departure_date = '2016-09-30';
另一種解決方案是將外鍵關系聲明為on delete cascade
。 那么當你刪除原表中的行時,數據庫將刪除第二個表中的相關記錄。
多行刪除對我來說失敗了,因為第二個表中有多行引用了第一個表。 我也無法更新架構以添加外鍵約束(如其他答案中所建議)。
像這樣使用 IN 工作:
DELETE FROM departure_time
WHERE departure_id IN (
SELECT departure_id
FROM departure
WHERE departure_date = '2016-09-30'
);
DELETE from departure
WHERE departure_date = '2016-09-30'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.