IDENTITY列の変更または削除

ALTER TABLE...MODIFY句を使用して、表のIDENTITY列およびそのシーケンス・ジェネレータ(SG)のオプションの1つ以上の属性を変更します。

各IDENTITY列は、次のいずれかの方法で生成されます。

IDENTITY列の文 説明
GENERATED ALWAYS AS IDENTITY 常にシーケンス・ジェネレータによってIDENTITY値が指定されます。列の値は指定できません。
GENERATED BY DEFAULT AS IDENTITY 列値を指定しないときは常に、シーケンス・ジェネレータによってIDENTITY値が指定されます。
GENERATED BY DEFAULT ON NULL AS IDENTITY NULLの列値を指定すると、シーケンス・ジェネレータによって次のIDENTITY値が指定されます。
IDENTITY列には、シーケンス・ジェネレータ(SG)の動作をさらに定義する属性を1つ以上指定できます。

この項では、表のIDENTITY列を変更または削除する方法を示します。ALTER TABLE文では、任意の表定義のフィールドを追加、削除または変更できます。ALTER TABLE文を使用して、IDENTITYフィールドを変更します。

ノート:

ALTER TABLE...文のMODIFY句は、IDENTITY列でのみサポートされています。

次の例では、IDENTITYフィールドを、IDENTITYなしで作成された新しい表test_alterに追加します。この例では、test_alterの関連SGに関する複数の属性も指定しています。

CREATE Table Test_alter 
            (id INTEGER,
            name STRING, 
PRIMARY KEY (id));

ALTER Table Test_alter 
(ADD new_id INTEGER GENERATED ALWAYS AS IDENTITY 
(START WITH 1 
INCREMENT BY 2 
MAXVALUE 100 
CACHE 10 
CYCLE));

IDENTITY列を削除して、そのようなフィールドが残らないようにするには、DROP id句を指定したALTER TABLEを使用します。

CREATE Table Test_alter (
id INTEGER GENERATED ALWAYS AS IDENTITY(
START WITH 1 
INCREMENT BY 2 
MAXVALUE 100 
CACHE 10 
CYCLE),
name STRING,
PRIMARY KEY (name));

ALTER TABLE Test_alter (DROP id);

id列を保持しつつ、そのIDENTITY定義を削除するには、MODIFY id DROP IDENTITY句を指定したALTER TABLEを使用します。

CREATE Table Test_alter (
id INTEGER GENERATED ALWAYS AS IDENTITY(
START WITH 1 
INCREMENT BY 2 
MAXVALUE 100 
CACHE 10 
CYCLE),
name STRING, 
PRIMARY KEY (id));

ALTER TABLE Test_alter (MODIFY id DROP IDENTITY);

SG属性は変更できます。新しい値は、SG属性にアクセスするための後続のクライアント・コールで有効になります。これは、キャッシュにこれ以上値がない場合やクライアントに格納された属性がタイムアウトした場合などに発生します。

IDENTITY列の基本プロパティをGENERATED ALWAYSからGENERATED BY DEFAULTに変更するには、次のALTER TABLEの例を参照してください。この例では、SG属性を元の定義START WITHINCREMENT BYMAXVALUECACHECYCLEから変更する方法も示します。


CREATE Table Test_alter (
id INTEGER GENERATED ALWAYS AS IDENTITY 
 (START WITH 1 
 INCREMENT BY 2 
 MAXVALUE 100 
 CACHE 10 
 CYCLE),
 name STRING, PRIMARY KEY (id)
);

ALTER TABLE Test_alter (MODIFY id GENERATED BY DEFAULT AS IDENTITY
(START WITH 1000 
 INCREMENT BY 3 
 MAXVALUE 5000 
 CACHE 1
 CYCLE)
);

ノート:

クライアントには、SG属性を格納するための時間ベースのキャッシュがあります。クライアントはサーバーに接続して、期限切れ後にこのキャッシュをリフレッシュします。デフォルトのタイムアウトは5分です。このデフォルトを変更するには、KVStoreConfigでsgAttrsCacheTimeoutを設定します。