Страницы

Поиск по вопросам

вторник, 17 декабря 2019 г.

#1451 - Cannot delete or update a parent row: a foreign key constraint fails

#mysql


Помогите, пожалуйста, разобраться, как работают связи в таблицах.

Имею в базе test две таблицы InnoDB: table1 и table2. Таблица table2 имеет Foreign
Key атрибут fk, он указывает на table1.id.

Дамп базы: http://pastebin.com/JbCjpVpC

Хочу: чтобы при обновлении записи в родительской таблицы (table1) запись обновлялась
в дочерней (table2), а при удалении записи из родительской таблицы - с дочерней ничего
не происходило.

Зачем хочу: чтобы при удалении данных из table1, данные из table2 оставались и по
их FK их можно было идентифицировать. Настройки FK в дочерней таблице: ON UPDATE: cascade,
ON DELETE: no action.

Если в дочерней таблице есть записи, которые ссылаются на записи в родительской таблице,
я пытаюсь удалить кортеж в родительской таблице, то происходит ошибка:

DELETE FROM `test`.`table1` WHERE `table1`.`id` =1

MySQL said: Documentation
#1451 - Cannot delete or update a parent row: a foreign key constraint fails (`test`.`table2`,
CONSTRAINT `table2_ibfk_1` FOREIGN KEY (`fk`) REFERENCES `table1` (`id`) ON DELETE
NO ACTION ON UPDATE CASCADE) 

    


Ответы

Ответ 1



Думаю, мой комент к вопросу можно посчитать ответом, переношу его сюда ) : Правила по обеспечению ссылочной целостности можно не ломать. Просто не удалять записи из table1, а помечать как удаленные (а совсем удалять, вместе с подчиненными записями - уже когда точно понятно, что это стало мусором, например через 50 лет)

Комментариев нет:

Отправить комментарий