ОГРАНИЧЕНИЕ MySQL и никаких действий - PullRequest
50 голосов
/ 28 апреля 2011

Какая разница в MySQL FK между RESTRICT и NO ACTION? Из документа они кажутся точно такими же. Это тот случай? Если так, то почему оба?

Ответы [ 3 ]

42 голосов
/ 28 апреля 2011

Из документации MySQL: https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html

Некоторые системы баз данных имеют отложенные проверки, а NO ACTION является отложенной проверкой.В MySQL ограничения внешнего ключа проверяются немедленно, поэтому NO ACTION совпадает с RESTRICT.

16 голосов
/ 28 апреля 2011

Они идентичны в MySQL.

В стандарте SQL 2003 есть 5 различных ссылочных действий:

CASCADE
RESTRICT
NO ACTION
SET NULL
SET DEFAULT

Разница между NO ACTION и RESTRICT заключается в том, что согласно стандарту NO ACTION откладывается, а RESTRICT действует немедленно.

15 голосов
/ 28 апреля 2011

Соответствует стандартному синтаксису SQL. Как в руководстве говорится: (выделено мое)

НЕТ ДЕЙСТВИЯ: Ключевое слово из стандартного SQL . В MySQL эквивалентен RESTRICT. MySQL Server отклоняет операцию удаления или обновления для родительской таблицы, если в ссылочной таблице есть соответствующее значение внешнего ключа. Некоторые системы баз данных имеют отложенные проверки, и НИКАКОЕ ДЕЙСТВИЕ не является отложенной проверкой. В MySQL ограничения внешнего ключа проверяются немедленно, поэтому НИКАКОЕ ДЕЙСТВИЕ не совпадает с ОГРАНИЧЕНИЕМ.

...