IDENTITY列を使用した表の定義

行を追加するたびに値が自動的に増加するようにIDENTITY列を作成できます。

IDENTITY列をCREATE TABLE name DDL文の一部として作成するか、ALTER TABLE name DDL文を使用して既存の表にIDENTITY列を追加します。

1つの表に存在できるIDENTITY列は1つのみです。データ型は、INTEGERLONGまたはNUMBERである必要があります。

すべてのIDENTITY列は表の一部であり、独立オブジェクトとして存在できません。IDENTITY列の追加の詳細は、IDENTITY列の変更または削除を参照してください。

IDENTITY列には関連付けられたシーケンス・ジェネレータ(SG)が必要です。SGは、IDENTITY列の現在の値、次の値および値の合計数を追跡するための表のマネージャです。SGには、その動作を定義する複数の属性(IDENTITY列の開始値や、キャッシュに格納される値の数など)があります。オプションで、IDENTITY列を作成する際に一部のSGの属性を定義したり、すべてのデフォルト値を使用できます。シーケンス・ジェネレータ属性の詳細は、シーケンス・ジェネレータ属性を参照してください。

注意:

表内でIDENTITY列を使用しても、一意性は強制的には適用されません。アプリケーションでIDENTITY列のすべての行に一意の値が必要な場合は、その列をGENERATED ALWAYS AS IDENTITYとして作成して、SGのCYCLE属性の使用を許可しない必要があります。

複数のクライアントが、このように一意の値について定義されたIDENTITY列を持つ表にアクセスする場合、各クライアントには、連続した値セットがそのSGキャッシュに割り当てられます。これらのセットは、他のクライアント・セットと重複しません。たとえば、Client1には値0001 – 1000Client2には1001 – 2000、などと割り当てられます。したがって、それぞれのクライアントが表に行を追加すると、IDENTITY値は0001、1001、0002、1002、1003のようになります(どちらのクライアントも、行を追加するときに独自のキャッシュを使用するため)。IDENTITY列の値は、一意であることが保証されていますが、各クライアントに独自のキャッシュ値のセットがあり、異なる速度で異なる時間に行が追加されるため、必ずしも連続しているとはかぎりません。

IDENTITY列は追加、削除または変更できますが、IDENTITY列の作成方法、およびIDENTITY列が主キーかどうかに応じて、そのような更新に対する特定の制限が存在します。これらの詳細は、この項で後述します。

表のIDENTITY列に索引を作成することもできます。

注意:

IDENTITY列を使用して作成された表を削除すると、シーケンス・ジェネレータも削除されます。

ユーザーには、IDENTITY列を持つ表を作成するために表権限が必要です。ユーザー権限の詳細は、セキュリティ・ガイドKVStore必須権限を参照してください。