web-dev-qa-db-ja.com

MySQLの制限とアクションなし

RESTRICTNO ACTIONのMySQL FKの違いは何ですか?ドキュメントからは、まったく同じように見えます。これは事実ですか?もしそうなら、なぜ両方があるのですか?

52
Erebus

MySQLドキュメントから: https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html

一部のデータベースシステムにはチェックが延期されており、NO ACTIONは遅延チェックです。 MySQLでは、外部キー制約はすぐにチェックされるため、NO ACTIONRESTRICTと同じです。

44
Anthony Accioly

標準のSQL構文に準拠するためです。 manual のように:(emphasis mine)

アクションなし:標準SQLのキーワード。 MySQLでは、RESTRICTと同等です。参照されるテーブルに関連する外部キー値がある場合、MySQLサーバーは親テーブルの削除または更新操作を拒否します。 一部のデータベースシステムには遅延チェックがあり、NO ACTIONは遅延チェックです。 MySQLでは、外部キー制約はすぐにチェックされるため、NO ACTIONはRESTRICTと同じです。

16
Nanne

MySQLでも同じです。

SQL 2003標準には、5つの異なる参照アクションがあります。

CASCADE
RESTRICT
NO ACTION
SET NULL
SET DEFAULT

NO ACTIONRESTRICTの違いは、標準に従ってNO ACTIONが延期され、RESTRICTがすぐに動作することです。

16
Wolph