概要:このチュートリアルでは、PostgreSQLの外部キーと、外部キー制約を使用してテーブルに外部キーを追加する方法について学習します。
PostgreSQL外部キー制約の概要
外部キーは、別のテーブルの主キーを参照するテーブル内の列または列のグループです。
外部キーを含むテーブルは、参照元テーブルまたは子テーブルと呼ばれます。 外部キーによって参照されるテーブルは、参照テーブルまたは親テーブルと呼ばれます。,
テーブルには、他のテーブルとの関係に応じて複数の外部キーを持つことができます。
PostgreSQLでは、外部キー制約を使用して外部キーを定義します。 外部キー制約は、子テーブルと親テーブルの間のデータの参照整合性を維持するのに役立ちます。外部キー制約は、子表の列または列のグループの値が、親表の列または列のグループの値と等しいことを示します。,
PostgreSQL外部キー制約構文
次に、外部キー制約構文を示します。
この構文では、
- まず、
CONSTRAINT
キーワードの後に外部キー制約の名前を指定します。CONSTRAINT
句はオプションです。 これを省略すると、PostgreSQLは自動生成された名前を割り当てます。 - 次に、
FOREIGN KEY
キーワードの後に括弧で囲まれた一つ以上の外部キー列を指定します。,第三に、句で外部キー列によって参照される親テーブルおよび親キー列を指定します。最後に、
ON DELETE
およびON UPDATE
句で削除および更新アクションを指定します。
親テーブル内の主キーが削除および更新されたときの動作は、削除および更新アクションによって決まります。 主キーが更新されることはめったにないため、ON UPDATE action
は実際にはあまり使用されません。 ここでは、ON DELETE
アクションに焦点を当てます。,
PostgreSQLは次のアクションをサポートしています。
- SET NULL
- SET DEFAULT
- RESTRICT
- NO ACTION
- CASCADE
PostgreSQL外部キー制約の例
次のステートメントは、customers
およびcontacts
テーブルを作成します。
この例では、customers
テーブルは親テーブルであり、contacts
テーブルは子テーブルです。
各顧客は、ゼロまたは多くの連絡先を持っており、各連絡先は、ゼロまたは一つの顧客に属しています。,
customer_id
contacts
テーブルの列は、customers
テーブルの同じ名前の主キー列を参照する外部キー列です。
次の外部キー制約fk_customer
contacts
テーブルでは、customer_id
を外部キーとして定義します。
外部キー制約にはON DELETE
およびON UPDATE
アクション、デフォルトはNO ACTION
になります。,
アクションなし
次のステートメントは、customers
およびcontacts
テーブルにデータを挿入します。
次のステートメントは、customers
テーブルから顧客id1を削除します。
Code language: SQL (Structured Query Language) (sql)
ON DELETE NO ACTION
、postgresqlは、顧客id1の参照行がcontacts
テーブルにまだ存在するため、制約違反を発行します。
RESTRICT
アクションはNO ACTION
, 違いは、外部キー制約をDEFERRABLE
INITIALLY DEFERRED
またはINITIALLY IMMEDIATE
モードで定義した場合にのみ発生します。 についてりその後のチュートリアルです。
SET NULL
SET NULL
は、親テーブルの参照行が削除されると、NULL
を子テーブルの参照行の外部キー列に自動的に設定します。,
次のステートメントは、サンプルテーブルをドロップし、SET NULL
ON DELETE
句の
アクションを使用する外部キーで再作成します。
次のステートメントは、customers
およびcontacts
テーブルにデータを挿入します。
SET NULL
動作し、id1の顧客をcustomers
テーブルから削除しましょう:
Code language: SQL (Structured Query Language) (sql)
ON DELETE SET NULL
アクションのため、contacts
テーブル, 次のステートメントは、contacts
テーブルにデータを表示します。
出力からはっきりとわかるように、customer_id
1により、customer_id
がNULL
カスケード
ON DELETE CASCADE
親テーブルの参照行が削除されると、子テーブルの参照行がすべて自動的に削除されます。, 実際には、ON DELETE CASCADE
が最も一般的に使用されるオプションです。
次のステートメントはサンプルテーブルを再作成します。,iv>CASCADE
:
次のステートメントは、顧客id1を削除します。
ON DELETE CASCADE
アクションのため、contacts
テーブル内のすべての参照行が自動的に削除されます。
set default
ON DELETE SET DEFAULT
親テーブルから参照される行が削除されたときに、子テーブルの参照行の外部キー列にデフォルト値を設定します。,既存のテーブルに対するnt
外部キー制約を既存のテーブルに追加するには、ALTER TABLEステートメントの次の形式を使用します。
ON DELETE CASCADE
オプションを使用して外部キー制約を既存のテーブルに追加する場合は、次の手順に従う必要があります。
まず、既存の外部キー制約を削除します。
Code language: SQL (Structured Query Language) (sql)
まず、新しい外部キー制約を追加します。
Code language: SQL (Structured Query Language) (sql)
まず、新しい外部キー制約を追加します。ON DELETE CASCADE
action:
このチュートリアルでは、postgresqlの外部キーについて、および外部キー制約を使用してテーブルの外部キーを作成する方法について学びました。,/p>
- このチュートリアルは役に立ちましたか?
- イェスノ
コメントを残す