
制約の種類
制約名 | 説明 |
---|---|
NOT NULL制約 | NULLを許容しない。 |
UNIQUE制約 | 重複値を許可しないです。(ただし、NULLの重複は許可します。) |
PRIMARY KEY制約(主キー制約) | 表の値を一意に識別できる値のみ許可する。 |
FOREIGN KEY制約(外部キー制約) | 参照先にある値、またはNULL値のみ許可する。 |
CHECK制約(チェック制約) | 指定した条件に合う値のみ許可する。 |
NOT NULL制約
特徴
- NULLを許容しない。
- 列レベルにしか適用できません。
UNIQUE制約
特徴
- 重複した値を格納できなくなるが、NULL値は重複可能。
- この制約を定義すると、自動でこの制約名の索引が作成されます。
- 複合列で、UNIQUE制約を定義する場合は、表レベルの制約定義を使う。
PRIMARY KEY(主キー)制約
- 重複値や、NULL値は格納することができません。
- 表に一つのみ定義できます。
- この制約を定義すると、自動でこの制約名の索引が作成されます。
- 複合列で、PRIMARY KEY制約を定義する場合は、表レベルの制約定義を使う。
FOREIGN KEY(外部キー)制約
- 参照先の列に存在する値のみしか格納できなくなる。
- NULL値を含めることは可能。
- FOREIGN KEYは、「UNIQUE制約」、「PRIMARY KEY制約」が定義されている列しか定義できない。
- FOREIGN KEY制約を定義すると、親表は削除できない。
親表からデータを削除した際の、動作を指定できるキーワード
キーワード | 説明 |
---|---|
指定なし | 子表に親表を参照する行が存在する場合は、親表の参照されている行は削除できない。 |
ON DELETE CASCADE | 子表に親表を参照する行が存在する場合に、親表の参照されている行を削除すると、子表のデータも削除される。 |
ON DELETE SET NULL | 子表に親表を参照する行が存在する場合に、親表の参照されている行を削除すると、子表のデータにNULLが設定される。 |
また、そもそも外部キーを使った方がよいのかの見解に関しては、下記の記事でしておりますので、ご参考下さい。
CHECK制約
- その列に指定した条件に対して、TRUEまたはNULLを返す値しか格納できなくなる。
- 1つの列に複数CHECK制約を定義することも可能です。
- 基本的には、WHERE句に指定する条件と同じ条件を指定することができます。
制約の定義(列レベル、表レベル)
制約の定義の範囲としては、下記の2種類があります。
- 列レベル制約
- 表レベル制約
列レベル制約
構文
1 2 3 |
CREATE TABLE 表名{ 列名 データ型 CONSTRAINT 制約名 制約の種類 } |
列レベル制約を適用する際のポイント
1つの列に複数の列レベル制約を定義する際は、改行またはスペースで区切ります。
表レベル制約
構文
1 2 3 4 5 |
CREATE TABLE 表名{ 列名1 データ型, 列名2 データ型, CONSTRAINT 制約名 制約の種類(列名1,列名2…) } |
表レベル制約を適用する際のポイント
- 制約を定義する列を1つ以上指定します。
- NOT NULL制約は適用できません。
- 複数列の組み合わせからなる制約(複数列に対するUNIQUE制約の定義等)は、表レベル制約のみで定義できます。
- 1つの表に、複数の表レベル制約を定義する際は、カンマで区切ります。
列レベル制約、表レベル制約共通のポイント
- 1つのCREATE文に、列レベル制約と、表レベル制約を同時に指定できます。
- NOT NULL制約は、「列レベル制約のみ」しか定義できません。
この記事へのコメントはありません。