2016-06-08 136 views
0

有兩個表; proizvodi(父)表和normativ(子表),關係1:N。MySQL - 級聯更新工作,但級聯刪除不

父表上的主鍵是字段Sifra和子表SifraProizvoda。 當我做父表的更新,這種變化反映了孩子表,但如果我嘗試刪除父表中的東西,我得到錯誤:

/* SQL Error (1451): Cannot delete or update a parent row: a foreign key constraint fails (racuni . cijenapro , CONSTRAINT FK_cijenapro_proizvodi FOREIGN KEY (SifraProizvoda) REFERENCES proizvodi (Sifra) ON DELETE NO ACTION ON UPDATE CASCADE) */

下面是表的結構link

我做錯了嗎?

+0

似乎ON DELETE NO ACTION是不一樣的ON DELETE CASCADE – Richard

+0

我不明白這一點,因爲我已經在刪除自定義級聯更新級聯 – Josef

回答

0

您應該有ON DELETE CASCADE以及ON UPDATE CASCADE。你現在擁有的是ON DELETE NO ACTION,所以外鍵協會阻止你刪除父母,因爲它不想孤兒。如果您還有ON DELETE CASCADE,則父項和子項都將被刪除。您可以使用ALTER TABLEON DELETE CASCADE添加到表中。你必須放棄現有的約束首先是作爲只有一個約束條件允許兩個ON UPDATE CASCADEON DELETE CASCADE

+0

這是否意味着我可以同時定義這兩個操作?我曾嘗試創建兩個FK-s,一個用於更新,另一個用於刪除,但沒有幫助。 – Josef

+1

我剛更新了我的答案。您必須刪除現有約束並重新創建它。像這樣的東西。 ALTER TABLE AllowedCars 降約束FK_AllowedCars_CarID ALTER TABLE表 附加約束FK_AllowedCars_CarID在級聯更新 – phreakv6

+0

外鍵(CarID) 引用汽車(CarID) 上刪除級聯 已經做到這一點。不起作用。奇怪的是,更新正在工作,但刪除記錄不。 – Josef