データベース

外部キー(foreign key)とは

外部キー(foreign key)

外部キーとは

外部キー(英:foreign key、略:FK)とは、関係データベースにおいてデータの整合性を保つための制約(参照整合性制約)のことです。

外部キーに設定しているカラムには、参照先となるテーブルのカラム内に存在している値しか設定できません

例えば、次のようなテーブルがあるとします。

外部キー

「社員テーブル」(左側)の「部署ID」は、「部署テーブル」(右側)の主キーである「部署ID」に対して外部キーを設定しています。

そのため、「社員テーブル」(左側)の「部署ID」には、「部署テーブル」(右側)の「部署ID」に存在している値しか設定できません。

スポンサーリンク

参照先にないデータを登録するとどうなるの?

外部キーに設定されている列(カラム)には、参照先となるテーブルの列内(カラム内)に存在している値しか設定できません。

では、参照先にないデータを登録したらどのような動きになるのでしょうか。

例えば、次のようなテーブルがあるとします。このテーブルに対して外部キーが参照している「部署テーブル」(右側)に存在しない「部署ID = 4」という行(レコード)を「社員テーブル」(左側)に追加(INSERT文)すると、制約エラーとなり登録することはできません

外部キーにデータを追加

参照元がある行(レコード)を削除するとどうなるの?

外部キーは次の5種類の参照操作を規定しています。参照元がある行(レコード)を更新や削除するとどうなるかは、この参照操作の設定により異なります。

 更新(UPDATE)削除(DELETE)
CASCADE参照先の変更に追従する参照先が無くなると同時に削除される
RESTRICT制約エラーになる制約エラーになる
NO ACTIONRESTRICTと同じRESTRICTと同じ
SET NULL参照先が変わるとNULLに更新される参照先が削除されるとNULLに更新される
SET DEFAULT参照先が変わるとデフォルト値に更新される参照先が削除されるとデフォルト値に更新される

以下は「RESTRICT」の場合の例です。

例えば次のようなテーブルがあるとします。「部署テーブル」(右側)の「部署ID = 2」の行(レコード)を削除(DELETE文)してみます。

外部キー
参照されているレコードを削除

削除した結果、「部署テーブル」(右側)の「部署ID = 2」の行(レコード)は、参照元があるので制約エラーとなり削除することはできません。

「部署テーブル」(右側)の「部署ID = 2」の行(レコード)を削除するためには、参照元である「社員テーブル」(左側)の対象の行(レコード)を削除し、参照元がなくなった状態にする必要があります。参照元がなければ削除できます。

helpful