2015-09-17 4 views
0

Я применил ограничения DELETE CASCADE и UPDATE CASCADE для дочерней таблицы.После применения каскада DELETE и UPDATE, не имеющего возможности DELETE/UPDATE из родительской таблицы

alter table table_product_categories add constraint fk_product_id1 foreign key (product_id) references table_products (product_id) on delete cascade; 

alter table table_product_categories add constraint fk_product_id2 foreign key (product_id) references table_products (product_id) on update cascade; 

Теперь при попытке удаления в родительской таблице:

DELETE FROM table_products WHERE `table_products`.`product_id` = 1819 

Получение этой ошибки:

MySQL говорит: Документация

1451 - Cannot delete or update a parent row: a foreign key constraint fails (`table_product_categories`, CONSTRAINT `fk_product_id1` FOREIGN KEY (`product_id`) REFERENCES `table_products` (`product_id`) ON UPDATE CASCADE)

При попытке обновить родительской таблицы

UPDATE `wokoshop`.`table_products` SET `product_id` = '1' WHERE `table_products`.`product_id` =1819 

Получение этой ошибки:

1452 - Cannot add or update a child row: a foreign key constraint fails (`wokoshop`.`table_product_categories`, CONSTRAINT `fk_product_id2` FOREIGN KEY (`product_id`) REFERENCES `table_products` (`product_id`) ON DELETE CASCADE)

Что является причиной ошибок и как ее решить?

+0

я не уверен, если это имеет значение, но вам не нужно создавать два различных ограничений. Создайте одно ограничение с параметрами 'cascade'. – Barmar

+0

будет ли порядок каскада иметь значение? –

+0

Я так не думаю. – Barmar

ответ

1

Вместо создания двух ограничений, использование одного ограничения с обеих CASCADE опций:

alter table table_product_categories 
    add constraint fk_product_id1 foreign key (product_id) 
    references table_products (product_id) 
    on delete cascade on update cascade;