ON DELETE NO ACTION
が何であるかを誤解していると思います 意味。 しない 外部キー制約を抑制することを意味します。
外部キーによって参照されるレコードを削除すると、InnoDBには、状況を修正するための自動アクションを実行する機能があります。
-
CASCADE
できます 、意味、参照レコードを削除します。 (これは、user_address.user_id
のようなものには意味があります 。ユーザーを完全に削除する場合は、おそらくすべてのユーザーのアドレスも完全に削除する必要があります。) -
SET NULL
できます 、意味、参照キーをクリアします。 (これは、file.last_modified_by
のようなものには意味があるかもしれません 。ユーザーを完全に削除する場合は、ファイルの最終変更者を単に「不明」にしたい場合があります。)
NO ACTION
を指定した場合 、あなたはInnoDBにこれらのアクションのいずれかを実行させたくないと言っています。したがって、InnoDBは状況を修正できません。 DELETE
を拒否するだけです。 エラーを返します。
その結果、ON DELETE NO ACTION
実際にはON DELETE RESTRICT
と同じです (デフォルト)。
(注:一部のDBMSおよび標準SQLでは、ON DELETE NO ACTION
ON DELETE RESTRICT
とは少し異なります :それらの中で、ON DELETE NO ACTION
「DELETE
を受け入れる」という意味です 現在のトランザクション内ですが、問題を修正する前にコミットしようとすると、トランザクション全体を拒否します。」しかし、InnoDBは遅延チェックをサポートしていないため、ON DELETE NO ACTION
を処理します。 ON DELETE RESTRICT
とまったく同じです 、および常にDELETE
を拒否します すぐに 。)
§§