雖然有許多基於GUI的MySQL用戶端存在,如著名的phpMyAdmin和SQLYog,但我一直喜歡原生的MySQL命令列用戶端,的確,在未熟悉這些命令列介面(CLI)之前,我們需要花一些時間來熟悉它們,特別是你平時不是經常在具有強大的CLI環境的作業系統下工作時,但只要經過一些練習,你就可以通過CLI系統管理使用者,瀏覽你的資料庫和執行其它任務,其快感是其它人體會不到的。
在這篇文章中,我將會介紹我在工作中積累起來的一些MySQL命令列用戶端技巧,不管你嘗試其中一個還是所有技巧,我敢保證你一定會節省大量的時間。
順便提一下,MySQL命令列用戶端適應所有作業系統,當然包括Windows,但因為Windows原生CLI環境讓人畏懼,因此推薦Windows使用者下載並安裝Console,它是Windows命令列的一個替代解決方案,提供了更強大的功能,如方便的文本選擇,多標籤視窗等。
1、登入過程自動化
正確配置的MySQL伺服器需要你提供使用者名稱和密碼進行身分識別驗證,通常情況下,我們可以直接在mysql命令後加上使用者名稱,出於安全考慮,密碼就不跟上了,斷行符號執行時,命令提示字元會提醒你輸入密碼。
- %>mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or g. ...
通過這一個小小的改進,一年可以少輸入幾千次使用者名稱,累計起來在登入時間上可以節省幾個小時,建立一個.my.cnf檔案,將其放在你的home目錄下,如果是Windows,檔案名稱則為my.ini,並且要放在MySQL安裝目錄下,在這個檔案中,添加下面的代碼,請使用你的登入資訊替換預留位置。
- [client] host = your_mysql_server user = your_username password = your_password
一定要正確設定這個檔案的許可權,防止敏感性資料被偷窺。
2、自動切換資料庫
登入用戶端後,你需要切換到目標資料庫,通常我們會使用下面這個命令來切換資料庫:
- mysql>use wjgilmore_dev;
如果你想登入後自動切換到目標資料庫,可以在上一步介紹的檔案中添加下面的命令,注意位置也要放在[client]小節:
- database = your_database_name
3、從指令碼發送命令
設計一個新資料庫時,我喜歡使用MySQL Workbench(MySQL工作台)設計模式和關係,它是一個特彆強大的工具,你可以在圖形介面下管理你的模式,然後同步到MySQL伺服器,或將SQL命令匯出到一個檔案,方便以後再匯入到MySQL。
如果你喜歡手寫代碼,如建立大量的預存程序,或執行一個很長的串連,你可以將SQL儲存為一個檔案,然後將這個檔案傳遞給用戶端執行,如:
- %>mysql < schema.sql
當然你需要指定連接字串,或象前面一樣通過設定檔來指定。
4、垂直顯示結果
即使是很簡單的表模式,也會包含幾欄欄位,例如下面的表由11個欄位組成,當我執行一個全結構查詢時,輸入結果如下:
- mysql> select * from accounts where username = 'wjgilmore';
- +----+-----------+------------------+------------------------------
- ----+----------+-----------+------------+-----------+--------------
- --------------------+---------------------+---------------------+
- | id | username | email | password | zip_code | latitude | longitude | confirmed | recovery | created_on | last_login |
- +----+-----------+------------------+-------------------------------
- ---+----------+-----------+------------+-----------+-----------------
- -----------------+---------------------+---------------------+
- | 7 | wjgilmore | wj@wjgilmore.com | 2b877b4b825b48a9a0950dd5bd1f264d | 43201 | 39.984577 | -83.018692 | 1 | 8bnnwtqlt2289q2yp81tuge82fty501h | 2010-09-16 14:48:41 | 2010-10-27 15:49:44 |
- +----+-----------+------------------+----------------------------------
- +----------+-----------+------------+-----------+----------------------
- ------------+---------------------+---------------------+
顯然我們不能接受,也無法閱讀這種顯示結果,使用G命令將上面醜陋的顯示結果轉換為垂直型。
- mysql> select * from accounts where username = 'wjgilmore'G
- *************************** 1. row ***************************
- id: 7 username: wjgilmore email: wj@wjgilmore.com
- password: 2b877b4b825b48a9a0950dd5bd1f264d zip_code: 43201
- latitude: 39.984577 longitude: -83.018692
- confirmed: 1 recovery: 8bnnwtqlt2289q2yp81tuge82fty501h
- created_on: 2010-09-16 14:48:41 last_login: 2010-10-27 15:49:44
這樣看起來就更舒服一點。
5、啟用Tab鍵自動完成功能
重複輸入表名和欄位名無疑是很乏味的,給mysql用戶端傳遞一個--auto-rehash參數,或是在my.ini檔案中添加下面的命令來啟用Tab鍵自動完成功能。
- [mysql] auto-rehash
6、改變提示符
我不止一次想查看或修改被告知表不存在的模式,遇到這種情況我常常會很恐懼,大多數時候我登錯資料庫,導致錯誤地刪除不該刪除的表,通過修改MySQL用戶端提示符,讓它顯示當前操作的資料庫名字,從而避免誤操作,為了讓mysql用戶端具備這種互動性,登入後執行下面的命令即可:
- mysql>prompt [d]> [dev_wjgilmore_com]>
你可能希望永久保持這種效果,簡單,只需要將下面的命令添加到你的設定檔中即可:
- prompt = [d]>
當然不僅限於提示資料庫名字,還可以顯示當前日期和時間,主機名稱和使用者名稱,請閱讀MySQL手冊瞭解更全面的資訊。
7、使用安全更新預防災難
前面我也提到,當表被意外刪除時可能會引起恐懼,我相信不止我一個人有類似的經曆,除了不小心執行了DROP TABLE外,更讓人崩潰的是忽略WHERE子句的UPDATE命令,例如,假設你想使用下面的命令修改使用者的使用者名稱:
- mysql>UPDATE users set User = 'wjgilmore' WHERE User = 'wjgilmore-temp';
但當你沖忙地想出去吃飯時,可能忘記敲入後面的WHERE子句
- mysql>UPDATE users set User = 'wjgilmore';
一旦你按下斷行符號,後果就很嚴重,users表中所有使用者的使用者名稱全部被修改為wjgilmore了,為了避免這種低級,但又會帶來災難性後果的錯誤,請在設定檔中添加下面的命令:
- safe-updates
8、使用命令文檔
許多使用者都知道mysql用戶端的內建文檔,輸入help命令時,它會顯示一長串的命令列表。
- mysql>help
- ... List of all MySQL commands: Note that all text commands must be
- first on line and end with ';' ? (?) Synonym
- for `help'. clear (c) Clear the current input statement.
- connect (r) Reconnect to the server. Optional arguments are db and host. delimiter (d)
- Set statement delimiter. ...
如果你不知道DESCRIBE命令如何使用,只需要輸入
- mysql>help describe;
- Name: 'DESCRIBE' Description: Syntax:
- {DESCRIBE | DESC} tbl_name [col_name | wild] DESCRIBE provides information about the columns in a table.
- It is a shortcut for SHOW COLUMNS FROM. These statements also display information for views. (See [HELP SHOW COLUMNS].) ...
9、使用Pager
有時你可能想查看錶的某一行資料,但在螢幕上往往會顯示滿屏的資料,除了使用LIMIT子句外,開啟用戶端pager,設定你的系統分頁公用程式:
- mysql>pager more PAGER set to 'more'
如果要禁用pager,執行nopager命令即可。
10、將輸出內容轉儲到檔案
你可能偶爾需要將SQL執行結果輸出到一個文字檔,可以使用SELECT INTO OUTFILE command命令達到目的,或直接在mysql用戶端中啟用tee命令,並制定輸出檔案實現同樣的功能,如:
- mysql>tee sales_report.txt
小結
不管你是挑選其中一部分還是嘗試這10個技巧,它們都會為你節省大量的時間和精力,並會減輕你的痛苦,如果你知道其它MySQL命令列技巧,不妨在評論中一起分享一下吧!
原文出處:http://www.developer.com/db/10-command-line-timesavers-for-mysql-tasks.html