◀ 4.

Db2のテーブル定義確認|DESCRIBE・カラム・主キーと索引

▶

Db2の記事として内容を修復しました。Db2 LUWの表定義はDESCRIBEとカタログで確認します。カラム・索引・主キー制約は別の情報で、MySQLのDESC/SHOW FULL COLUMNSの解説ではありません。

Db2の対象環境・使用する入口・取得結果と変更操作を分けて確認する図

この記事の要点
  • DB2 でテーブル定義(カラム・型・NULL 許容・主キー)を確認する方法
  • 基本: db2 => describe table table_name で一覧表示
  • インデックス込み: describe indexes for table table_name show detail
  • 細かい情報はシステムカタログ SYSCAT.COLUMNS、主キーはSYSCAT.TABCONSTとSYSCAT.KEYCOLUSEの結合 を SELECT

 

本稿はDB2のテーブル定義を確認する方法を説明します。テーブルのカラム構造、データ型、NULL許容、デフォルト値、主キー等を一覧化したいときに使います。

1. describe コマンドで確認する

もっとも簡単な方法です。DBに接続し、対話モード(CLP)で以下のコマンドを実行します。

db2 => describe table table_name

カラム名・データ型・長さ・NULL許容などが表示されます。スキーマが必要な場合は schema.table_name の形式で指定します。

2. インデックス情報も確認する

db2 => describe indexes for table table_name show detail

索引を確認します。索引の一覧と主キー/UNIQUE/外部キー/CHECK等の制約一覧を同じものとして扱わず、必要な制約はカタログで別に照合します。

3. システムカタログから取得する

SQLでより細かい情報が欲しい場合は SYSCAT.COLUMNS を直接見ます。

SELECT COLNAME, TYPENAME, LENGTH, SCALE, NULLS, DEFAULT
FROM SYSCAT.COLUMNS
WHERE TABSCHEMA = 'SCHEMA'
  AND TABNAME = 'TABLE_NAME'
ORDER BY COLNO;

以下は旧KEYCOLUSE単独の例です。主キー専用ではなく、他のキー制約も含み得ます。主キーだけが必要なら下のTABCONSTとの結合でTYPE = Pを指定する訂正版を使います。

SELECT CONSTNAME, COLNAME, COLSEQ
FROM SYSCAT.KEYCOLUSE
WHERE TABSCHEMA = 'SCHEMA'
  AND TABNAME = 'TABLE_NAME'
ORDER BY COLSEQ;

4. テーブル一覧を確認する

そもそも対象テーブル名がわからないときは、まずスキーマ内のテーブル一覧を確認します。

db2 => list tables for schema SCHEMA

関連コマンド

コマンド/ビュー用途
describe table TABLEカラム構造の一覧表示
describe indexes for table TABLE show detailインデックス一覧
list tables for schema SCHEMAスキーマ内テーブル一覧
SYSCAT.COLUMNS全カラムのメタ情報を持つシステムビュー
SYSCAT.KEYCOLUSE主キー・UNIQUE・外部キーの構成列。主キーだけならTABCONSTで絞る
SYSCAT.TABLESテーブル一覧(テーブル種別含む)

注意点

  • 通常識別子の大文字変換と、区切り識別子の大小文字を区別し、カタログの値に合わせる。スキーマ名/表名の文字列条件を一律に大文字へ変えない
  • スキーマを省略すると現在の CURRENT SCHEMA が使われる。意図したテーブルが見つからない場合はスキーマを明示する
  • describe table はCLP用コマンド。アプリケーションからSQLで取得したいときは SYSCAT.COLUMNS を使う

主キーだけを確認するSQL

以下の2個の?には、実在するスキーマ名と表名を順にバインドします。CLPへ?付きで貼り付ける完成コマンドではありません。制約名だけで結合せず、スキーマと表も照合します。

SELECT k.CONSTNAME, k.COLNAME, k.COLSEQ
FROM SYSCAT.TABCONST AS c
JOIN SYSCAT.KEYCOLUSE AS k
  ON k.TABSCHEMA = c.TABSCHEMA
 AND k.TABNAME = c.TABNAME
 AND k.CONSTNAME = c.CONSTNAME
WHERE c.TYPE = 'P'
  AND c.TABSCHEMA = ?
  AND c.TABNAME = ?
ORDER BY k.CONSTNAME, k.COLSEQ;

主キーが複合ならCOLSEQで列順を確認します。0件ならスキーマ/表名・権限・制約の有無を分けて調べ、その場で主キーを作成しません。カラムのNULL許容・デフォルト・生成列や制約の詳細も、DESCRIBEの一画面だけで完全なDDLが分かったと判断しないでください。

公式のDESCRIBEの用途と必要権限、TABCONSTとKEYCOLUSEを照合してください。SHOW DETAILで追加権限が必要な場合もあり、管理者権限の全面付与を初手にしません。

次に確認する内容

テーブル一覧で対象を確かめ、DDLが必要ならdb2lookによる抽出へ進みます。カラム変更や表スペースの変更は読み取り確認とは別作業です。

アプリケーション側の利用例はJdbcTemplateでのDB接続設定と値の取得を参照してください。CLPのDESCRIBEをそのままSQLとして送る手順とは分けます。

対象と確認範囲

対象はDb2 LUWです。i/zOS、別DB製品や別クライアントの構文へ無条件に転用しません。2026年10月に公式資料と照合し、元のDb2版の操作例/リンクを回復しました。誤って置き換わった他DBの解説は削除せず過去版に保持しています。Db2実機での認証/権限/全OSの動作を検証したものではありません。関連項目はDB2親ページの子ページから選択してください。

子ページ

子ページはありません

同階層のページ
  1. DB接続コマンド
  2. データベース一覧の確認
  3. テーブル一覧の確認
  4. テーブル定義の確認
  5. DBの設定確認
  6. テーブルスペースの容量の確認および拡張
  7. データ型
  8. 複数カラムのUPDATE
  9. カラムの追加/削除/変更
  10. 自動番号付け (autoincrement) する方法
  11. インデックスの作成
  12. シーケンスおよびインクリメント(ID列)の違いと確認方法
  13. create table文の生成
  14. 特定スキーマの全テーブルの全カラム情報を取得する方法
  15. 【DB2】エラー一覧
  16. 【DB2】テーブル定義からCREATE TABLE文を生成する方法

最近更新/作成されたページ