sql >> データベース >  >> RDS >> Mysql

削除または更新のアクションなしで外部キーを使用する理由

    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 ACTIONDELETEを受け入れる」という意味です 現在のトランザクション内ですが、問題を修正する前にコミットしようとすると、トランザクション全体を拒否します。」しかし、InnoDBは遅延チェックをサポートしていないため、ON DELETE NO ACTIONを処理します。 ON DELETE RESTRICTとまったく同じです 、および常にDELETEを拒否します すぐに 。)

    §§14.2.2.5「外部キー」を参照してください。制約」 および13.1.17.2「外部キー制約の使用" MySQL5.6リファレンスマニュアルに記載されています。



    1. DBスキーマの変更を追跡するためのメカニズム

    2. MySQLFULLTEXTは複数のフィールドでは機能しません

    3. oracle CASEWHENsqlステートメントにキーワードエラーがありません

    4. JPQLにそのようなCASE式はありますか?