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
表では、id
列GENERATED 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値が増分されます。 |
すべての順序ジェネレータ属性の完全なリストは、順序ジェネレータの属性を参照してください。