Что такое поведение MySQL по умолчанию ON DELETE? - PullRequest
55 голосов
/ 22 июня 2009

Я пытаюсь разобрать MySQL docs . Они могут быть понятнее. Кажется, они говорят, что есть пять возможностей: SET NULL, NO ACTION, RESTRICT, CASCADE и SET DEFAULT.

NO ACTION и RESTRICT делают одно и то же (предотвращают любые изменения БД, которые нарушают FK), и эта вещь используется по умолчанию, поэтому, если вы пропустите предложение ON DELETE, вы скажете NO ACTION (или RESTRICT - то же самое).

SET NULL разрешает удаление родительской строки, устанавливает FK в NULL.

CASCADE удаляет дочернюю строку.

SET DEFAULT никогда не должен использоваться.

Это более или менее правильно?

1 Ответ

67 голосов
/ 30 сентября 2009

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

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

ОГРАНИЧЕНИЕ : отклоняет удаление или обновление операция для родительской таблицы. Указание ОГРАНИЧЕНИЯ (или НЕТ ДЕЙСТВИЯ) то же самое, что опускание ON DELETE или ОБНОВЛЕНИЕ [...]

Очевидно, 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 статьи.

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

...