IDENTITY列を使用した表の定義
行を追加するたびに値が自動的に増加するようにIDENTITY列を作成できます。
IDENTITY列をCREATE TABLE name
DDL文の一部として作成するか、ALTER TABLE name
DDL文を使用して既存の表にIDENTITY列を追加します。
1つの表に存在できるIDENTITY列は1つのみです。データ型は、INTEGER
、LONG
またはNUMBER
である必要があります。
すべてのIDENTITY列は表の一部であり、独立オブジェクトとして存在できません。IDENTITY列の追加の詳細は、IDENTITY列の変更または削除を参照してください。
IDENTITY列には関連付けられたシーケンス・ジェネレータ(SG)が必要です。SGは、IDENTITY列の現在の値、次の値および値の合計数を追跡するための表のマネージャです。SGには、その動作を定義する複数の属性(IDENTITY列の開始値や、キャッシュに格納される値の数など)があります。オプションで、IDENTITY列を作成する際に一部のSGの属性を定義したり、すべてのデフォルト値を使用できます。シーケンス・ジェネレータ属性の詳細は、シーケンス・ジェネレータ属性を参照してください。
注意:
表内でIDENTITY列を使用しても、一意性は強制的には適用されません。アプリケーションでIDENTITY列のすべての行に一意の値が必要な場合は、その列をGENERATED ALWAYS AS IDENTITYとして作成して、SGのCYCLE属性の使用を許可しない必要があります。複数のクライアントが、このように一意の値について定義されたIDENTITY列を持つ表にアクセスする場合、各クライアントには、連続した値セットがそのSGキャッシュに割り当てられます。これらのセットは、他のクライアント・セットと重複しません。たとえば、Client1
には値0001 – 1000
、Client2
には1001 – 2000
、などと割り当てられます。したがって、それぞれのクライアントが表に行を追加すると、IDENTITY値は0001、1001、0002、1002、1003のようになります(どちらのクライアントも、行を追加するときに独自のキャッシュを使用するため)。IDENTITY列の値は、一意であることが保証されていますが、各クライアントに独自のキャッシュ値のセットがあり、異なる速度で異なる時間に行が追加されるため、必ずしも連続しているとはかぎりません。
IDENTITY列は追加、削除または変更できますが、IDENTITY列の作成方法、およびIDENTITY列が主キーかどうかに応じて、そのような更新に対する特定の制限が存在します。これらの詳細は、この項で後述します。
表のIDENTITY列に索引を作成することもできます。
注意:
IDENTITY列を使用して作成された表を削除すると、シーケンス・ジェネレータも削除されます。ユーザーには、IDENTITY列を持つ表を作成するために表権限が必要です。ユーザー権限の詳細は、セキュリティ・ガイドのKVStore必須権限を参照してください。