Каково поведение MySQL по умолчанию при удалении?


person Ethan    schedule 22.06.2009    source источник
comment
Вы пропустили вариант КАСКАД   -  person jitter    schedule 22.06.2009
comment
И вы правильно поняли. Не указывать параметр ссылки для ограничения FK в MYSQL — это то же самое, что говорить ON DELETE RESTRICT.   -  person jitter    schedule 22.06.2009
comment
Только в mysql NO ACTION и RESTRICT означают одно и то же. В другой БД это не соответствует действительности, поскольку NO ACTION теоретически позволяет удалить/изменить родительский элемент, на который делается ссылка, если в конце операции ограничение FK не нарушается.   -  person jitter    schedule 22.06.2009


Ответы (1)


Да, это правильно:

НЕТ ДЕЙСТВИЙ: [...] InnoDB отклоняет операцию удаления или обновления для родительской таблицы.

RESTRICT: отклоняет операцию удаления или обновления для родительской таблицы. Указание RESTRICT (или NO ACTION) равносильно пропуску предложения ON DELETE или ON UPDATE. [...]

По-видимому, NO ACTION и RESTRICT являются синонимами. Кроме того, поскольку они используются всякий раз, когда нет предложения ON DELETE / UPDATE, это поведение по умолчанию.

SET NULL: удалить или обновить строку из родительской таблицы и установить для столбца или столбцов внешнего ключа в дочерней таблице значение NULL. [...]

Для внешнего столбца установлено значение NULL при условии, что он не объявлен как NOT NULL (или InnoDB не разрешает удаление или обновление).

КАСКАД: удаление или обновление строки из родительской таблицы и автоматическое удаление или обновление соответствующих строк в дочерней таблице. [...]

Cascade удаляет (или обновляет) внешний столбец.

SET DEFAULT: это действие распознается синтаксическим анализатором, но InnoDB отклоняет определения таблиц, содержащие предложения ON DELETE SET DEFAULT или ON UPDATE SET DEFAULT.

Так что в принципе вы не можете использовать этот вариант.

person Anax    schedule 30.09.2009