開發調試、Schema 變更審核、數據字典生成都需要快速獲取表結構。MySQL 提供多種等效命令,本文對比其輸出差異、適用場景與進階用法。
| 命令 | 別名 | 輸出重點 | 典型場景 |
|---|---|---|---|
DESC table_name | DESCRIBE、EXPLAIN(表名) | 列名、類型、NULL、Key、Default、Extra | 快速查看列定義、索引情況 |
SHOW COLUMNS FROM table_name | SHOW FIELDS | 同 DESC,可加 LIKE 'pattern' | 腳本篩選特定前綴列 |
SHOW CREATE TABLE table_name | — | 完整建表 DDL(含引擎、字符集、分區、外鍵、索引定義) | Schema 同步、版本對比、文檔生成 |
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(50) | NO | UNI | NULL | |
| email | varchar(100)| YES | MUL | NULL | |
| status | tinyint(1) | NO | | 1 | |
| created | timestamp | NO | | CURRENT_TIMESTAMP | |
+----------+-------------+------+-----+---------+----------------+
YES 允許 NULL,NO 非空PRI 主鍵、UNI 唯一索引、MUL 普通索引(非唯一)、空=無索引NULL 表示無顯式默認值auto_increment、on update CURRENT_TIMESTAMP、VIRTUAL GENERATED 等SHOW COLUMNS FROM users LIKE 'user_%';
SHOW CREATE TABLE orders\G
-- 輸出包含:
-- ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
-- PARTITION BY RANGE (YEAR(created)) ...
-- CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id) ...
SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH,
NUMERIC_PRECISION, NUMERIC_SCALE, IS_NULLABLE,
COLUMN_DEFAULT, COLUMN_KEY, EXTRA, COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'table_name'
ORDER BY ORDINAL_POSITION;
信息模式適合工具開發、自動化文檔生成、Schema Diff 對比。
SHOW TABLE STATUS LIKE 'table_name'\G
-- 關鍵字段:
-- Engine, Row_format, Rows, Avg_row_length, Data_length, Index_length, Auto_increment, Create_time
SHOW CREATE TABLE 或查 INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTSTIMESTAMP 默認 CURRENT_TIMESTAMP 在 5.6+ 可能不顯示DESC 適合人工快速查看;SHOW COLUMNS LIKE 適合腳本篩選;SHOW CREATE TABLE 獲取完整 DDL 用於遷移/審核;INFORMATION_SCHEMA 適合程序化處理。掌握四者組合拳,覆蓋 99% 表結構查詢場景。