簡體   English   中英

Mysql:用外鍵刪除兩個表中的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM