Articles

SQL Server外部キー

概要:このチュートリアルでは、SQL Server外部キー制約を使用して、二つのテーブル内のデータ間のリンクを強制す

SQL Server外部キー制約の概要

次のvendor_groupsおよびvendorsテーブルについて考えてみましょう。

各ベンダーはベンダーグループに属し、各ベンダーグループにはゼロ以上のベンダーがある可能性があります。 vendor_groupsvendorsテーブルの関係は一対多です。,

vendorsテーブルの各行について、vendor_groupsテーブルに対応する行をいつでも見つけることができます。ただし、現在のテーブル設定では、vendorsテーブルに行を挿入できます。vendor_groupsテーブルに対応する行はありません。 同様に、vendor_groupsテーブルの行を、vendorsテーブルの対応する行を更新または削除せずに削除することもできます。vendorsテーブル,

vendor_groupsvendorsテーブルのデータ間のリンクを強制するには、vendorsテーブルに外部キーを確立する必要があります。外部キーは、別のテーブル(または自己参照の場合は同じテーブル)の行を一意に識別する、あるテーブル内の列または列のグループです。外部キーを作成するには、FOREIGN KEY制約を使用します。,

次のステートメントは、vendorsテーブルを削除し、FOREIGN KEY制約で再作成します。

vendor_groupsテーブルは、外部キー制約が参照するテーブルである親テーブルと呼ばれます。 vendorsテーブルは、外部キー制約が適用されるテーブルである子テーブルと呼ばれます。,

上記のステートメントでは、次の句はFOREIGN KEYという名前の制約fk_groupを作成し、group_idvendorsテーブルのgroup_idvendor_groupsテーブル:

sql server外部キー制約構文

FOREIGN KEY制約を作成するための一般的な構文は次のとおりです。

この構文を詳しく調べてみましょう。,

まず、FOREIGN KEYCONSTRAINTキーワードの後に制約名を指定します。 制約名はオプションであるため、次のようにFOREIGN KEY制約を定義できます。

この場合、SQL ServerはFOREIGN KEY制約の名前を自動的に生成します。

次に、FOREIGN KEYキーワードの後に括弧で囲まれたカンマ区切りの外部キー列のリストを指定します。,

第三に、外部キーが参照する親テーブルの名前と、子テーブルの列とのリンクを持つコンマ区切りの列のリストを指定します。

SQL Server外部キー制約の例

まず、vendor_groupsテーブルにいくつかの行を挿入します。

次に、ベンダーグループを持つ新しいベンダーをvendorsテーブルに挿入します。

Code language: SQL (Structured Query Language) (sql)

ステートメントは期待どおりに機能しました。,

第三に、vendor_groupsテーブルにベンダーグループが存在しない新しいベンダーを挿入しようとします。

Code language: SQL (Structured Query Language) (sql)

SQL Serverは次のエラーを発行しました。

この例では、FOREIGN KEY制約のため、SQL Serverは挿入を拒否し、エラーを発行しました。

参照アクション

外部キー制約により、参照の整合性が保証されます。 これは、親テーブルに対応する行がある場合にのみ、子テーブルに行を挿入できることを意味します。,

また、外部キー制約を使用すると、親テーブルの行が更新または削除されたときの参照アクションを次のように定義できます。

ON UPDATEおよびON DELETE 親テーブルの行が更新および削除されたときに実行するアクションを指定します。, 許可されているアクションは次のとおりです。NO ACTIONCASCADESET NULL、およびSET DEFAULT

親テーブルの行の削除アクション

親テーブルの行を削除する場合は、次のいずれかのアクションを設定できます。

  • ON DELETE NO ACTION:sql serverはエラーを発生させ、親テーブルの行に対するdeleteアクションをロールバックします。
  • ON DELETE CASCADE:SQL Serverは、親テーブルから削除された行に対応する子テーブルの行を削除します。,
  • ON DELETE SET NULL:親テーブルの対応する行が削除された場合、SQL Serverは子テーブルの行をNULLに設定します。 このアクションを実行するには、外部キー列がnull許容である必要があります。
  • ON DELETE SET DEFAULT親テーブルの対応する行が削除された場合、SQL Serverは子テーブルの行を既定値に設定します。 このアクションを実行するには、外部キー列にデフォルトの定義が必要です。 デフォルト値が指定されていない場合、null許容列のデフォルト値はNULLであることに注意してください。,既定では、アクションを明示的に指定しない場合、SQL ServerはON DELETE NO ACTIONを適用します。

    親テーブル内の行の更新アクション

    親テーブル内の行を更新する場合は、次のいずれかのアクションを設定できます。

    • ON UPDATE NO ACTION:SQL Serverでエラーが発生し、親テーブル内の行に対する更新アクションがロールバックされます。
    • ON UPDATE CASCADE:SQL Serverは、親テーブルの行が更新されると、子テーブルの対応する行を更新します。,
    • ON UPDATE SET NULL:SQL Serverは、親テーブルの対応する行が更新されると、子テーブルの行をNULLに設定します。 このアクションを実行するには、外部キー列がnull許容である必要があります。
    • ON UPDATE SET DEFAULT:SQL Serverは、親テーブルの対応する行が更新された子テーブルの行の既定値を設定します。