IDENTITY列を持つ表の作成

表の作成時にIDENTITY列を作成することも、ALTER TABLE... ADDを使用して、既存の表を変更してIDENTITY列を追加することもできます。いずれの場合も、次に説明するIDENTITY文のいずれかを選択します。この項では、IDENTITY列を含む表の作成について説明します。

IDENTITY列を含む表を作成するための正式な構文は次のとおりです。
GENERATED (ALWAYS | (BY DEFAULT [ON NULL])) AS IDENTITY
   [sequence_options,...]
オプションのsequence_optionsは、指定できるシーケンス・ジェネレータのすべての属性を参照します。
IDENTITY列の文 説明
GENERATED ALWAYS AS IDENTITY 常にシーケンス・ジェネレータによってIDENTITY値が指定されます。列の値は指定できません。
GENERATED BY DEFAULT AS IDENTITY 列値を指定しないときは常に、シーケンス・ジェネレータによってIDENTITY値が指定されます。
GENERATED BY DEFAULT ON NULL AS IDENTITY NULLの列値を指定すると、シーケンス・ジェネレータによって次のIDENTITY値が指定されます。
SQL CLIから列GENERATED ALWAYS AS IDENTITYを持つ表を作成するには、次のようにします。
sql-> CREATE TABLE IF NOT EXISTS tname1 (
idValue INTEGER GENERATED ALWAYS AS IDENTITY, 
acctNumber INTEGER, 
name STRING, 
PRIMARY KEY (acctNumber));
Statement completed successfully
sql->
この表tname1では、表に行を追加するたびに、シーケンス・ジェネレータ(SG)によって、そのキャッシュからidvalueが更新されます。idValueの値は指定できません。シーケンス・ジェネレータの属性を指定しない場合、SGはデフォルト値を使用します。
列GENERATED BY DEFAULT ON NULL AS IDENTITYを持つ表を作成するには、次のようにします。
sql-> CREATE TABLE IF NOT EXISTS tname2 (
idvalue INTEGER GENERATED BY DEFAULT ON NULL AS IDENTITY, 
acctNumber INTEGER, 
name STRING, 
PRIMARY KEY (acctNumber));
Statement completed successfully
sql->
この表tname2では、行を追加するたびに、idvalue列に値が指定されていない場合、idvalue列に指定された値がNULLの場合に、SGによってそのキャッシュから次の使用可能な値が挿入されます。
列GENERATED BY DEFAULT AS IDENTITYを持つ表を作成するには、次のようにします。
sql-> CREATE TABLE IF NOT EXISTS tname3 (
idvalue INTEGER GENERATED BY DEFAULT AS IDENTITY, 
acctNumber INTEGER, 
name STRING, 
PRIMARY KEY (acctNumber));
Statement completed successfully
sql->
この表tname3では、行を追加するたびに、idvalue列に値が指定されていない場合に、SGによってそのキャッシュから次の使用可能な値が挿入されます。
複数のSG属性を持つ新しい表sg_attsを作成するには、次のようにします。
sql-> CREATE Table sg_atts (
id INTEGER GENERATED ALWAYS AS IDENTITY
(START WITH 2 
INCREMENT BY 2 
MAXVALUE 200 
NO CYCLE),
name STRING,
PRIMARY KEY (id));
Statement completed successfully
sql->
sg_attsでは、整数のIDENTITYフィールド(id)が常に生成されることが指定されます。
SGの属性 説明
start with 2 順序値は2から開始します。
increment by 2 行ごとに順序値を2ずつ増加させます。
maxvalue 200 最大のIDENTITY値を指定します。指定する内容はデフォルト値のmaxvalueをオーバーライドします。これは使用中のIDENTITYデータ型の上限です。IDENTITY列がこの値(200)に達すると、SGはIDENTITY値をそれ以上生成しません。最大値に達し、no cycle属性が使用されています。
no cycle 列がmaxvalueに到達したら、2から、またはいかなる値でも再度開始されることはありません。
いくつかのSGの属性を指定して、別の表sg_some_attsを作成するには、次のように実行します。
sql-> CREATE Table sg_some_atts (
id LONG GENERATED BY DEFAULT AS IDENTITY
(START WITH 1
INCREMENT BY 1 
CYCLE 
CACHE 200),
account_id INTEGER,
name STRING,
PRIMARY KEY (account_id));
sg_some_atts表では、idGENERATED BY DEFAULT AS IDENTITYを指定しますが、これは主キーではありません。
SGの属性またはその他の詳細 説明
CYCLE CYCLEの指定は、SGによって、指定するMAXVALUE属性、またはデフォルトのMAXVALUEのいずれかまでのIDENTITY値が指定されることを示します。IDENTITYがMAXVALUE値に到達すると、SGによって、指定されたMINVALUEから、またはデータ型のデフォルトのMINVALUEから、値が再度開始されます。CYCLEは、迅速なアクセスのためにローカル・キャッシュに格納する値の数のみを指定するCACHE属性とは関連しません。CACHE値は、データ型の最大値を緊密に反映するように設定できますが、クライアント・キャッシュのサイズのため、これはお薦めしません。
CACHE 200 迅速な取得のために、各クライアントがキャッシュに格納する値の数。IDENTITYがキャッシュ内の最後の数値に達すると、SGはサーバーから別の値のセットを自動的に取得します。
START WITH 1 SGによって、LONGデータ型の最大値に達するまで、1、2、3などと値が生成されます。
INCREMENT BY 1 SGによって、新しい行ごとに、それぞれの新しいIDENTITY値が増分されます。

すべての順序ジェネレータ属性の完全なリストは、順序ジェネレータの属性を参照してください。