概要:このチュートリアルでは、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_idNULL

カスケード

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>

  • このチュートリアルは役に立ちましたか?
  • イェスノ