識別列指定 - Teradata Database - Teradata Vantage NewSQL Engine - 識別列指定オプション、CREATE TABLE(キュー テーブル形式)SQL文。

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

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/wkf1512081455740.ditamap
dita:ditavalPath
ja-JP/wkf1512081455740.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

識別列は、ANSI SQL:2011に準拠しています。

QITS列は、識別列として定義することもできません。

ALWAYS

識別列の値が常にシステムによって作成されるように指定します。

GENERATED ALWAYS AS IDENTITYとして定義された識別列に値を挿入することはできません。更新することもできません。

BY DEFAULT

識別列の値は、状況に応じてシステムによって生成されるかユーザーによって挿入されます。
  • 識別列にNULLを挿入しようとすると、Teradata Databaseは識別列の値を代わりに生成します。
  • 識別列に値を挿入しようとすると、Teradata Databaseは指定された値を識別列に挿入します。

例: 識別列と共に定義されたキュー テーブルの作成

この例では、QSNという名前の、キュー順序番号の識別列と共に定義されたキュー テーブルを作成します。テーブルのプライマリ インデックスはQITS列だけに定義された簡単なものなので、これはNUPIとして定義する必要があります。

    CREATE TABLE qtbl_4, QUEUE (
      qits  TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
      qsn   INTEGER GENERATED ALWAYS AS IDENTITY (CYCLE),
      col_3 INTEGER)
    PRIMARY INDEX (qits);

QSNの値は通常の環境では固有であるものとされています。キュー テーブルの行が消費される割合が非常に高く、識別列値のサイクルが完了してQSN値を再利用できるほど十分には、キュー(キューに入れられたイベントにつき1つの表行を使用するものとする)が大きくはならないためです。

例: 制約とUPIを持つキュー テーブルの作成

この例では、行を外部から固有に識別するための制約とUPIとを持つキュー テーブルを作成します。

明確に非固有のQITS列であるcol_1_qitsはテーブルの固有プライマリ インデックスのコンポーネントですが、そのインデックスは複合インデックスであり、その他のコンポーネントには属性NOT NULLおよびUNIQUEがあって、その複合プライマリ インデックスの固有性を保証しています。

    CREATE SET TABLE qtbl_2, QUEUE, NO FALLBACK (
      col_1_qits TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
      col_2      INTEGER NOT NULL UNIQUE,
      col_3      INTEGER, CONSTRAINT check_1 CHECK (col_3 > 0))
    UNIQUE PRIMARY INDEX primary_1 (col_1_qits, col_2);

例: UPIおよびNUSIを持つキューの作成

この例では、UPIがキュー順序番号の識別列QSNに定義され、NUSIがキュー挿入タイムスタンプQITSに定義されたキュー テーブルを作成します。

    CREATE TABLE qtbl_5, QUEUE (
      qits  TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
      qsn   INTEGER GENERATED ALWAYS AS IDENTITY (NO CYCLE),
      col_3 INTEGER)
    UNIQUE PRIMARY INDEX (qsn)
    INDEX qits;

キュー テーブルの行が高い割合で消費される場合は、一般にNO CYCLEオプションをCYCLEで置き換えます。CYCLEには、MAXVALUEを超過しても、実行が失敗しない限り、QSN番号を再利用できるという利点があります。そのようにして、SQNのUPIはいつでもSQNの値が固有であることを保証します。