概要:このチュートリアルでは、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_idcontactsテーブルの列は、customersテーブルの同じ名前の主キー列を参照する外部キー列です。
次の外部キー制約fk_customercontactsテーブルでは、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, 違いは、外部キー制約をDEFERRABLEINITIALLY DEFERREDまたはINITIALLY IMMEDIATEモードで定義した場合にのみ発生します。 についてりその後のチュートリアルです。
SET NULL
SET NULLは、親テーブルの参照行が削除されると、NULLを子テーブルの参照行の外部キー列に自動的に設定します。,
次のステートメントは、サンプルテーブルをドロップし、SET NULLON DELETE句の
アクションを使用する外部キーで再作成します。
次のステートメントは、customersおよびcontactsテーブルにデータを挿入します。
SET NULL動作し、id1の顧客をcustomersテーブルから削除しましょう:
Code language: SQL (Structured Query Language) (sql)
ON DELETE SET NULLアクションのため、contactsテーブル, 次のステートメントは、contactsテーブルにデータを表示します。
出力からはっきりとわかるように、customer_id1により、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 CASCADEaction:
このチュートリアルでは、postgresqlの外部キーについて、および外部キー制約を使用してテーブルの外部キーを作成する方法について学びました。,/p>
- このチュートリアルは役に立ちましたか?
- イェスノ
















コメントを残す