Db2 LUWのIDENTITY列は表の列に属する採番属性、独立シーケンスは表とは別のオブジェクトです。違いを知りたいときは、定義を読む確認SQLと、実際に番号を発行する操作を分けます。
| この記事の要点 |
|---|
|
旧版の未確認メモをIBMのカタログ資料で照合し、以下でIDENTITY列と独立シーケンスを区別して説明します。確認SQLは定義の照会であり、新しい値の採番や設定変更ではありません。
シーケンスとID列の違い
IDENTITYは表の列に定義する採番属性です。GENERATED ALWAYSとBY DEFAULTで明示値の扱いが違い、BY DEFAULTでは値を指定したINSERTもあり得ます。表名や列名がidであることだけではIDENTITYとは判断できません。
シーケンス:シーケンスオブジェクトとしてテーブルとは独立していて、SQLで任意のタイミングで採番されるもの。ID列と違い、テーブルの列に定義するものでもないので、テーブル間で使い回すことも可能。
シーケンスの確認方法
SYSCAT.SEQUENCESカタログビューでシーケンス/別名を確認できます。次の元のSELECT *は全範囲の一覧で、独立シーケンスだけに絞っていません。下の絞り込み例も参照してください。
|
SELECT * FROM SYSCAT.SEQUENCES |
ID列の確認方法
列定義を確認するSYSCAT.COLUMNSカタログビューのIDENTITY列がYの行がIDENTITY属性を持つ列です。次の元の例はschemaを限定せず、全体から検索します。利用アカウントのカタログ参照権限を確認してください。
|
SELECT * FROM SYSCAT.COLUMNS WHERE IDENTITY = 'Y' |
SEQTYPEの値は推測ではなく、カタログの分類として読みます。
SYSCAT.SEQUENCESのSEQTYPEはSが独立シーケンス、Iがidentity sequence、Aが別名です。Iの存在は確認できますが、IDENTITYを定義した表/列の確認にはSYSCAT.COLUMNS.IDENTITYを使います。
内部にidentity sequenceがあっても、IDENTITY列とCREATE SEQUENCEで作る独立オブジェクトは同じ操作対象ではありません。内部名を推測してNEXT VALUE/ALTER/DROPの対象にせず、列の属性と独立シーケンスを分けて扱います。
指定schemaのIDENTITY列を確認するSQL
次の?へカタログに保存されている正確なschema名をバインドします。GENERATEDのAはALWAYS、DはBY DEFAULTです。ただしGENERATEDだけなら式で生成される列等もあるため、IDENTITY=Yと組み合わせます。COLNOは0始まりで、表示はschema・表・列順です。
SELECT TABSCHEMA, TABNAME, COLNO, COLNAME, IDENTITY, GENERATED
FROM SYSCAT.COLUMNS
WHERE TABSCHEMA = ?
AND IDENTITY = 'Y'
ORDER BY TABSCHEMA, TABNAME, COLNO;
独立シーケンスだけを確認するSQL
次はSEQTYPE=Sに限定し、Iの内部採番やAの別名を除外します。?は確認済みschema名です。STARTは定義上の開始値で、「最後に使われたID」や既存行の最大値ではありません。別名を含めたいときはBASE_SEQSCHEMA/BASE_SEQNAME等を対象版の資料で確認します。
SELECT SEQSCHEMA, SEQNAME, SEQTYPE,
"START", "INCREMENT", MINVALUE, MAXVALUE, "CYCLE", "CACHE"
FROM SYSCAT.SEQUENCES
WHERE SEQSCHEMA = ?
AND SEQTYPE = 'S'
ORDER BY SEQSCHEMA, SEQNAME;
NEXTCACHEFIRSTVALUEは次のキャッシュ範囲等の管理値で、直近のINSERTのIDと同一視できません。また、NEXT VALUE FORは値を消費する式で、現在値を見るためだけの読取ではありません。この一覧の確認のために採番・再起動・RESTART・DROP/CREATEを実行しないでください。
IDENTITY・シーケンス・一意制約の違い
| 項目 | IDENTITY列 | 独立シーケンス |
|---|---|---|
| 定義対象 | 表の特定の列 | schema内の独立オブジェクト |
| 利用方法 | INSERTと列の生成属性に従う | NEXT VALUE FOR等で値を取得して利用 |
| 主な確認先 | SYSCAT.COLUMNS.IDENTITY/GENERATED | SYSCAT.SEQUENCES、SEQTYPE=S |
| 行の一意性 | 採番とは別にPRIMARY KEY/UNIQUE等で要件を定義。明示値・RESTART・CYCLE等も考慮 | |
| 欠番なし | 保証しない。rollback、消費後の失敗、cache/障害等を考慮 | |
採番した値が残らず欠番になっても、その数字を再利用すべきとは限りません。NO CACHEにすればすべての欠番が消えるわけでも、ORDERにすればCOMMIT順/業務の処理順になるわけでもありません。請求番号等の業務連番は、監査・取消・再実行・並行処理を含む別要件として設計します。
採番済みIDと定義の照会を混同しない
INSERTが割り当てたIDは、同じ接続と対象のドライバーでgenerated keys等の返却方法を検討します。Db2のSELECT FROM INSERTによる取得やIDENTITY_VAL_LOCALもありますが、後者は同一処理レベルの単一行VALUES INSERT等の条件があり、複数行INSERTのID一覧を返す関数ではありません。接続プールで別接続に切り替えて同じ値を期待しないでください。
MAX(id)+1は並行処理が同じ候補を選び得るため、安全な採番の代わりになりません。定義変更や移行で開始値を合わせる場合も、他接続の採番・既存値・増減方向/範囲・明示値を確認し、運用停止や復旧を含めて計画します。この確認記事はリセット手順ではありません。
0件だったときの確認順
- 接続先DBと製品版が想定通りかを確認する。LUW、z/OS、iで同じカタログ/型名を前提にしない。
- 通常識別子と引用識別子を分け、正確なschema名を確認する。schema名は必ずしもログイン名ではない。
- 列名がidでもIDENTITY=Nなら、アプリ採番やトリガー等の別方式を確認する。SEQTYPE=Sの0件からIDENTITY列もないとは判断しない。
- カタログ参照とシーケンス利用/実データ参照の権限を分ける。確認のためにPUBLICへ広い権限を付けない。
関連と公式資料
schemaごとの列定義一覧 / 自動採番の記事(旧コードのリセット/上書き等は別途対象版・前提を確認)。元の関連導線である@Id、@GeneratedValue、No identifier specified for entity、Incorrect column specifier for column 'カラム名'はORM/他製品の別テーマとして保持します。
公式:列の属性 / SEQTYPEと管理値 / 方式の違い / シーケンスの値の消費 / IDENTITY_VAL_LOCALの条件。
対象範囲と検証
主にDb2 LUWを対象とし、2026年10月に公式資料と照合しました。元のDb2版のコードと情報を回復し、別製品へ置換されていた版も履歴に保持しています。追加SQLの条件・順序等はメモリ内の合成データで確認しましたが、Db2実機の構文/権限/ロック/負荷・全構成での変更成功を検証したものではありません。Db2親ページの子ページから選択してください。
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09