SQL入門その8 - データベース制約CONSTRAINT
2008/10/29 22:31Update
データベースの制約は、「データ整合性」と呼ばれるデータの正確性、及びデータ間の関係性が正しく保たれます。
データベースの制約とは
「データベース」は、「テーブル」、そして「行」、「列」から構成されます。
データベースのテーブルに無効なデータを入力されないようにする為、あらかじめデータに対するビジネス・ルールを定義し、データベースへのデータ挿入、更新、または削除するときにその定義されたルールに従い、ルールに従わないデータが入力されないようにします。そのルールのことは制約といいます。
制約の種類
制約の種類は- NOT NULL
- ユニーク
- 主キー
- 外部キー
- 表チェック
などがあります。
| 制約名 | 解説 |
|---|---|
| NOT NULL | NOT NULL制約は、単一の列に対して定義されるルールで、この列のNULL値(値がない)の入力を禁止するとの制約です。即ち、テーブルのすべての行で必ずその列にNULL以外の値が格納されるように制限します。 |
| ユニーク | UNIQUE。ユニーク制約は、列、または複数の列の組み合わせに対して定義されるルールで、それらの列に値が一意であることのデータに限りデータの挿入・更新を許可する。 |
| 主キー | PRIMARY KEY。主キー制約は、列、または複数の列の組み合わせに対して定義されるルールで、表の中の行を一意に特定できます。ユニック・キーと違って、主キーは1つの表に1つしか設定出来ません。また、主キー制約で参照される列(または列の組み合わせ)は、NOT NULL制約及びユニーク制約が自動的に付加されます。 |
| 外部キー | FOREIGN KEY~REFERENCES~ON。外部キー制約は、表と表の間を表内の列(または列の組み合わせ)で参照という関連付けを定義するルールといいます。外部キー制約は表同士の関連付けを行い、子表は親表を参照し、子表の参照列を外部キーを呼びます。親表と子表の間でデータの整合性を保ちます。子表に入力される値は必ず親表に存在しなければなりません。 |
| 表チェック | CHECK。表チェック制約は、入力条件を定義した制約で、列に条件を満たす値のみ入力が許可されます。 |
制約の基本構文
CREATE TABLE <表名> ( 列名 データ型 [CONSTRAINT 制約名] 制約の種類 ... [CONSTRAINT 制約名] 制約の種類] ... );
または
CREATE TABLE <表名> ( 列名 データ型 ... [, CONSTRAINT 制約名] 制約の種類] ... );
凡例:
<>:必須構文。
[]:オプション構文。
| :OR
...:繰り返し、その後も続くを意味する構文。
制約構文例
NOT NULL制約CREATE TABLE <表名> ( 列名 データ型 [CONSTRAINT 制約名] NOT NULL ... );
ユニック制約
CREATE TABLE <表名> ( 列名 データ型 [CONSTRAINT 制約名] UNIQUE ... );
または
CREATE TABLE <表名> ( 列名1 データ型, 列名2 データ型, ... [CONSTRAINT 制約名] UNIQUE(列名1, 列名2) );
主キー制約
CREATE TABLE 表名( 列名 データ型 [CONSTRAINT 制約名] PRIMARY KEY ... );
または
CREATE TABLE <表名> ( 列名1 データ型, 列名2 データ型, ... [CONSTRAINT 制約名] PRIMARY KEY(列名1, 列名2) );
外部キー制約
CREATE TABLE 表名( 列名 データ型 [CONSTRAINT 制約名] REFERENCES 親表名 (親表の列名) ... );
または
CREATE TABLE <表名> ( 列名 データ型, ... [CONSTRAINT 制約名] FOREIGN KEY (外部キー列名 [, 外部キー列名]...) REFERENCES 親表名 (親表の列名 [, 親表の列名]...) );
チェック制約
CREATE TABLE 表名( 列名 データ型 [CONSTRAINT 制約名] CHECK (条件) ... );
または
CREATE TABLE <表名> ( 列名 データ型, ... [CONSTRAINT 制約名] CHECK (条件) ... );
制約の変更・削除・無効/有効
◎制約の変更
ALTER TABLE <表名> MODIFY 列名 [NOT NULL]
一度制約を削除してから、新たに制約を追加する。
または
ALTER TABLE <表名> ADD|ALTER 表制約構文
ALTER TABLE <表名> ADD <表制約構文>; ALTER TABLE <表名> ALTER [COLUMN] 列名 SET DEFAULT デフォルト値 ; ALTER TABLE <表名> ALTER [COLUMN] 列名 DROP DEFAULT ;
◎制約の削除
ALTER TABLE <表名> DROP [CONSTRAINT | PRIMARY KEY | INDEX 列名] 制約名 [RESTRICT | CASCADE]
CASCADEオプションを指定すると、依存するその他制約も削除されます。
※UNIQUEの削除は DROP INDEX 列名で、例:
UNIQUE制約の追加:
alter table TEST_TABLE ADD UNIQUE TEST_UNIQUE_KEY
UNIQUE制約の削除:
alter table TEST_TABLE DROP INDEX TEST_UNIQUE_KEY
◎制約の無効/有効
制約の無効化
ALTER TABLE <表名> DISABLE [CONSTRAINT | PRIMARY KEY | UNIQUE(列名)] 制約名 [CASCADE]
制約の有効化
ALTER TABLE <表名> ENABLE [CONSTRAINT | PRIMARY KEY | UNIQUE(列名)] 制約名 [CASCADE]
データが制約を満たされない場合、制約の有効化になりません。
Sponsored Link
- Relative Articles
- SQL入門その1 - SQLとは - (2007/10/30 10:42)
- SQL入門その2 - データの問い合わせSELECT文の基本的な使い方 - (2007/10/30 12:42)
- SQL入門その3 - データの更新UPDATE文の基本的な使い方 - (2007/11/05 16:07)
- SQL入門その4 - データの削除DELETE文の基本的な使い方 - (2007/11/05 16:28)
- SQL入門その5 - データの登録INSERT文の基本的な使い方 - (2007/11/05 17:21)
- SQL入門その6 - テーブルの作成CREATE TABLE文の基本的な使い方 - (2007/11/06 14:42)
- SQL入門その7 - インデックスの作成CREATE INDEX文の基本的な使い方 - (2007/11/07 16:58)
- SQL入門その9 - テーブルの変更ALTER TABLE文の基本的な使い方 - (2007/11/20 23:37)
- SQL入門その10 - SELECT DISTINCT文による重複データを取除く - (2008/02/16 15:58)
- SQL入門その11 - SELECT ... ORDER BY文によるデータの並べ替え - (2008/02/16 18:08)