1. ホーム
  2. データベース
  3. デービーツー

DB2 自動インクリメントフィールドの実装方法

2022-01-19 17:28:08
生成された構文により、この値をどのように生成したいかの戦略をカスタマイズすることができます。
構文は以下の通りです。
生成された列の定義{常に|デフォルトで}。
として{identity identity rules | using your rules}。
まずは、前回作成したフォームを削除してみましょう。
db2 => drop table nomination
次に、別のテーブルを作成します。
コピーコード コードは以下の通りです。

Create table nomination
(
nominationID BIGINT Not Null Primary Key generated always as identity,
nominee char(6) Not Null,
nominator char(6) Not Null,
reason VARCHAR(250),
nomdate date Not Null,
categoryid INTEGER Not Null,
check (nominee ! = nominator) not enforced enable query optimization,
Foreign Key CategoryExists (categoryid)
references category (categoryid) on delete restrict
)

太字のテキストに注意してください。後でinsertやupdateを使って明示的に値を指定することができなくなります。
前回作成したテーブルを削除してみましょう。
db2 => drop table category
次に、フォームを作成します。
コピーコード コードは以下の通りです。

Create table category
(
CategoryID INTEGER Primary Key Generated Always as Identity
(Start With 1 Increment by 1 minvalue 0 maxvalue 999999999
No cycle cache 5 no order),
CateogryName VARCHAR(50) Not Null,
Eligibility VARCHAR(250)
)

太字のIDの文はDB2のマニュアルで調べれば、一目瞭然の自然な言葉ばかりです。
数字のパディングだけでなく、文字も扱いたい場合があるので、大文字に変換する例を以下に紹介します。
db2 => alter table category add column
UpperCatName VARCHAR(50) 常に (upper(CategoryName)) として生成されます。
これらについては、DB2のドキュメントに具体的な説明があります。