識別列の作成および変更

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

識別列として作成できるのは、タイプ 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 
   CYCLE),
   SHIPPED_TO VARCHAR (36) ,
   ORDER_DATE DATE)

この列は、開始値 500 で定義され、新しい行が挿入されるたびに 1 ずつ増分され、最大値に達した場合はリサイクルされます。 この例では、識別列の最大値は、データ・タイプにおける最大値です。データ・タイプが SMALLINT として定義されているため、ORDERNO に割り当てることのできる値の範囲は 500 から 32 767 です。この列の値が 32 767 に達したら、もう一度 500 から再開されます。 ある列に 500 がまだ割り当てられたままで、しかもこの識別列に固有キーの指定がされている場合は、重複キー・エラーが戻されます。 次の挿入操作は、501 を使用するように試みられます。 識別列に固有キーの指定がされていない場合は、表の中に 500 が何度現れようと、500 が再度使用されます。

値の範囲が大きい場合は、列に対してデータ・タイプ 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 列のままですが、識別属性は除去されます。 システムは、この列の値をもはや生成しなくなります。