テーブル定義を表示することと、復旧することは別
本記事はMySQL / MariaDBのコマンド一覧の子ページです。対象が不明ならテーブル一覧を表示から確認し、SQLでの抽出はメタデータ親ページ、列の詳細はその子のカラム定義の確認へ進めます。親や製品を移動せず、それぞれの目的を分けています。
2026-10-26にMySQL8.4.13 / MariaDB11.8.9-ubu2404で確認した範囲です。画面の表示名や他DBの旧比較は残しますが、全GUI/全版/全負荷の検証や、本番へのDDL/dump実行をした意味ではありません。
1. 新規検体で表示項目を比較する
次の準備は新しく作成した空のcwiki_w28データベースだけに実行します。既存の同名表へ流さず、実データを転載せず、教材のために本番へ作成権限を追加しません。単純列だけでなく複合UNIQUE・生成列・既定値の違いと複合FKを用意しています。
-- New disposable database cwiki_w28 only. No existing tables or data.
CREATE TABLE cwiki_w28.users (
id INT UNSIGNED NOT NULL PRIMARY KEY,
email VARCHAR(40) NOT NULL COMMENT 'review email',
display_name VARCHAR(20) NULL DEFAULT NULL,
no_default VARCHAR(20) NOT NULL,
blank_default VARCHAR(20) NOT NULL DEFAULT '',
generated_length INT GENERATED ALWAYS AS (CHAR_LENGTH(email)) STORED,
UNIQUE KEY uq_email_id (email,id),
KEY idx_display (display_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO cwiki_w28.users (id,email,display_name,no_default)
VALUES (1,'a@example.invalid',NULL,'keep A'),(2,'b@example.invalid','B','keep B');
CREATE TABLE cwiki_w28.parents (
tenant_id INT NOT NULL,
code INT NOT NULL,
PRIMARY KEY (tenant_id,code)
) ENGINE=InnoDB;
CREATE TABLE cwiki_w28.children (
id INT PRIMARY KEY,
tenant_id INT,
parent_code INT,
CONSTRAINT fk_parent_pair FOREIGN KEY (tenant_id,parent_code)
REFERENCES cwiki_w28.parents (tenant_id,code)
) ENGINE=InnoDB;
接続先/製品/権限を確認したうえで、この検体の表示を比較します。
SHOW FULL COLUMNS FROM cwiki_w28.users;
SHOW CREATE TABLE cwiki_w28.users;
SHOW FULL COLUMNSは列の情報で、索引の全列順や別オブジェクトの定義を全て示すものではありません。DefaultがNULLでも「DEFAULT NULLが明示された列」と「既定値のないNOT NULL列」を同じと判断せず、SHOW CREATEの定義とNULL許容を合わせます。検体のdisplay_name/no_defaultはどちらも表示上のDefaultがNULL、blank_defaultは空文字でした。
列権限をid/emailだけに限定した別接続は、SHOW FULL COLUMNSで2列だけが見え、SHOW CREATE TABLEは1142で拒否されました。列が見えることと表の完全な定義を取得できることは別です。拒否された照会を通すために本番権限を拡大しません。
2. SHOW CREATEの出力に含まれないものを確認する
検体には2行と別のtriggerを作りましたが、SHOW CREATE TABLEの出力には行の値もCREATE TRIGGERも含まれませんでした。1表の表示だけで全データ・trigger/view・権限・参照元・依存・環境設定まで復元できるわけではありません。元のCREATE入力の書式とも一致するとは限らず、CHECK等の表示方法や製品/設定差も確認します。SQLだけでなく接続先の版/engine/条件も記録します。
表示をそのまま実表へCREATEし直す手順には進めません。復旧用途なら対象・依存/行・権限/秘密情報・整合した取得条件・復元先・実際の復元試験を別に設計します。今回の照会成功は本番backupや完全復旧の演習結果ではありません。
3. dumpとスクリプト出力の範囲を決める
旧章のmysqldump -d/--no-dataは行を出力しない指定で、全オブジェクト/権限まで自動的に含むという意味ではありません。routines/events/trigger等の選択、対応製品/クライアント版、取得時のlock/整合性と必要権限も調べます。root指定を標準の準備にせず、既存ファイルへのリダイレクト上書きや、出力されたDROP/CREATE/SETの実行にも注意します。今回は旧dumpコマンド/全GUIの実行は未検証です。
DDLをGitへ置く場合も、内部名/DEFINER/接続情報や行データ混入、環境固有差を点検します。migrationや生成物のどれを正本とするかは既存運用から決め、差分を見つけただけでmigrate/import/表の作り直しを実行しません。CWiki自体ではmigrateを実行しません。
| この記事の要点 |
|
DESC — 簡易に列定義を見る
旧例の注意:出力は例です。Key/Defaultは要約で、生成列/複合キー/権限による欠落を別に照合します。
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 | データ型(長さ・符号付き有無含む) |
| Null | NULL 許可(YES/NO) |
| Key | Keyは要約表示。複合UNIQUEでもMUL、NOT NULL UNIQUEがPRIとなる条件等があり、全索引/制約を別途照合 |
| Default | 表示上の既定値。NULLはDEFAULT NULLと既定句なしを区別できない場合がある |
| Extra | auto_increment / on update CURRENT_TIMESTAMP / VIRTUAL GENERATED 等 |
SHOW COLUMNS — DESC と同じ
旧例の注意:対象DB/表/可視列とFULL/LIKEの条件を確認し、どのクライアントにも同じ表示を保証しません。
SHOW COLUMNS FROM users;
SHOW FULL COLUMNS FROM users; -- 照合順序・コメント等も
SHOW COLUMNS FROM users LIKE 'email%';
SHOW COLUMNS FROM myapp.users; -- 別 DB
SHOW CREATE TABLE — 出力と確認範囲
対象表のCREATE定義を表示します。元入力の書式や行/trigger/権限/全依存の復旧は保証しません:
旧例の注意:\Gはmysql系クライアントの表示指定です。出力に行/trigger/全依存は含まれず、実表へ再作成する案内ではありません。
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 を使います:
旧例の注意:型の文字数/符号/照合・生成式と可視範囲を確認します。除外DB条件だけでは対象を十分限定できない場合があり、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と制約を分け、FKは参照schema/複合列順も照合します。この旧例だけで全制約を把握したと扱いません。
-- インデックス一覧
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 で定義のみ出力
旧例の注意:未実行の旧dump例です。rootを準備の既定にせず、版/権限/lock/整合性/出力範囲を確認します。リダイレクトは既存ファイルを上書きし、出力のDROP等を実環境へ自動実行しません。
# -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 ツール
以下は既存の画面操作の案内です。版/表示言語/権限で異なり、今回全GUIでの再現は未検証です。
- phpMyAdmin: テーブルを選択 → 「構造」タブ
- DBeaver: テーブル右クリック → Properties / DDL タブ
- MySQL Workbench: 右クリック → Send to SQL Editor → Create Statement
- HeidiSQL: テーブル右クリック → Show CREATE code
- TablePlus: テーブルをダブルクリック → Structure
他 DBMS での同等操作
| DBMS | 列定義 | DDL/定義の確認(取得範囲も確認) |
|---|---|---|
| MySQL | DESC tbl | SHOW CREATE TABLE tbl |
| PostgreSQL (psql) | \d tbl | \d+ tblは表示用、DDL抽出はpg_dump -s -t tbl db等。依存の範囲も別途確認 |
| SQL Server | sp_help 'tbl' | SSMS で右クリック → Script Table as → CREATE |
| Oracle | DESC tbl | DBMS_METADATA.GET_DDL('TABLE','TBL') |
| SQLite | .schema tbl | SELECT 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等で確認できますが、対象名/権限とengineの条件を調べます。InnoDBのRowsやサイズは推定/観測値で、現在の正確な行数や回収可能な容量ではありません。
Q: DDL を Git にコミットしたい
A: 出力対象/秘密情報/環境固有差と実際の復元条件を点検します。migration/生成物の正本は既存運用に合わせ、差分だけを理由にmigrate/importを実行しません。CWikiではmigrateを実行しません。
元の書式付き定義確認コマンド
元v5の比較表/SQLを保持します。別の一般SQLカテゴリへのリンクも製品差を確認して参照し、既存カテゴリの移動とは扱いません。元v3のテーブル一覧への導線は冒頭へ戻しました。
MariaDB / MySQL でテーブルの列構成・型・制約などのテーブル定義を確認する方法を紹介します。日々の運用で、CREATE TABLE 文を都度引っ張り出さなくても、コマンド一発で構造を確認できます。
1. もっとも簡単な方法: DESC
旧例の注意:簡易表示の例です。Key/Defaultだけで全制約やDEFAULT句の有無を断定しません。
| DESC テーブル名; -- 同義 DESCRIBE テーブル名; EXPLAIN テーブル名; |
列名・型・NULL 許可・キー・デフォルト値・Extra (AUTO_INCREMENT 等) が一覧表示されます。日常的な確認はこれで足ります。
2. より詳細に: SHOW FULL COLUMNS
権限・コメント・照合順序などまで含めて確認したい場合は SHOW FULL COLUMNS を使います。
旧例の注意:可視な列の情報です。対象schema/表/権限とクライアントの表示を確認します。
| SHOW FULL COLUMNS FROM テーブル名; |
3. CREATE 文の再現: SHOW CREATE TABLE
テーブルを再作成できる形の DDL を取得したい場合に便利です。表に含まれる定義を確認しますが、行/trigger/権限/全依存の完全復旧を保証する表示ではありません。
旧例の注意:単独のCREATE表示は行や全依存を含まず、出力を実表へ再実行する案内ではありません。
| SHOW CREATE TABLE テーブル名; |
4. インデックス・キー情報の確認
旧例の注意:索引と制約は別です。列順/一意性/長さ/式やFK依存も確認します。
| SHOW INDEX FROM テーブル名; SHOW KEYS FROM テーブル名; |
5. INFORMATION_SCHEMAでの取得
スクリプトや管理画面から取得する場合は、information_schema 内のシステムビューを SELECT すると扱いやすいです。
旧例の注意:schema/表名と列順を限定した旧読取例です。製品固有項目を全DB共通としません。
| SELECT column_name, column_type, is_nullable, column_default, column_comment FROM information_schema.columns WHERE table_schema = 'DB名' AND table_name = 'テーブル名' ORDER BY ordinal_position; |
主な確認コマンドの比較
| コマンド | 得られる情報 | 用途 |
|---|---|---|
DESC / DESCRIBE | 列名・型・NULL・キー・デフォルト・Extra | 日常的な確認 |
SHOW FULL COLUMNS | 上記+照合順序・権限・コメント | 権限・コメントも見たいとき |
SHOW CREATE TABLE | 対象表のDDL。データ/全依存のbackupとは別 | 定義のバックアップ・他環境へのコピー |
SHOW INDEX | インデックス情報のみ | 性能調査・索引確認 |
information_schema.columns | 同上をテーブルとして扱える | スクリプト・管理画面 |
関連
- 親カテゴリ: コマンド一覧 (MariaDB)
- 関連: MySQL / MariaDB / SQL
確認範囲と一次資料
新規の小規模InnoDB検体と限定した読取権限で確認した範囲です。全負荷/全権限/全製品・全GUI/旧dumpの実行・本番復旧/既存アプリの全設定を保証せず、調査のために本番設定/依存/権限を追加していません。
- MySQL8.4 SHOW COLUMNS / SHOW CREATE TABLE / STATISTICS / mysqldump
- MariaDB SHOW COLUMNS / PostgreSQL18 information schema
- Laravel13のDB確認 / Django5.2モデルのmeta / inspectdb / SQLite PRAGMA
子ページはありません
人気ページ
- 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