| この記事の要点 |
|
information_schema.columns とは
information_schema は MySQL / MariaDB が標準で持つメタデータ用データベースで、サーバ上のすべてのデータベース・テーブル・カラム・インデックスなどの情報を SQL で参照できるようにしたものです。その中の columns ビューにはすべてのカラム情報が 1 行 1 カラムの形で格納されています。
基本クエリ
特定のスキーマ(データベース)に絞って全カラムを取得する最小クエリです。
SELECT *
FROM information_schema.columns
WHERE table_schema = 'スキーマ名';
table_schema はデータベース名と同義です(MySQL では「スキーマ」と「データベース」は同じ意味)。
よく使う列の絞り込み
SELECT * だと 20 列以上返ってくるので、実務では必要な列だけ取り出すのが一般的です。
SELECT
table_name,
column_name,
column_type,
is_nullable,
column_default,
column_comment
FROM information_schema.columns
WHERE table_schema = 'mydb'
ORDER BY table_name, ordinal_position;
information_schema.columns の主な列
| 列名 | 内容 |
|---|---|
table_schema | データベース名 |
table_name | テーブル名 |
column_name | カラム名 |
ordinal_position | カラムの並び順(1 始まり) |
column_default | デフォルト値 |
is_nullable | NULL 可かどうか(YES / NO) |
data_type | 型のみ(int / varchar など) |
column_type | 型 + 長さ + UNSIGNED など完全な表記 |
character_maximum_length | 文字列型の最大長 |
numeric_precision / numeric_scale | 数値型の桁数 |
column_key | PRI / UNI / MUL(インデックス種別) |
extra | auto_increment などの補足 |
column_comment | カラムコメント |
実務でよくあるパターン
1. NULL 許可カラムだけを一覧
SELECT table_name, column_name
FROM information_schema.columns
WHERE table_schema = 'mydb'
AND is_nullable = 'YES';
2. 特定の型を使っているカラムを洗い出す
-- TEXT / BLOB を使っているカラム
SELECT table_name, column_name, column_type
FROM information_schema.columns
WHERE table_schema = 'mydb'
AND data_type IN ('text','mediumtext','longtext','blob');
3. コメント未設定のカラムを抽出
SELECT table_name, column_name
FROM information_schema.columns
WHERE table_schema = 'mydb'
AND (column_comment IS NULL OR column_comment = '');
4. 同じカラム名がどのテーブルに存在するか
SELECT table_name
FROM information_schema.columns
WHERE table_schema = 'mydb'
AND column_name = 'user_id';
SHOW COLUMNS との違い
| 項目 | SHOW COLUMNS | information_schema.columns |
|---|---|---|
| 対象範囲 | 1 テーブルのみ | サーバ全体・複数テーブル横断 |
| WHERE 句 | 不可(簡易フィルタのみ) | SQL の WHERE で自由に絞り込み |
| JOIN | 不可 | 他テーブルと JOIN 可能 |
| 用途 | 対話的な確認 | 調査・スキャン・ドキュメント生成 |
注意点
- 権限:
information_schemaはユーザが見える範囲(GRANT されたオブジェクト)しか返さない - 大文字小文字:
table_schemaは OS によって大文字小文字を区別する場合がある(lower_case_table_names 設定に依存) - パフォーマンス: 全テーブルスキャンに近い動きをするため、本番稼働中の DB で多用しない
ドキュメント生成への応用
取得結果を Markdown 表に整形すれば、ER 図や設計書のカラム一覧ドキュメントとして再利用できます。MySQL CLI の --batch オプションでタブ区切り出力に切り替えると整形が楽です。
mysql -u root -p --batch -e "
SELECT table_name, column_name, column_type,
IF(is_nullable='YES','可','不可') AS null_ok,
IFNULL(column_comment,'') AS comment
FROM information_schema.columns
WHERE table_schema = 'mydb'
ORDER BY table_name, ordinal_position
" > mydb_columns.tsv
TSV を awk や Python で読んでテーブル単位の Markdown を吐き出せば、CI で「最新スキーマの設計書」を自動更新できます。
命名規則チェックの例
命名規則違反(例: snake_case 統一なのに camelCase が混入)を一発で検出できます。
-- 大文字を含むカラム名(snake_case 違反)
SELECT table_name, column_name
FROM information_schema.columns
WHERE table_schema = 'mydb'
AND BINARY column_name REGEXP '[A-Z]';
関連
- MySQL & MariaDB — 親カテゴリ
- SELECT文 — 取得 SQL の基本
- WHERE句 — 絞り込み条件
- SHOW COLUMNS / DESCRIBE — 単一テーブルのカラム表示
- information_schema.tables — テーブル一覧
子ページ
子ページはありません
同階層のページ
- ダウンロード&インストール方法(Windows)
- インストール方法(Linux)
- コマンド一覧
- SQL
- データ型
- 関数
- 管理ツール
- 設定
- パフォーマンスチューニング関連
- エクスポートおよびインポート
- エラー&トラブル
- 文字コードの確認
- 実行中の SQL の状態確認およびプロセスキルの方法
- パスワードの無効化設定
- root ユーザーの初期パスワード確認方法
- rootユーザーのパスワード変更方法
- LIMIT, OFFSET の始まりと挙動
- mysqlのバージョン確認方法
- MySQLで実行計画を表示する方法
- レプリケーションのステータス確認方法
- 中央値の導き方(バージョン8未満)
- 階層SQL(バージョン8未満)
- パーセンタイルの導き方
- 特定スキーマの全テーブルの全カラム情報を取得する方法
人気ページ
- 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 / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38