Что такое поведение MySQL по умолчанию ON DELETE?
Вопрос
Я пытаюсь проанализировать MySQL документы . Они могут быть понятнее. Кажется, они говорят, что есть пять возможностей: SET NULL, NO ACTION, RESTRICT, CASCADE и SET DEFAULT.
NO ACTION и RESTRICT делают одно и то же (предотвращают любые изменения БД, которые нарушают FK), и эта вещь используется по умолчанию, поэтому, если вы пропустите предложение ON DELETE, вы скажете NO ACTION (или RESTRICT - то же самое). р>
SET NULL разрешает удаление родительской строки, устанавливает FK в NULL.
CASCADE удаляет дочернюю строку.
SET DEFAULT никогда не следует использовать.
Это более или менее правильно?
Решение
Да, это правильно.
НЕТ ДЕЙСТВИЙ : [...] 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 статьи.
Таким образом, вы не можете использовать эту опцию.