none
SQL Server 2008の外部キー制約について RRS feed

  • 質問

  • いつもお世話になっております。

    SQL Server 2008を利用した開発をしています。

    外部キー制約について教えてください。
    外部キー制約の中で、参照される側のデータが
    更新、削除されたときにどのように動作するかを設定できると思います。

    参照される側を削除したら、参照する側のレコードも削除したければ、
    「CASCADE」を指定するというようなものです。

    これは何も指定していないと、どれになるでしょうか?

    CREATE TABLE (Transact-SQL)
    http://msdn.microsoft.com/ja-jp/library/ms174979.aspx

    上のサイトを見たのですが、良く分かりませんでした。

      | [ FOREIGN KEY ]
            REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]
            [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
            [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]

    このように書かれていましたが、これでは指定しなかったときに
    どれになるかは書かれていないですよね?

    私の調べ方が悪いのだと思うのですが、
    分かりませんでしたので教えていただきたいです。

    ぜひよろしくお願い致します。

    2010年4月1日 8:26

回答

  • こんにちは、nagino です。

    ご提示の URL のページ中ほどに記載があります。
    > ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
    > 作成されたテーブルの行が参照関係を持ち、参照される行が親テーブルから削除された場合に、その行に対して実行される操作を指定します。既定値は NO ACTION です。

    既定値については構文定義では表現されませんので、構文定義の後ろにある解説を確認してください。

     

     


    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク コンドル 2010年4月2日 0:21
    2010年4月1日 10:02

すべての返信

  • こんにちは、nagino です。

    ご提示の URL のページ中ほどに記載があります。
    > ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
    > 作成されたテーブルの行が参照関係を持ち、参照される行が親テーブルから削除された場合に、その行に対して実行される操作を指定します。既定値は NO ACTION です。

    既定値については構文定義では表現されませんので、構文定義の後ろにある解説を確認してください。

     

     


    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク コンドル 2010年4月2日 0:21
    2010年4月1日 10:02
  • >既定値は NO ACTION です。
    ありがとうございます。

    構文定義ではなく、説明を読めば良いのですね。
    大変勉強になりました。

     

    2010年4月2日 0:21