Oracleデータベースに外部キー制約を追加する方法の詳細

2262 ワード

外部キーは、1つのカラム(またはカラムのセット)の値が別のテーブルのローの値に一致する必要があることを指定します.これは、関連テーブルの参照整合性を維持することです.グラフィックスインタフェースでは、外部キータブで、外部キーバーを簡単にクリックして編集します.外部キーのツールバーを使用すると、選択した外部キーバーを新規作成、編集、または削除できます.≪外部キーの追加|Add External Key|oem_src≫:表に外部キーを追加します.[外部キーを削除]:選択した外部キーを削除します.名前編集ボックスを使用して、新しいキーの名前を入力します.
リファレンス・モード、リファレンス・テーブル、およびリファレンス制約ドロップダウン・リストを使用して、外部インデックス・データベース、テーブル、および制約をそれぞれ選択します.
バーをキーに含めるには、簡単にバーをダブルクリックするか、クリックしてエディタを開いて編集します.
削除時にドロップダウンリストでアクションのタイプを定義します.
No Action:これはデフォルトの動作です.参照キー値は更新または削除されません.CASCADE:削除された行を参照する行を個別に削除するか、参照された列の値を参照された列の新しい値に更新します.SET NULL:参照列nullを設定します.
[有効](Enable)チェックボックスをオンまたはオフにすることで、外部キー制限を有効または無効にするかどうかを選択できます.
SQL文を使用して作成する方法を正式に見てみましょう.
1、デフォルトの作成方法では、参照されたデータを削除すると削除できません.

CREATE TABLE T_INVOICE 
(ID NUMBER(10) NOT NULL, 
INVOICE_NO VARCHAR2(30) NOT NULL, 
CONSTRAINT PK_INVOICE_ID PRIMARY KEY(ID)); 
 
CREATE TABLE T_INVOICE_DETAIL 
(ID NUMBER(10) NOT NULL, 
AMOUNT NUMBER(10,3), 
PIECE NUMBER(10), 
INVOICE_ID NUMBER(10), 
CONSTRAINT PK_DETAIL_ID PRIMARY KEY(ID)); 
ALTER TABLE T_INVOICE_DETAIL 
ADD CONSTRAINT FK_INVOICE_ID 
FOREIGN KEY(INVOICE_ID ) REFERENCES T_INVOICE(ID); 


2、カスケード削除外部キー構文カスケード削除フィーチャーを指定するオプションがあります.このフィーチャーは、親テーブルの削除文にのみ使用されます.このオプションを使用すると、親テーブルの削除操作によって、関連するすべてのサブテーブルレコードが自動的に削除されます.

ALTER TABLE T_INVOICE_DETAIL 
ADD CONSTRAINT FK_INVOICE_ID 
FOREIGN KEY(INVOICE_ID ) REFERENCES T_INVOICE(ID) 
ON DELETE CASCADE; 


サブテーブルの外部キーフィールドの値をnullに設定、on delete set null文を使用する(外部キーフィールドはnot null制約を設定できない).

ALTER TABLE T_INVOICE_DETAIL 
ADD CONSTRAINT FK_INVOICE_ID 
FOREIGN KEY(INVOICE_ID ) REFERENCES T_INVOICE(ID) 
ON DELETE SET NULL; 


三、参照フィールド構文構造外部キー制約の作成Yes、外部キーフィールドは親テーブルのプライマリキーまたはUnique制約フィールドを参照する.この場合、次のように外部キー参照フィールド名を指定しなくてもよい.

ALTER TABLE T_INVOICE_DETAIL 
ADD CONSTRAINT FK_INVOICE_ID 
FOREIGN KEY(INVOICE_ID ) REFERENCES T_INVOICE; 


参照フィールドが指定されていない場合、デフォルトの参照フィールドは親テーブルのプライマリ・キーです.外部キーフィールドがPrimary KeyフィールドではなくUniqueフィールドを参照している場合は、add constraint文でフィールド名を指定する必要があります.