RESTRICT
とNO ACTION
のMySQL FKの違いは何ですか?ドキュメントからは、まったく同じように見えます。これは事実ですか?もしそうなら、なぜ両方があるのですか?
MySQLドキュメントから: https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html
一部のデータベースシステムにはチェックが延期されており、
NO ACTION
は遅延チェックです。 MySQLでは、外部キー制約はすぐにチェックされるため、NO ACTION
はRESTRICT
と同じです。
標準のSQL構文に準拠するためです。 manual のように:(emphasis mine)
アクションなし:標準SQLのキーワード。 MySQLでは、RESTRICTと同等です。参照されるテーブルに関連する外部キー値がある場合、MySQLサーバーは親テーブルの削除または更新操作を拒否します。 一部のデータベースシステムには遅延チェックがあり、NO ACTIONは遅延チェックです。 MySQLでは、外部キー制約はすぐにチェックされるため、NO ACTIONはRESTRICTと同じです。
MySQLでも同じです。
SQL 2003標準には、5つの異なる参照アクションがあります。
CASCADE
RESTRICT
NO ACTION
SET NULL
SET DEFAULT
NO ACTION
とRESTRICT
の違いは、標準に従ってNO ACTION
が延期され、RESTRICT
がすぐに動作することです。