CREATE TABLE文内でPRIMARY KEY制約またはUNIQUE制約のいずれかをデフォルトのプライマリ インデックスとして使用して、テーブルのプライマリ インデックスを定義することができます。
次のリストは、プライマリ インデックスに関してプライマリ キーとUNIQUE制約を定義する場合のルールを示しています。
- 1つのテーブルには多くても1つのプライマリ キーしか含めることはできず、プライマリ インデックスは必須ではありません。
- テーブルにプライマリ インデックスを付ける場合は、これを1つしか含めることができません。
- プライマリ インデックスとPRIMARY KEYまたはUNIQUE制約とを同じ列セットに定義することはできません。
プライマリ キーがテーブルに対して明示的に定義されていなくても、任意の代替キーによって参照整合性を定義することは常に有効なので、テーブルのUPIを参照することにより参照整合性の関係を定義できます。
- CREATE TABLE文にプライマリ インデックスとプライマリ キーの両方を指定する場合、プライマリ インデックスはハッシング インデックスであり、プライマリ キーは、デフォルトで固有セカンダリ インデックスに変換されます。
- CREATE TABLE文にプライマリ キーを指定し、プライマリ インデックスを指定しない場合、システムはデフォルトでプライマリ キーをUPIにマップします。
- CREATE TABLE文にプライマリ インデックス もプライマリ キーも指定しない場合、システムはデフォルトでUNIQUE制約のある最初の列をUPIとして定義します。
- CREATE TABLE文にPRIMARY INDEX制約、PRIMARY KEY制約、またはUNIQUE制約が定義されておらず、PrimaryIndexDefaultパラメータがDまたはPのいずれかに設定されている場合、Teradata Databaseは、テーブルに定義されているインデックスに適した最初の列をプライマリ インデックスとして定義します。
システムは、このインデックスをデフォルトでNUPIとして定義します。ただし、SET(重複行は許可されない)オプションを使用して定義されている単一列テーブルの場合は例外で、この場合、システムはUPIとして定義します。
- CREATE TABLE文にPRIMARY INDEX制約、PRIMARY KEY制約、またはUNIQUE制約が定義されておらず、PrimaryIndexDefaultパラメータがNに設定されている場合、Teradata Databaseは、プライマリ インデックスのいいえテーブルを作成します。
- 次の制約の任意のとして定義されている列は、NULL受入可能として定義することができません。
- PRIMARY KEY
- UNIQUE
- 次の制約の任意のとして定義されている列は、NULL受入可能として定義できます。
- PRIMARY INDEX
- UNIQUE PRIMARY INDEX
- INDEX
- UNIQUE INDEX
これらのインデックス タイプを構成する列セットがNOT NULLになることを宣言する必要があります。ただし、どうしても宣言できない理由がある場合は除きます。
- 同じテーブルで定義済みのセカンダリ インデックスと同じ列セットを持つPRIMARY KEY制約またはUNIQUE制約を定義することはできません。
- UNIQUE制約を、明示的にPRIMARY KEY制約と同じ列に定義することはできません。