例: PRIMARY KEYまたはUNIQUE制約とPrimaryIndexDefaultの設定の存在の有無に左右されるCREATEリクエスト - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/ncd1596241368722.ditamap
dita:ditavalPath
ja-JP/ncd1596241368722.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

この例では、明示的なPRIMARY INDEX句も明示的なNO PRIMARY INDEX句も指定されませんが、column_2にUNIQUE制約が指定されます。

     CREATE TABLE test_1 (
       column_1 INTEGER NOT NULL,
       column_2 INTEGER NOT NULL 
     CONSTRAINT UNIQUE (column_2));

PrimaryIndexDefaultパラメータの設定に関係なく、Vantageはcolumn_2に、このUPIの定義されたテーブルを作成します。これは、PRIMARY INDEXもNO PRIMARY INDEXも明示的に指定されていないためです。このため、システムは、デフォルトのプライマリ インデックスを作成するというルールに従って、UNIQUE制約を使用して最初の列(column_2)にUPIを作成します。

その結果、test_1のSHOW TABLEリクエストは次のSQLテキストを返します。

     CREATE SET TABLE test_1 ,NO FALLBACK ,
       NO BEFORE JOURNAL,
       NO AFTER JOURNAL,
       CHECKSUM = DEFAULT (
       (
       column_1 INTEGER NOT NULL,
       column_2 INTEGER NOT NULL, CONSTRAINT UNIQUE (column_2);

INDEX句が指定されていないため、DBS制御にPrimaryIndexDefaultパラメータが設定されているかどうかに関係なく、Vantageはcolumn_2 (データ ディクショナリのPRIMARY KEY制約に対するものとしてマーク付け)に固有プライマリ インデックスで定義されたテーブルを作成します。

次の例でも、明示的なPRIMARY INDEX句または明示的なNO PRIMARY INDEX句は指定されませんが、column_2にPRIMARY KEY制約が指定されます。

     CREATE TABLE test_2 AS (
       column_1 INTEGER NOT NULL
       column_2 INTEGER NOT NULL 
     CONSTRAINT PRIMARY KEY (column_2));

column_2がプライマリ キーとして定義されているため、PrimaryIndexDefaultパラメータの設定に関係なく、Vantageはcolumn_2 (データ ディクショナリのPRIMARY KEY制約に対するものとしてマーク付け)にUPIが定義されたテーブルを作成します。そのため、test_2のSHOW TABLEリクエストは次のSQLテキストを返します。

     CREATE SET TABLE test_2 ,NO FALLBACK ,
       NO BEFORE JOURNAL,
       NO AFTER JOURNAL,
       CHECKSUM = DEFAULT
       (
       column_1 INTEGER NOT NULL,
       column_2 INTEGER NOT NULL, CONSTRAINT PRIMARY KEY (column_2);

INDEX句が指定されていないため、DBS制御にPrimaryIndexDefaultパラメータが設定されているかどうかに関係なく、Vantageはcolumn_2に固有プライマリ インデックスで定義されたテーブルを作成します。

この例では、明示的なPRIMARY INDEX句も明示的なNO PRIMARY INDEX句も指定されていません。このリクエストはまた、column_1にUNIQUE制約を、column_2にPRIMARY KEY制約を指定します。

     CREATE TABLE test_3 AS (
       column_1 INTEGER NOT NULL
       column_2 INTEGER NOT NULL 
     CONSTRAINT UNIQUE (column_1)
     CONSTRAINT PRIMARY KEY (column_2));

この場合、Vantageはデフォルトの階層に従って非プライマリ インデックス列をプライマリ インデックスに変換してから、PRIMARY KEY制約をこのテーブルの固有プライマリ インデックスに変換します。これは、PRIMARY KEY制約が、デフォルトのプライマリ インデックス ルール階層のUNIQUE制約よりも優先されるためです。

PrimaryIndexDefaultパラメータの設定に関係なく、Vantageはcolumn_2にUPIが定義されたテーブルを作成し、column_1のUNIQUE制約を固有セカンダリ インデックスに変換するため、test_3のSHOW TABLEリクエストは次の作成テキストを返します。

     CREATE SET TABLE test_3 ,NO FALLBACK ,
       NO BEFORE JOURNAL,
       NO AFTER JOURNAL,
       CHECKSUM = DEFAULT
       (column_1 INTEGER NOT NULL,
       column_2 INTEGER NOT NULL, 
							CONSTRAINT UNIQUE (column_1)
       CONSTRAINT PRIMARY KEY (column_2));