制約の作成
1. 制約とは
RDB(リレーショナルデータベース)は、整合制約によりルールを設定します。Oracleでも表に無効なデータが挿入されないようにするために制約を使用します。表に定義された制約は、データの挿入、更新、削除が実行されるたびにチェックされます。データの整合性をとるためにも制約は必要なものです。また制約には列単位で定義する列制約構文と、表単位で定義する表制約構文があります。
Oracleでは、エンティティ整合性制約と外部キー制約の2種類が提供されています。
2. エンティティ整合性制約
■主キー制約
表内の行データを一意に特定できる列または列の組み合わせの中で主たるものを主キー(PRIMARY KEY)といいます。主キー制約は、自動的に一意制約とNOT
NULL制約が付加されます。複合主キーの場合は、表制約構文のみで指定可能です。
■NOT NULL制約
NULLとは0でもなく空白でもなくデータが入力されていない状態をいいます。NOT NULL制約ではNULL値を禁止します。NOT NULL制約は、列制約構文のみで使用可能です。
■一意制約
指定された列または列の組み合わせに足して同じ値が入力されることを禁止する制約です。
■チェック制約
明示的に入力条件を定義し、条件を満たすデータのみが入力可能です。
|
以下に上記で紹介した制約の設定例をしまします。
SQL> ALTER TABLE 従業員 MODIFY
(従業員NO NUMBER(4) CONSTRAINT PK_従業員 PRIMARY KEY, ・・・・・主キー制約
従業員名 VARCHAR2(10) CONSTRAINT U_従業員 UNIQUE, ・・・・・一意制約
入社日 DATE CONSTRAINT NN_入社日 NOT NULL, ・・・・・NOT NULL制約
給与 NUMBER(9) CONSTRAINT CK_給与 CHECK(給与>=0 AND 給与<100000)); ・・・・・チェック制約
表が変更されました。
SQL>
|
2. 外部キー制約
外部キー制約は表と表との関係づけを保つために使用します。外部キーの参照先は主キーまたは一意キーのいずれかでなければなりません。
外部キー制約を定義する時点で、親表は存在しなければエラーとなります。以下にエラー時の例を示します。
SQL> ALTER TABLE 従業員 MODIFY
2 (部署NO NUMBER(2) CONSTRAINT FK_部署NO REFERENCES 部署(部署NO));
(部署NO NUMBER(2) CONSTRAINT FK_部署NO REFERENCES 部署(部署NO))
*
行2でエラーが発生しました。:
ORA-00942: 表またはビューが存在しません。
SQL>
|
エラーが発生しないためには、まず親表を追加してから外部キー制約を設定する必要があります。
SQL> CREATE TABLE 部署
2 (部署NO NUMBER(2) CONSTRAINT FK_部署NO PRIMARY KEY,
3 部署名 VARCHAR2(10),
4 場所 VARCHAR2(10));
表が作成されました。
SQL> ALTER TABLE 従業員 MODIFY
2 (部署NO NUMBER(2) CONSTRAINT FK2_部署NO REFERENCES 部署(部署NO));
表が変更されました。
SQL>
|
※外部キーにON DELETE CASCADEオプションを指定すると、親表内の行が削除されると子表の依存行も削除されます。またオプションが指定されない場合は、RESTRICT規制により子表から参照される親表内の行は削除することはできません。
|
スポンサードリンク
|