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