MySQL 易學易用,但隨版本演進隱藏許多實用特性。本文介紹 7 個鮮為人知的進階技巧,提升開發運維效率。
shell> mysql --xml
mysql> SELECT * FROM test.stores;
1
This is a test
2005-07-28 00:14:57
2
This is the second test
2005-07-28 00:15:11
適用於程式整合、API 回傳、日誌審計。
修改全文搜尋變數後需重建索引,大表耗時極長。使用 REPAIR TABLE ... QUICK 秒級完成:
mysql> REPAIR TABLE content QUICK;
+---------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------+--------+----------+----------+
| content | repair | status | OK |
+---------+--------+----------+----------+
僅限唯讀 MyISAM 表,使用 myisampack 節省磁碟空間:
shell> myisampack movies.MYI
Compressing movies.MYD: (146 records)
- Calculating statistics
- Compressing file
41.05%
壓縮後表不可寫入,需解壓才能修改。
mysql> SELECT IF(priv=1, 'admin', 'guest') AS usertype FROM privs WHERE username='joe';
+----------+
| usertype |
+----------+
| admin |
+----------+
支援 CASE WHEN ... THEN ... ELSE ... END 複雜邏輯,減少應用層判斷。
shell> mysqldump -T . --fields-terminated-by="," mydb mytable
在當前目錄生成以逗號分隔的文字檔,可直接用 Excel/BI 工具開啟。
shell> mysqld --sql_mode="STRICT_ALL_TABLES" &
Strict 模式下:
生產環境強烈建議啟用,配合TRADITIONAL模式(STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION)。
mysql> SHOW STATUS;
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| Aborted_clients | 0 |
| Aborted_connects | 0 |
| ... | ... |
| Uptime | 851 |
+------------------+-------+
156 rows in set (0.16 sec)
關鍵指標:Threads_connected、Questions、Slow_queries、Innodb_buffer_pool_reads、Uptime。
mysql> SHOW CREATE TABLE products\G
Table: products
Create Table: CREATE TABLE `products` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '',
`price` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
快速獲取建表語句,便於版本控制、環境同步、文檔生成。