MySQL 以易學易用著稱,但隨著版本迭代,許多強大卻鮮少被開發者發掘的功能悄然加入。本文精選 7 項實用進階特性,助你大幅提升開發與運維效率。
啟動客戶端時加入 --xml 參數,即可將查詢結果轉為結構化 XML,極利於與其他系統整合或程式解析:
shell> mysql --xml -e "SELECT * FROM test.stores;"
輸出範例:
1
This is a test
2005-07-28 00:14:57
...
調整全文搜尋參數(如 ft_min_word_len)後,通常需 ALTER TABLE ... DROP INDEX ... ADD FULLTEXT INDEX ... 重建索引,極耗時。對 MyISAM 表可用:
REPAIR TABLE `content` QUICK;
僅重組索引樹,不掃描資料列,秒級完成,Msg_text: OK 即成功。
針對歷史歸檔、日誌等唯讀表,可離線壓縮節省 40%~70% 磁碟空間:
shell> myisampack /var/lib/mysql/db/movies.MYI
Compressing movies.MYD: (146 records)
- Calculating statistics
- Compressing file
41.05%
注意:壓縮後表變為唯讀,需解壓才能寫入;InnoDB 不支援此工具。
MySQL 支援標準 SQL 的條件邏輯,可直接在查詢中轉換數值:
SELECT IF(priv = 1, 'admin', 'guest') AS usertype
FROM privs WHERE username = 'joe';
複雜邏輯可用 CASE WHEN ... THEN ... ELSE ... END。
使用 mysqldump 指定欄位分隔符:
shell> mysqldump -T /tmp --fields-terminated-by=',' mydb mytable
產生 mytable.txt(資料)與 mytable.sql(結構),CSV 格式通用性極佳。
預設模式下 MySQL 會自動截斷過長字串、將非法日期轉為 0000-00-00 等。啟用嚴格模式:
mysqld --sql-mode="STRICT_ALL_TABLES" &
或在 my.cnf 永久生效:
[mysqld]
sql_mode = "STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
嚴格模式下,不合規資料直接報錯回滾,強制應用層處理異常,大幅提升資料品質。
無需第三方工具,即可獲取連接數、查詢量、運行時間等核心指標:
mysql> SHOW STATUS LIKE 'Threads_connected';
mysql> SHOW GLOBAL STATUS WHERE Variable_name IN ('Connections','Queries','Uptime','Slow_queries');
關鍵指標:Aborted_connects(連接失敗數)、Innodb_buffer_pool_wait_free(緩衝池等待)、Select_full_join(無索引關聯)。
SHOW CREATE TABLE `products`; 即得完整 CREATE TABLE DDL,含引擎、字符集、索引定義。mysql> prompt \u@\h:\d> → root@localhost:db1>掌握這些隱藏功能,能讓你在日常開發、資料遷移、效能調優、資料品質管控等場景事半功倍。