DB2 Version 9.7 for Linux, UNIX, and Windows

制約の作成および変更

制約は、ALTER TABLE ステートメントを使用して既存の表に追加することができます。

このタスクについて

制約名は、ALTER TABLE ステートメント内に指定した他のどの制約とも同じにすることはできず、 その表内で固有のものでなければなりません (これには、 定義されたすべての参照整合性制約の名前も含まれます)。 ステートメントが正常実行される前に、既存のデータが新しい条件に対してチェックされます。

ユニーク制約の作成および変更
ユニーク制約を既存の表に追加することができます。 制約名は、ALTER TABLE ステートメント内に指定した他のどの制約とも同じにすることはできず、 その表内で固有のものでなければなりません (これには、 定義されたすべての参照整合性制約の名前も含まれます)。 ステートメントが正常実行される前に、既存のデータが新しい条件に対してチェックされます。
コマンド行を使用してユニーク制約を定義するには、ALTER TABLE ステートメントの ADD CONSTRAINT オプションを使用します。 例えば、以下のステートメントは、 表内の従業員を固有のものとして識別するための新しい方法を表す、 EMPLOYEE 表に対するユニーク制約を追加します。
   ALTER TABLE EMPLOYEE
      ADD CONSTRAINT NEWID UNIQUE(EMPNO,HIREDATE)
この制約を変更するには、これをドロップしてから再作成することが必要な場合があります。
主キー制約の作成および変更
主キー制約を既存の表に追加することができます。 制約名は、その表内で固有のものでなければなりません (これには、定義されたすべての参照整合性制約の名前も含まれます)。 ステートメントが正常実行される前に、既存のデータが新しい条件に対してチェックされます。
コマンド行を使用して主キーを追加するには、以下のように入力します。
   ALTER TABLE <name>
      ADD CONSTRAINT <column_name>
      PRIMARY KEY <column_name>
既存の制約を変更することはできません。主キーとして別の列または列セットを定義するには、最初に既存の主キー定義をドロップしてから再作成する必要があります。
チェック制約の作成および変更
表チェック制約が追加されると、 表の挿入または更新を行うパッケージおよびキャッシュに入った動的 SQL には、 無効のマークが付けられる場合があります。
コマンド行を使用して表チェック制約を追加するには、以下のように入力します。
   ALTER TABLE EMPLOYEE
      ADD CONSTRAINT REVENUE CHECK (SALARY + COMM > 25000)
この制約を変更するには、これをドロップしてから再作成することが必要な場合があります。
外部キー (参照) 制約の作成および変更
外部キーは、別の表のデータ値への参照です。 外部キー制約にはさまざまなタイプがあります。
外部キーが表に追加されると、 以下のステートメントが含まれるパッケージまたはキャッシュに入った動的 SQL には、 無効のマークが付けられる場合があります。
  • 外部キーが入っている表の挿入または更新を行うステートメント
  • 親表の更新または削除を行うステートメント
コマンド行を使用して外部キーを追加するには、以下のように入力します。
   ALTER TABLE <name>
      ADD CONSTRAINT <column_name>
       FOREIGN KEY <column_name>
       ON DELETE <action_type>
       ON UPDATE <action_type>
以下の例は、 表に主キーと外部キーを追加するための ALTER TABLE ステートメントを示しています。
   ALTER TABLE PROJECT
     ADD CONSTRAINT PROJECT_KEY
         PRIMARY KEY (PROJNO)
   ALTER TABLE EMP_ACT
     ADD CONSTRAINT ACTIVITY_KEY
         PRIMARY KEY (EMPNO, PROJNO, ACTNO)
     ADD CONSTRAINT ACT_EMP_REF
         FOREIGN KEY (EMPNO)
         REFERENCES EMPLOYEE
         ON DELETE  RESTRICT
     ADD CONSTRAINT ACT_PROJ_REF
         FOREIGN KEY (PROJNO)
         REFERENCES PROJECT
         ON DELETE CASCADE
この制約を変更するには、これをドロップしてから再作成することが必要な場合があります。
インフォメーショナル制約の作成および変更
照会のパフォーマンスを向上させるために、インフォメーショナル制約を表に追加することができます。NOT ENFORCED オプションを DDL に指定する場合、CREATE TABLE または ALTER TABLE ステートメントを使用してインフォメーショナル制約を追加します。
制約事項: 表にインフォメーショナル制約を定義した後は、インフォメーショナル制約を除去してからでないと、その表の列名を変更することができません。
コマンド行を使用して表にインフォメーショナル制約を指定するには、新規表に対して以下のコマンドを入力します。
   ALTER TABLE <name> <constraint attributes> NOT ENFORCED
ENFORCED または NOT ENFORCED: 挿入、更新、削除などの通常の操作中に、 データベース・マネージャーによって制約が課せられるかどうかを指定します。
  • 機能従属関係に ENFORCED を指定することはできません (SQLSTATE 42621)。
  • この制約に適合することが分かっている表データだけに、NOT ENFORCED を指定してください。データが実際には制約に準拠していない場合、照会結果が予測不能になる可能性があります。

この制約を変更するには、これをドロップしてから再作成することが必要な場合があります。