識別列の作成および変更
識別列を使用して表に行を追加するたびに、新しい行の識別列値がシステムによって生成されます。
識別列として作成できるのは、タイプ 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 列のままですが、識別属性は除去されます。 システムは、この列の値をもはや生成しなくなります。