2016-09-29 119 views
1

我有兩個包含數據的表。 我想刪除兩個表中的行。 但我有他們之間的外鍵。 我該怎麼做?Mysql:用外鍵刪除兩個表中的行

departure 
    id departure_date 
     1  2016-09-29 
     2  2016-09-30 

departure_time 
    id departure_id (fk) 
     1   1 
     2   2 

最好的辦法是有一個查詢來獲取要刪除的所有行,並同時刪除兩個表中的行。 有沒有辦法做到這一點,而不刪除約束/ FK?

在這個例子中,說我想從最新刪除所有離港2016年9月30日

(刪除出發:ID 2和DEPARTURE_TIME:ID:2)

回答

3

請試試這個,希望對您有所幫助。

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將自動爲您做的工作。

+0

嗨Mumesh,我錯了嗎?或者你寫的兩個問題都是一樣的?感謝您確認o突出顯示差異。 – Robert

+0

他正在使用兩個不同的列'id'和'departure_id',但只有'departure_id'纔是正確的。 – Manatax

4

在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的外鍵關係。然後,當您刪除原始表中的行時,數據庫將刪除第二個表中的相關記錄。

+0

謝謝您的回覆。但是這不起作用。 必須將dt.id更改爲dt.departure_id 然後出現錯誤 無法刪除或更新父行:外鍵約束失敗('osl'.'departure_time',CONSTRAINT'departure_time_departure_fk' FOREIGN KEY('departure_id' )參考''出發'('id')) – TorK

+0

但它確實工作時添加刪除級聯:) – TorK

+0

@Tork。 。 。糟糕,我誤解了列關係。 –