データベース

外部キー(foreign key)とは

外部キー(foreign key)

外部キーとは

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

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

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

外部キー

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

スポンサーリンク

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

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

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

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

外部キーにデータを追加

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

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

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

 

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

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

外部キー

 

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

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


チャンネル登録はこちら

フォローはこちら