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を持つ表を作成するには、次のようにします。
CREATE TABLE IF NOT EXISTS tname1 (
idValue INTEGER GENERATED ALWAYS AS IDENTITY, 
acctNumber INTEGER, 
name STRING, 
PRIMARY KEY (acctNumber))
出力:
Statement completed successfully
この表tname1では、表に行を追加するたびに、シーケンス・ジェネレータ(SG)によって、そのキャッシュからidvalueが更新されます。idValueの値は指定できません。シーケンス・ジェネレータの属性を指定しない場合、SGはデフォルト値を使用します。
列GENERATED BY DEFAULT ON NULL AS IDENTITYを持つ表を作成するには、次のようにします。
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
この表tname2では、行を追加するたびに、idvalue列に値が指定されていない場合、idvalue列に指定された値がNULLの場合に、SGによってそのキャッシュから次の使用可能な値が挿入されます。
列GENERATED BY DEFAULT AS IDENTITYを持つ表を作成するには、次のようにします。
CREATE TABLE IF NOT EXISTS tname3 (
idvalue INTEGER GENERATED BY DEFAULT AS IDENTITY, 
acctNumber INTEGER, 
name STRING, 
PRIMARY KEY (acctNumber))
出力:
Statement completed successfully
この表tname3では、行を追加するたびに、idvalue列に値が指定されていない場合に、SGによってそのキャッシュから次の使用可能な値が挿入されます。
複数のSG属性を持つ新しい表sg_attsを作成するには、次のようにします。
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
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を作成するには、次のように実行します。
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値が増分されます。

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