7.

MySQL テーブル定義の確認方法完全ガイド

編集
この記事の要点
  • DESC tablename; が一番手軽。列名・型・NULL 可否・キー・デフォルト・Extra が見える
  • SHOW CREATE TABLE tablename;復元可能な DDLを返す。バックアップ・移行に最適
  • information_schema.COLUMNS を直接 SELECT すれば、メタ情報を WHERE で絞れる
  • mysqldump -d database table定義のみ出力。-d = no-data
  • PostgreSQL は \d+ tablename (psql) / SQL Server は sp_help "tablename"
  • インデックスSHOW INDEX FROM tablename で別途確認

DESC — 最速で列定義を見る

DESC users;
-- または DESCRIBE users;
-- または EXPLAIN users;
-- +------------+--------------+------+-----+-------------------+----------------+
-- | Field      | Type         | Null | Key | Default           | Extra          |
-- +------------+--------------+------+-----+-------------------+----------------+
-- | id         | bigint       | NO   | PRI | NULL              | auto_increment |
-- | name       | varchar(255) | NO   |     | NULL              |                |
-- | email      | varchar(255) | NO   | UNI | NULL              |                |
-- | created_at | datetime     | NO   |     | CURRENT_TIMESTAMP |                |
-- +------------+--------------+------+-----+-------------------+----------------+
意味
Field列名
Typeデータ型(長さ・符号付き有無含む)
NullNULL 許可(YES/NO)
KeyPRI=主キー / UNI=ユニーク / MUL=非ユニークインデックスの先頭
Defaultデフォルト値
Extraauto_increment / on update CURRENT_TIMESTAMP / VIRTUAL GENERATED 等

SHOW COLUMNS — DESC と同じ

SHOW COLUMNS FROM users;
SHOW FULL COLUMNS FROM users;        -- 照合順序・コメント等も
SHOW COLUMNS FROM users LIKE 'email%';
SHOW COLUMNS FROM myapp.users;       -- 別 DB

SHOW CREATE TABLE — 完全な DDL

復元可能な CREATE TABLE 文を取得できます。移行・バックアップに使えます:

SHOW CREATE TABLE users\G
-- *************************** 1. row ***************************
--        Table: users
-- Create Table: CREATE TABLE `users` (
--   `id` bigint unsigned NOT NULL AUTO_INCREMENT,
--   `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
--   `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
--   `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
--   PRIMARY KEY (`id`),
--   UNIQUE KEY `users_email_unique` (`email`),
--   KEY `users_created_at_index` (`created_at`)
-- ) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

使いどころ: 「本番と staging の定義差分」「テストデータ環境の再現」「ORM が生成した DDL の確認」。

information_schema を直接 SELECT

プログラムからメタ情報を取得したい場合や、複雑な条件で絞り込みたい場合は information_schema を使います:

-- テーブルの全列定義
SELECT column_name, column_type, is_nullable, column_default, column_key, extra, column_comment
FROM information_schema.COLUMNS
WHERE table_schema = 'myapp' AND table_name = 'users'
ORDER BY ordinal_position;

-- 「全テーブルの中で created_at という列を持つテーブル」を探す
SELECT table_schema, table_name
FROM information_schema.COLUMNS
WHERE column_name = 'created_at' AND table_schema NOT IN ('mysql','sys','information_schema');

-- VARCHAR(255) 以上の列を一覧(型変更影響調査)
SELECT table_name, column_name, column_type
FROM information_schema.COLUMNS
WHERE table_schema = 'myapp'
  AND data_type = 'varchar' AND character_maximum_length >= 255;

インデックス・キー制約の確認

-- インデックス一覧
SHOW INDEX FROM users;
-- +-------+------------+--------------------+--------------+-------------+
-- | Table | Non_unique | Key_name           | Seq_in_index | Column_name |
-- +-------+------------+--------------------+--------------+-------------+
-- | users |          0 | PRIMARY            |            1 | id          |
-- | users |          0 | users_email_unique |            1 | email       |

-- 外部キー制約
SELECT constraint_name, table_name, column_name, referenced_table_name, referenced_column_name
FROM information_schema.KEY_COLUMN_USAGE
WHERE table_schema = 'myapp' AND referenced_table_name IS NOT NULL;

mysqldump で定義のみ出力

# -d / --no-data: データ無し、定義のみ
mysqldump -uroot -p -d myapp > schema.sql

# 特定テーブルだけ
mysqldump -uroot -p -d myapp users orders > users_orders_schema.sql

# テーブル定義 + 既存データの SQL
mysqldump -uroot -p myapp users > users_full.sql

# DROP TABLE 文も含めない
mysqldump -uroot -p -d --skip-add-drop-table myapp > schema_clean.sql

# ストアドプロシージャ・トリガ・ビューも含める
mysqldump -uroot -p -d --routines --triggers --events myapp > full_schema.sql

GUI ツール

  • phpMyAdmin: テーブルを選択 → 「構造」タブ
  • DBeaver: テーブル右クリック → Properties / DDL タブ
  • MySQL Workbench: 右クリック → Send to SQL Editor → Create Statement
  • HeidiSQL: テーブル右クリック → Show CREATE code
  • TablePlus: テーブルをダブルクリック → Structure

他 DBMS での同等操作

DBMS列定義完全 DDL
MySQLDESC tblSHOW CREATE TABLE tbl
PostgreSQL (psql)\d tbl\d+ tbl / pg_dump -s -t tbl db
SQL Serversp_help 'tbl'SSMS で右クリック → Script Table as → CREATE
OracleDESC tblDBMS_METADATA.GET_DDL('TABLE','TBL')
SQLite.schema tblSELECT sql FROM sqlite_master WHERE name='tbl'

FAQ

Q: 列のコメント (COMMENT) も見たい
A: SHOW FULL COLUMNS FROM tbl; または information_schema.COLUMNS.column_comment

Q: テーブルのコメント・エンジン・行数を確認
A: SHOW TABLE STATUS LIKE 'tbl'; で Engine / Rows / Data_length / Comment が一覧できる。

Q: DDL を Git にコミットしたい
A: mysqldump -d 出力を整形して保存。Laravel / Rails ならマイグレーションを正本にして、定期的に schema dump で同期確認。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. MySQLの起動(Windows)
  2. MySQLの起動、停止、再起動(Linux)
  3. MYSQL への接続
  4. データベース一覧の表示
  5. データベースへの接続
  6. テーブル一覧を表示
  7. テーブル定義を確認
  8. ユーザーおよびパスワード一覧の確認