第2章 制約の組込み

2-1 制約の作成
■データの整合性保証の為に、制約とデータベーストリガーが提供されている。

■制約の基本構文
・列制約
CREATE TABLE 表名 (
  列名 データ型 [CONSTRAINT 制約名] 制約の種類
    [[CONSTRAINT 制約名] 制約の種類]...
    [, 列名 データ型 [CONSTRAINT 制約名] 制約の種類
    [[CONSTRAINT 制約名] 制約の種類]...]...
);

・表制約
CREATE TABLE 表名 (
  列名 データ型
    [, 列名 データ型]...
    , [CONSTRAINT 制約名] 制約の種類
    [, [CONSTRAINT 制約名] 制約の種類]...
);

■エンティティ制約
制約名 構文 説明
NOT NULL整合性制約 CREATE TABLE 表名(
列名 データ型 [CONSTRAINT 制約名] NOT NULL
);
NULL値の入力禁止、別名「必須」。
INSERT文で列に値が指定されなかった場合NULL値となる為、DEFAULT値を指定しエラーを予防する。
UNIQUE整合性制約 ・列制約
CREATE TABLE 表名(
列名 データ型 [CONSTRAINT 制約名] UNIQUE
);

・表制約
CREATE TABLE 表名 (
列名1 データ型,
列名2 データ型,
[CONSTRAINT 制約名] UNIQUE(列名1, 列名2)
);
同一値の入力禁止、別名「一意キー制約」
PRIMARY KEY整合性制約 ・列制約
CREATE TABLE 表名(
列名 データ型 [CONSTRAINT 制約名] PRIMARY KEY
);

・表制約
CREATE TABLE 表名 (
列名1 データ型,
列名2 データ型,
[CONSTRAINT 制約名] PRIMARY KEY(列名1, 列名2)
);
主キーの宣言、別名「主キー」。
CHECK整合性制約 ・列制約
CREATE TABLE 表名(
列名 データ型 [CONSTRAINT 制約名] CHECK (条件)
);

・表制約
CREATE TABLE 表名 (
列名 データ型,
[CONSTRAINT 制約名] CHECK (条件)
);
入力値に対する条件(範囲チェック等)の設定。

■参照整合性制約
制約名 構文 説明
FORREGN KEY整合性制約 ・列制約
CREATE TABLE 表名(
列名 データ型 [CONSTRAINT 制約名]
REFERENCES 親表名 (親キー列名)
);

・表制約
CREATE TABLE 表名 (
列名 データ型,
[CONSTRAINT 制約名]
FOREIGN KEY (外部キー列名 [, 外部キー列名]...)
REFERENCES 親表名 (親キー列名 [, 親キー列名]...)

);
表同士の関連付けを行い、親表と子表の間で整合性を保ちます。
子表に入力される値は必ず親表に存在しなければなりません。
子表の参照列を外部キー、親表の参照列を親キーを呼びます。


2-2 制約のメンテナンス
■制約の確認
制約名 構文 説明
列制約の確認 SELECT * 
FROM USER_CONS_COLUMNS 
制約名がどの表の列に定義されているか
表制約の確認 SELECT * 
FROM USER_CONSTRAINTS 
制約の名前と制約の種類

■制約の変更
制約名 構文 説明
列制約の変更  ALTER TABLE 表名 
MODIFY
列名 [NOT NULL] 
一度制約を削除してから、新たに制約を追加する。
表制約の変更 ALTER TABLE 表名 
ADD
 表制約構文

■制約の削除
制約名 構文 説明
削除 ALTER TABLE 表名 
DROP CONSTRAINT | PRIMARY KEY | UNIQUE(列名) 制約名 
[CASCADE]
CASCADEオプションを指定すると、依存する整合性制約も削除されます。

■制約の無効
制約名 構文 説明
制約の無効化 ALTER TABLE 表名 
DISABLE CONSTRAINT | PRIMARY KEY | UNIQUE(列名) 制約名 
[CASCADE]
定義されている制約を一時的に無効化する
制約の有効化 ALTER TABLE 表名 
ENABLE CONSTRAINT | PRIMARY KEY | UNIQUE(列名) 制約名 
[CASCADE]
定義されている制約を一時的に無効化する
制約を有効化すると、全てのデータに適用される為、データが制約を満たす必要がある。