Помогите, пожалуйста, разобраться, как работают связи в таблицах.
Имею в базе 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)
on delete no actionтоже самое, что иon delete restrict, что и не дает Вам удалить родительскую запись пока есть дочерняя. На уровнеforeign keyвсе, что вы можете - это сделатьon delete SET NULL, что соответственно проставитnullв колонкуfkсоответствующих записей. Но и смысла сохранять какое-то значение вfk, когда удаляется родительская запись, тоже мало т.к. это значение будет больше ни к чему не привязанным. – ApInvent Nov 06 '15 at 12:39table1– sanmai Mar 14 '16 at 02:50