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列を変更または削除する方法を示します。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 WITH
、INCREMENT BY
、MAXVALUE
、CACHE
、CYCLE
から変更する方法も示します。
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
を設定します。