識別列の作成および変更

識別列を使用して表に行を追加するたびに、新しい行の識別列値がシステムによって生成されます。

識別列として作成できるのは、タイプ 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 列のままですが、識別属性は除去されます。 システムは、この列の値をもはや生成しなくなります。