CONSTRAINT 句

CONSTRAINT (制約)インデックスに似ています。インデックスと違う点は、ほかのテーブルとのリレーションシップも設定できることです。

CONSTRAINT 句は、ALTER TABLE ステートメントおよび CREATE TABLE ステートメントの中で制約を作成または削除する場合に使用します。CONSTRAINT 句には、単一フィールドの制約を作成するものと、複数フィールドの制約を作成するものの 2 種類があります。


メモ Microsoft Jet データベース エンジンは、Microsoft Jet データベース以外のデータベースでは CONSTRAINT 句や DDL (データ定義言語) ステートメントを使用できません。Microsoft Jet データベース以外のデータベースでは代わりに DAOCreate 系メソッドを使用してください。


構文

単一フィールド制約の場合

CONSTRAINT name {PRIMARY KEY | UNIQUE | NOT NULL |
    REFERENCES foreigntable [(foreignfield1, foreignfield2)]
    [ON UPDATE CASCADE | SET NULL]
    [ON DELETE CASCADE | SET NULL]}

複数フィールド制約の場合

CONSTRAINT name
    {PRIMARY KEY (primary1[, primary2 [, ...]])|
    UNIQUE (unique1[, unique2 [, ...]])|
    NOT NULL (notnull1[, notnull2 [, ...]])|
    FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]])REFERENCES foreigntable [(foreignfield1 [, foreignfield2 [, ...]])]
    [ON UPDATE CASCADE | SET NULL]
    [ON DELETE CASCADE | SET NULL]}

CONSTRAINT 句には、次の指定項目があります。

指定項目 内容
name 作成する制約の名前。
primary1primary2 主キーに指定するフィールドの名前。複数指定もできます。
unique1unique2 一意なキーに指定するフィールドの名前。複数指定もできます。
notnull1notnull2 Null 値に制限されるフィールドの名前。複数指定もできます。
ref1ref2 別のテーブルにあるフィールドを参照する外部キー フィールドの名前。複数指定もできます。
foreigntable 引数 foreignfield で指定した 1 つ以上のフィールドのある外部キー側のテーブルの名前。
foreignfield1foreignfield2 引数 ref1ref2 で指定した引数 foreigntable の 1 つ以上のフィールドの名前。複数指定もできます。参照されるフィールドが引数 foreigntable の主キーである場合は、この句を省略できます。

解説

単一フィールドの CONSTRAINT 構文は、ALTER TABLE ステートメントや CREATE TABLE ステートメントなどのフィールド定義句の中で、フィールド データ型の指定の直後に記述します。

ALTER TABLE ステートメントや CREATE TABLE ステートメントのフィールド定義句以外の箇所で予約語 CONSTRAINT を使用する場合は、必ず複数フィールドの CONSTRAINT 構文を使用します。

CONSTRAINT 句を使用すると、次のいずれかの制約をフィールドに適用できます。

外部キーに自動的にインデックスが作成されることを防ぐために、修飾子 NO INDEX を使用できます。この外部キーを定義する形式は、結果としてインデックスの値が頻繁に繰り返される場合に限り使用してください。外部キーのインデックスの値が頻繁に繰り返される中でインデックスを使用することは、単にテーブルのスキャンを行うよりも能率が下がります。テーブルから挿入や削除された行と一緒にこの種のインデックスを保守することは、パフォーマンスを下げるばかりで何の利益も生み出しません。

参照
ADD USER ステートメント CREATE USER ステートメントまたは CREATE GROUP ステートメント
ALTER USER ステートメントまたは ALTER DATABASE ステートメント CREATE VIEW ステートメント
ALTER TABLE ステートメント DROP ステートメント
CREATE INDEX ステートメント DROP USER ステートメントまたは DROP GROUP ステートメント
CREATE PROCEDURE ステートメント GRANT ステートメント
CREATE TABLE ステートメント REVOKE ステートメント

使用例

CREATE TABLE ステートメント、CONSTRAINT 句の使用例