IDENTITY列の変更
ALTER TABLE...MODIFY
句を使用して、表のIDENTITY列およびそのシーケンス・ジェネレータ(SG)のオプションの1つ以上の属性を変更します。
ノート:
ALTER TABLE
文のMODIFY
句は、IDENTITY列でのみサポートされています。
IDENTITY列を変更するには、次の2つの方法があります。
- IDENTITY列のプロパティは変更できます。さらに、IDENTITY列に関連付けられた順序ジェネレータ属性を変更できます。順序ジェネレータは新しい属性を使用して即時に変更されますが、クライアントでは、順序ジェネレータに対するクライアントからの後続のリクエストで生成された順序番号に対する新しい属性の影響が表示されます。これは、キャッシュが使い果たされたとき、またはクライアントに格納された属性がタイムアウトになったときに発生します。
ノート:
各クライアントには、順序ジェネレータの属性を格納するための時間ベースのキャッシュがあります。クライアントはサーバーに接続して、期限切れ後にこのキャッシュをリフレッシュします。デフォルトのタイムアウトは5分で、KVStoreConfigでsgAttrsCacheTimeout
を設定することにより変更できます。 - 既存のIDENTITY列のIDENTITYプロパティは削除できます。そのIDENTITY列に関連付けられている順序ジェネレータも削除されます。その列の値は、システムによって生成されなくなります。
次の例は、アイデンティティ列idのプロパティをGENERATED ALWAYSからGENERATED BY DEFAULTに変更し、順序ジェネレータの属性START WITH、INCREMENT BY、MAXVALUEおよびCACHEを変更する方法を示しています。
例5-14 IDENTITY列のプロパティおよび順序ジェネレータ属性の変更
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)
);
例5-15 既存のIDENTITY列のIDENTITYプロパティの削除
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);