Подтвердить что ты не робот

Что такое поведение MySQL по умолчанию DELETE?

Я пытаюсь разобрать 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 никогда не будет использоваться.

Является ли это более-менее правильным?

4b9b3361

Ответ 1

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

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

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

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

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

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

CASCADE: удалить или обновить строку из родительской таблицы и автоматически удалять или обновлять сопоставление строк в дочерней таблице. [...]

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

УСТАНОВИТЬ ПО УМОЛЧАНИЮ: это действие распознано парсером, но InnoDB отклоняет определения таблиц, содержащие ON DELETE SET DEFAULT или ON UPDATE SET DEFAULT статьи.

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