2015-12-28 78 views
0

我有兩個表secondthird我無法刪除的行追加後的外鍵

second_id(PRIMARY KEY) second_name   
    1     ......... 
    2     ....... 
    3     ......... 

third_id(PRIMARY KEY) third_name second_id(FOREIGN KEY for second.second_id) 
     1     .....     1 
     2     .....     1 
     3     .....     1 
     4     .....     2 
     5     .....     2 

現在我想從那裏secondsecond_id=2DELETE FROM second WHERE second_id=2)刪除一行,但它不工作。它說Successful 0 row(s) affected更重要的是,它發生在我追加一個外鍵到third.second_id(我在表創建後添加了外鍵)。

+1

您可以設置外鍵ID在第三個表設置爲null,從第二表中刪除。 – miqdadamirali

+0

感謝大家幫幫我 –

+0

@WebberDepor,記得挑選一個接受的答案。 – Phiter

回答

4

您將有second_id = 2來刪除third表中的行,然後外鍵約束從second使用id = 2刪除行或有ON DELETE CASCADE

+0

我附加了一個外鍵,因爲我想在'second.second_id'被刪除時自動刪除所有'third.second_id'。我怎樣才能做到這一點? –

+0

當你添加外鍵約束這樣做:'FOREIGN KEY('second_id')REFERENCES'second'('second_id')ON DELETE CASCADE' – SKY

2

不能從second刪除行因爲它的其中一個值正在third中使用。這是一個外鍵關鍵規則。

但是可以級聯的外鍵是,如果你從second刪除一行,在third所有行使用這個值也將被刪除,或者你可以將其設置爲null

This manual from MYSQL可以告訴你如何正確使用ON DELETEON UPDATE,然後你可以爲你挑選最好的選擇。 查一查爲參照動作

編輯:

你不能在DELETE CASCADE添加到現有的外鍵,所以你必須先刪除它。

alter table third drop foreign key third_foreign 

然後

alter table third add constraint third_foreign foreign key (second_id) references second(second_id) on delete cascade; 
+0

我追加一個外鍵,因爲我想自動刪除所有'third.second_id'時'second.second_id'已被刪除。我怎樣才能做到這一點? –

+0

約束的名稱是什麼? – Phiter

+0

'third_foreign' –