資料庫層級核心指令
| 指令 | 功能 | 使用場景 | 範例 |
SELECT DATABASE(); | 顯示當前選中的資料庫 | 確認連線上下文 | 返回 mydb 或 NULL |
SHOW DATABASES; | 列出所有資料庫 | 權限審計、環境確認 | 顯示 information_schema, mysql, test, mydb |
USE db_name; | 切換預設資料庫 | 每個 Session 操作前必執行 | USE production_db; |
CREATE DATABASE db_name CHARSET utf8mb4; | 建立新資料庫 | 專案初始化 | 指定字元集避免亂碼 |
DROP DATABASE db_name; | 刪除資料庫 (慎用!) | 環境清理 | 不可逆操作,無確認提示 |
資料表層級核心指令
| 指令 | 功能 | 關鍵參數 | 實戰範例 |
SHOW TABLES; | 列出當前庫所有表 | LIKE 'prefix_%' 過濾 | SHOW TABLES LIKE 'order_%'; |
DESCRIBE tbl_name; / SHOW COLUMNS FROM tbl_name; | 查看表結構 (欄位、型別、鍵、預設值) | DESC user; | 欄位 Field, Type, Null, Key, Default, Extra |
SHOW CREATE TABLE tbl_name; | 顯示建表完整 SQL | 含索引、引擎、字元集 | 遷移/備份/文檔化必備 |
SHOW INDEX FROM tbl_name; | 查看索引詳情 | Key_name, Seq_in_index, Cardinality | 分析索引選擇性、發現重複索引 |
SHOW TABLE STATUS LIKE 'tbl_name'; | 表級統計資訊 | Rows, Data_length, Index_length, Auto_increment | 容量規劃、碎片檢測 |
進階組合查詢技巧
1. 獲取所有表大小排名
SELECT TABLE_NAME,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS 'Size_MB',
TABLE_ROWS
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_db'
ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC;
2. 找出無主鍵的表
SELECT TABLE_NAME
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_db'
AND TABLE_TYPE = 'BASE TABLE'
AND TABLE_NAME NOT IN (
SELECT TABLE_NAME FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_SCHEMA = 'your_db'
);
3. 批量查看表結構 (Shell 一行流)
mysql -uroot -p -e "USE your_db; SHOW TABLES;" -s -N | xargs -I{} mysql -uroot -p -e "DESC your_db.{};"
新手避坑指南
- 分號結尾:所有 SQL 陳述式必須以
; 或 \g 結束。
- 大小寫不敏感:關鍵字大小寫皆可,但建議關鍵字大寫、識別子小寫。
- 反引號保護:表名、欄位名建議用
` 包裹,防止保留字衝突:SELECT `select` FROM `order`;
- 權限最小化:日常操作使用具備特定庫權限的帳號,避免直接用 root。
- 資訊庫:
information_schema 是元數據查詢的權威來源,善用它替代 SHOW 指令進行程式化查詢。
熟練掌握這 7+ 核心指令與組合查詢模式,能讓你在 MySQL 日常運維、開發除錯、架構審查中游刃有餘,是 DBA 與後端工程師的必修基本功。