2016-06-08 2 views
0

Существует две таблицы; proizvodi (родительский) стол и normativ (дочерняя таблица), отношение 1: N.MySQL - обновление Cascade работает, но каскадное удаление не

Первичный ключ на родительском столе - поле 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 УДАЛИТЬ NO ACTION, не совпадает с ON DELETE CASCADE – Richard

+0

я не понимаю, это потому, что я определил на удаление каскад на каскаде обновления – Josef

ответ

0

Вы также должны иметь ON DELETE CASCADE вместе с ON UPDATE CASCADE. Теперь у вас есть ON DELETE NO ACTION, поэтому ассоциация внешних ключей останавливает вас от удаления родителя, поскольку он не хочет детей-сирот. Если у вас также есть ON DELETE CASCADE, родительская и дочерняя записи будут удалены. Вы можете использовать ALTER TABLE, чтобы добавить ON DELETE CASCADE к таблице. Вы должны отказаться от существующего ограничения первой, как только одно ограничение допускается для обоих ON UPDATE CASCADE и ON DELETE CASCADE

+0

Означает ли это, что я могу определить оба действия? Я попытался создать два FK-s, один для обновления и второй для удаления, но не помогает. – Josef

+1

Я только что обновил свой ответ. Вы должны отказаться от существующего ограничения и воссоздать его. Что-то вроде этого. альтер таблица AllowedCars падение ограничение FK_AllowedCars_CarID альтер таблицы таблицы добавить ограничение FK_AllowedCars_CarID внешний ключ (CarID) референции Автомобили легковые (CarID) на удаления каскада на обновление каскада – phreakv6

+0

уже делают это. Не работает. Странно, что обновление работает, но удаление записи - нет. – Josef