資料庫日常維護中,檢查表結構、狀態與清空資料是高頻操作。本文系統整理 MySQL 客戶端常用檢查指令,並提供多種清空資料表的實戰方案。
mysql> SELECT DATABASE(); -- 目前使用的資料庫 mysql> STATUS; -- 連線狀態總覽 mysql> SHOW DATABASES; -- 所有資料庫列表 mysql> USE database_name; -- 切換資料庫 mysql> SHOW TABLES; -- 目前資料庫所有表 mysql> SHOW TABLES FROM db_name; -- 指定資料庫的表(不切換)
DESC table_name; DESCRIBE table_name; SHOW COLUMNS FROM table_name; SHOW CREATE TABLE table_name; -- 含建表完整 SQL
USE information_schema; SELECT * FROM COLUMNS WHERE TABLE_NAME = 'table_name' AND TABLE_SCHEMA = 'db_name';
mysql> SHOW WARNINGS; -- 輸出範例: -- +---------+------+-------------------------------------------+ -- | Level | Code | Message | -- +---------+------+-------------------------------------------+ -- | Warning | 1265 | Data truncated for column 'name' at row 3 | -- +---------+------+-------------------------------------------+
# 1. 僅匯出結構 mysqldump --no-data -u root -p db_name > schema.sql # 2. 刪除並重建資料庫 mysql -u root -p -e "DROP DATABASE db_name; CREATE DATABASE db_name;" # 3. 匯入結構 mysql -u root -p db_name < schema.sql
優點:徹底釋放空間、重建索引統計資訊。缺點:需離線操作、權限較高。
# 產生清空指定資料庫所有表的 SQL
mysql -N -s information_schema -e "SELECT CONCAT('TRUNCATE TABLE ', TABLE_NAME, ';') FROM TABLES WHERE TABLE_SCHEMA='db_name'"
# 輸出範例:
# TRUNCATE TABLE table1;
# TRUNCATE TABLE table2;
# ...
mysql -N -s information_schema -e "SELECT CONCAT('TRUNCATE TABLE ', TABLE_NAME, ';') FROM TABLES WHERE TABLE_SCHEMA='db_name'" | mysql -f db_name
-N:不輸出欄位名-s:靜默模式(無表格框線)-f:強制繼續執行(忽略外鍵錯誤)外鍵處理:若有外鍵關係,單次執行可能因順序問題報錯。多執行幾次直到無錯誤,或先停用外鍵檢查:
SET FOREIGN_KEY_CHECKS = 0; -- 執行 TRUNCATE 批次 SET FOREIGN_KEY_CHECKS = 1;
TRUNCATE TABLE table_name; -- 重建表,釋放空間,自增歸零,不可回滾 DELETE FROM table_name; -- 逐行刪除,可回滾,不重置自增,觸發器生效 DELETE FROM table_name WHERE id > 100; -- 條件刪除
| 特性 | TRUNCATE | DELETE |
|---|---|---|
| 速度 | 極快(DDL,重建表) | 較慢(DML,逐行) |
| 事務/回滾 | 不支援(隱含提交) | 支援 |
| 自增計數器 | 重置為 1 | 保留 |
| 觸發器 | 不觸發 | 觸發 |
| 外鍵限制 | 被參考時失敗 | 受限於 ON DELETE |
| 空間釋放 | 立即釋放 | 需 OPTIMIZE TABLE |
TRUNCATE 為首選DELETEDELETE ... LIMIT 10000 避免長鎖定