雖然圖形化工具普及,但命令列操作仍是 DBA 與開發者的核心技能。MySQL 的 SHOW 系列命令提供了資料庫元資料的即時視圖,掌握它們能大幅提升排錯與管理效率。本文系統整理核心顯示命令,並補充實戰場景與進階用法。
SHOW DATABASES;
-- 等價於
SHOW SCHEMAS;
進階:過濾系統庫 SHOW DATABASES LIKE 'biz_%'; 或配合 information_schema.SCHEMATA 查詢建立時間、字元集等詳細資訊。
SHOW CREATE DATABASE db_name;
輸出包含字元集、排序規則、加密設定等關鍵屬性,遷移驗證必備。
USE db_name;
SHOW TABLES;
-- 顯示表類型與引擎
SHOW FULL TABLES;
-- 過濾模式
SHOW TABLES LIKE 'order_%';
-- 基礎結構
DESC table_name;
-- 或
SHOW COLUMNS FROM table_name;
-- 完整建表語句(含索引、外鍵、分區等)
SHOW CREATE TABLE table_name;
-- 詳細欄位資訊(權限、註解等)
SHOW FULL COLUMNS FROM table_name;
SHOW INDEX FROM table_name;
-- 等價於
SHOW KEYS FROM table_name;
輸出包含索引名、唯一性、基數、索引類型(BTREE/HASH/FULLTEXT)、列順序等關鍵指標,優化 SQL 必看。
SHOW TABLE STATUS [LIKE 'pattern'];
關鍵欄位解讀:
Rows:預估行數(InnoDB 為近似值)Data_length:數據大小(位元組)Index_length:索引大小Auto_increment:下一個自增值Create_time / Update_time / Check_time:時間戳記SHOW GLOBAL STATUS;
-- 關鍵計數器
SHOW GLOBAL STATUS LIKE 'Com_%'; -- 命令執行計數
SHOW GLOBAL STATUS LIKE 'Innodb_%'; -- InnoDB 內部狀態
SHOW GLOBAL STATUS LIKE 'Qcache_%'; -- 查詢快取(5.7 移除)
SHOW GLOBAL STATUS LIKE 'Threads_%'; -- 線程狀態
SHOW GLOBAL VARIABLES;
-- 常用過濾
SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'log_bin';
SHOW VARIABLES LIKE '%char%'; -- 字元集配置
-- 當前連線進程
SHOW PROCESSLIST;
-- 完整 SQL 文本
SHOW FULL PROCESSLIST;
-- InnoDB 鎖等待(5.7+)
SELECT * FROM sys.innodb_lock_waits;
-- 當前事務
SELECT * FROM information_schema.INNODB_TRX;
-- 主庫
SHOW MASTER STATUS;
SHOW BINARY LOGS;
SHOW BINLOG EVENTS IN 'mysql-bin.000001';
-- 從庫
SHOW SLAVE STATUS\G
SHOW RELAYLOG EVENTS;
-- 當前使用者權限
SHOW GRANTS;
-- 指定使用者
SHOW GRANTS FOR 'user'@'host';
-- 所有使用者
SELECT User, Host FROM mysql.user;
SHOW PROCEDURE STATUS [LIKE 'pattern'];
SHOW FUNCTION STATUS [LIKE 'pattern'];
SHOW TRIGGERS [FROM db_name] [LIKE 'pattern'];
SHOW EVENTS [FROM db_name];
寬表資訊用 SHOW ENGINE INNODB STATUS\G 避免換行截斷,閱讀體驗大增。
-- 找出最大的 10 張表
SELECT TABLE_SCHEMA, TABLE_NAME,
ROUND((DATA_LENGTH+INDEX_LENGTH)/1024/1024,2) AS size_mb
FROM information_schema.TABLES
ORDER BY size_mb DESC LIMIT 10;
-- 找出無主鍵的表
SELECT TABLE_SCHEMA, TABLE_NAME
FROM information_schema.TABLES
WHERE TABLE_SCHEMA NOT IN ('mysql','sys','information_schema','performance_schema')
AND TABLE_TYPE='BASE TABLE'
AND TABLE_NAME NOT IN (
SELECT TABLE_NAME FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE='PRIMARY KEY'
);
SHOW CREATE TABLE 包含隱藏列資訊SHOW GRANTS 支援角色顯示MySQL 顯示命令是洞察資料庫內部狀態的「X 光機」。熟練掌握 SHOW DATABASES/TABLES/COLUMNS/INDEX/STATUS/VARIABLES/PROCESSLIST/SLAVE STATUS 等核心命令,並善用 information_schema 與 sys schema 進行二次查詢,能讓你在故障排查、效能調優、架構變更等場景中游刃有餘。建議收藏備查,實戰中肌肉記憶最靠譜。