識別列は、ANSI SQL:2011に準拠しています。
QITS列は、識別列として定義することもできません。
ALWAYS
識別列の値が常にシステムによって作成されるように指定します。
GENERATED ALWAYS AS IDENTITYとして定義された識別列に値を挿入することはできません。更新することもできません。
BY DEFAULT
- 識別列にNULLを挿入しようとすると、Vantageは識別列の値を代わりに生成します。
- 識別列に値を挿入しようとすると、Vantageは指定された値を識別列に挿入します。
例: 識別列と共に定義されたキュー テーブルの作成
この例では、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の値が固有であることを保証します。