2016-06-08 121 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