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