メイン コンテンツへスキップ
サポート
Microsoft アカウントでサインイン
サインインまたはアカウントを作成してください。
こんにちは、
別のアカウントを選択してください。
複数のアカウントがあります
サインインに使用するアカウントを選択してください。

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

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

注: Microsoft Access データベース エンジンは、Microsoft Access データベース エンジン以外のデータベースでは CONSTRAINT 句やデータ定義言語ステートメントを使用できません。 代わりに DAO の Create メソッドを使用してください。

構文

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

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

作成する制約の名前。

primary1, primary2

主キーに指定するフィールドの名前。

unique1, unique2

一意なキーに指定するフィールドの名前。

notnull1, notnull2

非 Null 値に制限されるフィールドの名前。

ref1, ref2

別のテーブルにあるフィールドを参照する外部キー フィールドの名前。

foreigntable

foreignfield で指定した 1 つ以上のフィールドのある外部テーブルの名前。

foreignfield1, foreignfield2

ref1ref2 で指定した foreigntable の 1 つ以上のフィールドの名前。 参照されるフィールドが foreigntable の主キーである場合は、この句を省略できます。


解説

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

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

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

  • UNIQUE 予約語を使用して、フィールドを一意のキーとして指定できます。 これは、テーブル内の 2 つのレコードがこのフィールドで同じ値を持つことができないことを意味します。 任意のフィールドまたはフィールドの一覧を一意として制限できます。 複数フィールド制約が一意キーとして指定されている場合、1 つのフィールドで 2 つ以上のレコードの値が同じである場合でも、インデックス内のすべてのフィールドの結合値は一意である必要があります。

  • PRIMARY KEY 予約語を使用して、テーブル内の 1 つのフィールドまたはフィールドセットを主キーとして指定できます。 主キー内のすべての値は Null ではなく一意である必要があり、テーブルの主キーは 1 つだけです。

    注: 既に主キーが設定されているテーブルには PRIMARY KEY 制約を設定しないでください。設定した場合はエラーになります。

  • 予約語 FOREIGN KEY を使用すると、指定したフィールドを外部キーにすることができます。 外部テーブルの主キーが複数のフィールドから成る場合は、必ず複数フィールドの制約の定義を使用し、すべての参照元フィールド、外部テーブルの名前、および外部テーブルのすべての参照先フィールドの名前を、参照元フィールドと同じ順序でそれぞれ指定する必要があります。 参照先フィールドが外部テーブルの主キーである場合は、参照先フィールドを指定する必要はありません。 既定では、データベース エンジンは外部テーブルの主キーを参照先フィールドと見なします。

    外部キーの制約は、対応する主キーの値が変更されるときに行われる特定の動作を定義します。

  • CONSTRAINT が定義されているテーブルの主キーに対して実行される対応するアクションに基づいて、外部テーブルに対して実行するアクションを指定できます。 たとえば、テーブル Customers の次の定義を考えてみましょう。

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

この Orders テーブルは、Customers テーブルの主キーを参照する外部キーのリレーションシップを定義しています。

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

ON UPDATE CASCADE 句と ON DELETE CASCADE 句は、どちらも外部キー上に定義されます。 ON UPDATE CASCADE 句は、Customers テーブルで顧客の情報 (CustId) が更新された場合、この更新が Orders テーブルをとおしてカスケードされることを意味します。 各注文に含まれる、対応した顧客情報の値は、自動的に新しい値に更新されます。 ON DELETE CASCADE 句は、Customers テーブルで顧客が削除された場合、Orders テーブルにある同じ顧客の顧客情報の値を含む行もすべて同様に削除されることを意味します。

CASCADE アクションの代わりに SET NULL アクションを使う、次のような Orders テーブルの異なる定義について検討します。

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

ON UPDATE SET NULL 句は、Customers テーブルで顧客の情報 (CustId) が更新された場合、Orders テーブルの対応する外部キーの値が自動的に NULL に設定されることを意味します。 同様に、ON UPDATE SET NULL 句は、顧客が Customers テーブルから削除された場合、Orders テーブルの対応するすべての外部キーの値が、自動的に NULL に設定されることを意味します。

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



ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。

この情報は役に立ちましたか?

言語の品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?
[送信] を押すと、Microsoft の製品とサービスの改善にフィードバックが使用されます。 IT 管理者はこのデータを収集できます。 プライバシーに関する声明。

フィードバックをいただき、ありがとうございます。

×