#mysql #foreign-keys #cascade
#mysql #внешние ключи #каскад
Вопрос:
В чем разница в MySQL FK между RESTRICT
и NO ACTION
? Из документа они кажутся точно такими же. Так ли это? Если да, то зачем иметь оба?
Ответ №1:
Из документации MySQL:https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html
Некоторые системы баз данных имеют отложенные проверки, и
NO ACTION
это отложенная проверка. В MySQL ограничения внешнего ключа проверяются немедленно, так чтоNO ACTION
это то же самое, чтоRESTRICT
.
Ответ №2:
Это должно соответствовать стандартному синтаксису SQL. Как сказано в руководстве: (курсив мой)
НИКАКИХ ДЕЙСТВИЙ: ключевое слово из стандартного SQL. В MySQL эквивалентно RESTRICT. Сервер MySQL отклоняет операцию удаления или обновления для родительской таблицы, если в таблице, на которую ссылается ссылка, есть соответствующее значение внешнего ключа. В некоторых системах баз данных есть отложенные проверки, и НИКАКОЕ ДЕЙСТВИЕ не является отложенной проверкой. В MySQL ограничения внешнего ключа проверяются немедленно, поэтому НИКАКОЕ ДЕЙСТВИЕ не совпадает с RESTRICT.
Ответ №3:
Они идентичны в MySQL.
В стандарте SQL 2003 предусмотрено 5 различных ссылочных действий:
CASCADE
RESTRICT
NO ACTION
SET NULL
SET DEFAULT
Разница между NO ACTION
и RESTRICT
заключается в том, что согласно стандарту, NO ACTION
это отложено, в то время как RESTRICT
действует немедленно.