識別列の作成および変更
識別列を使用して表に行を追加するたびに、新しい行の識別列値がシステムによって生成されます。
識別列として作成できるのは、タイプ SMALLINT、INTEGER、BIGINT、DECIMAL、または NUMERIC の列だけです。 識別列は、1 つの表につき 1 つだけ許可されます。 表の定義を変更するときには、追加される列だけを識別列として指定できます。既存の列は識別列には指定できません。
表を作成するときは、桁の中の 1 つの列を識別列として定義することができます。 例えば、ORDERNO、 SHIPPED_TO、 ORDER_DATE という名前の 3 つの列を持つ表 ORDERS を作成します。 ORDERNO を識別列として定義します。
CREATE TABLE ORDERS
(ORDERNO SMALLINT NOT NULL
GENERATED ALWAYS AS IDENTITY
(START WITH 500
INCREMENT BY 1
NOCYCLE),
SHIPPED_TO VARCHAR (36) ,
ORDER_DATE DATE);この列は開始値 500で定義され、挿入されたすべての新規行ごとに 1 ずつ増分され、最大値に達すると失敗します。 この例では、識別列の最大値は、データ・タイプにおける最大値です。 データ・タイプは SMALLINTとして定義されているので、 ORDERNO に割り当てることができる値の範囲は 500 から 32767までです。 ID 列の値が 32767に達すると、値の範囲が使い尽くされ、追加の行を挿入することはできません。
列が CYCLEとして定義されている場合、列値が 32767に到達すると、再び 500 で再始動されます。 ある列に 500 がまだ割り当てられたままで、しかもこの識別列に固有キーの指定がされている場合は、重複キー・エラーが戻されます。 次の挿入操作は、501 を使用するように試みられます。 ID 列にユニーク・キーが指定されていない場合は、 500 が再び生成され、テーブル内で ID 列の値が重複して発生します。
より大きい値の範囲の場合は、データ・タイプ INTEGER または BIGINT になる列を指定します。 識別列の値を減分させたい場合は、INCREMENT オプションに負の値を指定します。 MINVALUE と MAXVALUE を使用して、数値の正確な範囲を指定することもできます。
ALTER TABLE ステートメントを使用して、既存の識別列の属性を変更することができます。 例えば、識別列を新規の値にして再開することもできます。
ALTER TABLE ORDER
ALTER COLUMN ORDERNO
RESTART WITH 1;列から識別属性を除去することもできます。
ALTER TABLE ORDER
ALTER COLUMN ORDERNO
DROP IDENTITY;ORDERNO は SMALLINT 列のままですが、識別属性は除去されます。 システムは、この列の値をもはや生成しなくなります。