#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 лет)
Комментариев нет:
Отправить комментарий