編者在工作中積累起來(lái)了一些MySQL命令行客戶(hù)端技巧,這些技巧或多或少會(huì)幫助您節(jié)省大量的時(shí)間。
雖然有許多基于GUI的MySQL客戶(hù)端存在,如著名的phpMyAdmin和SQLYog,但我一直喜歡原生的MySQL命令行客戶(hù)端,的確,在未熟悉這些命令行接口(CLI)之前,我們需要花一些時(shí)間來(lái)熟悉它們,特別是你平時(shí)不是經(jīng)常在具有強(qiáng)大的CLI環(huán)境的操作系統(tǒng)下工作時(shí),但只要經(jīng)過(guò)一些練習(xí),你就可以通過(guò)CLI管理用戶(hù),瀏覽你的數(shù)據(jù)庫(kù)和執(zhí)行其它任務(wù),其快感是其它人體會(huì)不到的。
在這篇文章中,我將會(huì)介紹我在工作中積累起來(lái)的一些MySQL命令行客戶(hù)端技巧,不管你嘗試其中一個(gè)還是所有技巧,我敢保證你一定會(huì)節(jié)省大量的時(shí)間。
順便提一下,MySQL命令行客戶(hù)端適應(yīng)所有操作系統(tǒng),當(dāng)然包括Windows,但因?yàn)閃indows原生CLI環(huán)境讓人畏懼,因此推薦Windows用戶(hù)下載并安裝Console,它是Windows命令行的一個(gè)替代解決方案,提供了更強(qiáng)大的功能,如方便的文本選擇,多標(biāo)簽窗口等。
1、登錄過(guò)程自動(dòng)化
正確配置的MySQL服務(wù)器需要你提供用戶(hù)名和密碼進(jìn)行身份驗(yàn)證,通常情況下,我們可以直接在mysql命令后加上用戶(hù)名,出于安全考慮,密碼就不跟上了,回車(chē)執(zhí)行時(shí),命令提示符會(huì)提醒你輸入密碼。
代碼如下:
%>mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or g. …
通過(guò)這一個(gè)小小的改進(jìn),一年可以少輸入幾千次用戶(hù)名,累計(jì)起來(lái)在登錄時(shí)間上可以節(jié)省幾個(gè)小時(shí),創(chuàng)建一個(gè).my.cnf文件,將其放在你的home目錄下,如果是Windows,文件名則為my.ini,并且要放在MySQL安裝目錄下,在這個(gè)文件中,添加下面的代碼,請(qǐng)使用你的登錄信息替換占位符。
代碼如下:
[client] host = your_mysql_server user = your_username password = your_password
一定要正確設(shè)置這個(gè)文件的權(quán)限,防止敏感數(shù)據(jù)被偷窺。
2、自動(dòng)切換數(shù)據(jù)庫(kù)
登錄客戶(hù)端后,你需要切換到目標(biāo)數(shù)據(jù)庫(kù),通常我們會(huì)使用下面這個(gè)命令來(lái)切換數(shù)據(jù)庫(kù):
代碼如下:
mysql>use wjgilmore_dev;
如果你想登錄后自動(dòng)切換到目標(biāo)數(shù)據(jù)庫(kù),可以在上一步介紹的文件中添加下面的命令,注意位置也要放在[client]小節(jié):
代碼如下:
database = your_database_name
3、從腳本發(fā)送命令
設(shè)計(jì)一個(gè)新數(shù)據(jù)庫(kù)時(shí),我喜歡使用MySQL Workbench(MySQL工作臺(tái))設(shè)計(jì)模式和關(guān)系,它是一個(gè)特別強(qiáng)大的工具,你可以在圖形界面下管理你的模式,然后同步到MySQL,或?qū)QL命令導(dǎo)出到一個(gè)文件,方便以后再導(dǎo)入到MySQL。
如果你喜歡手寫(xiě)代碼,如創(chuàng)建大量的存儲(chǔ)過(guò)程,或執(zhí)行一個(gè)很長(zhǎng)的連接,你可以將SQL保存為一個(gè)文件,然后將這個(gè)文件傳遞給客戶(hù)端執(zhí)行,如:
代碼如下:
%>mysql
當(dāng)然你需要指定連接字符串,或象前面一樣通過(guò)配置文件來(lái)指定。
4、垂直顯示結(jié)果
即使是很簡(jiǎn)單的表模式,也會(huì)包含幾列字段,例如下面的表由11個(gè)字段組成,當(dāng)我執(zhí)行一個(gè)全結(jié)構(gòu)查詢(xún)時(shí),輸入結(jié)果如下:
代碼如下:
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 |
+—-+———–+——————+———————————-
+———-+———–+————+———–+———————-
————+———————+———————+
顯然我們不能接受,也無(wú)法閱讀這種顯示結(jié)果,使用G命令將上面丑陋的顯示結(jié)果轉(zhuǎn)換為垂直型。
代碼如下:
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
這樣看起來(lái)就更舒服一點(diǎn)。
5、啟用Tab鍵自動(dòng)完成功能
重復(fù)輸入表名和字段名無(wú)疑是很乏味的,給mysql客戶(hù)端傳遞一個(gè)–auto-rehash參數(shù),或是在my.ini文件中添加下面的命令來(lái)啟用Tab鍵自動(dòng)完成功能。
代碼如下:
[mysql] auto-rehash
6、改變提示符
我不止一次想查看或修改被告知表不存在的模式,遇到這種情況我常常會(huì)很恐懼,大多數(shù)時(shí)候我登錯(cuò)數(shù)據(jù)庫(kù),導(dǎo)致錯(cuò)誤地刪除不該刪除的表,通過(guò)修改MySQL客戶(hù)端提示符,讓它顯示當(dāng)前操作的數(shù)據(jù)庫(kù)名字,從而避免誤操作,為了讓mysql客戶(hù)端具備這種交互性,登錄后執(zhí)行下面的命令即可:
代碼如下:
mysql>prompt [d]> [dev_wjgilmore_com]>
你可能希望永久保持這種效果,簡(jiǎn)單,只需要將下面的命令添加到你的配置文件中即可:
代碼如下:
prompt = [d]>
當(dāng)然不僅限于提示數(shù)據(jù)庫(kù)名字,還可以顯示當(dāng)前日期和時(shí)間,主機(jī)名和用戶(hù)名,請(qǐng)閱讀MySQL手冊(cè)了解更全面的信息。
7、使用安全更新預(yù)防災(zāi)難
前面我也提到,當(dāng)表被意外刪除時(shí)可能會(huì)引起恐懼,我相信不止我一個(gè)人有類(lèi)似的經(jīng)歷,除了不小心執(zhí)行了DROP TABLE外,更讓人崩潰的是忽略WHERE子句的UPDATE命令,例如,假設(shè)你想使用下面的命令修改用戶(hù)的用戶(hù)名:
代碼如下:
mysql>UPDATE users set User = ‘wjgilmore’ WHERE User = ‘wjgilmore-temp’;
但當(dāng)你沖忙地想出去吃飯時(shí),可能忘記敲入后面的WHERE子句
代碼如下:
mysql>UPDATE users set User = ‘wjgilmore’;
一旦你按下回車(chē),后果就很?chē)?yán)重,users表中所有用戶(hù)的用戶(hù)名全部被修改為wjgilmore了,為了避免這種低級(jí),但又會(huì)帶來(lái)災(zāi)難性后果的錯(cuò)誤,請(qǐng)?jiān)谂渲梦募刑砑酉旅娴拿睿?
代碼如下:
safe-updates
8、使用命令文檔
許多用戶(hù)都知道m(xù)ysql客戶(hù)端的內(nèi)置文檔,輸入help命令時(shí),它會(huì)顯示一長(zhǎng)串的命令列表。
代碼如下:
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
有時(shí)你可能想查看表的某一行數(shù)據(jù),但在屏幕上往往會(huì)顯示滿(mǎn)屏的數(shù)據(jù),除了使用LIMIT子句外,開(kāi)啟客戶(hù)端pager,設(shè)置你的系統(tǒng)分頁(yè)實(shí)用程序:
代碼如下:
mysql>pager more PAGER set to ‘more’
如果要禁用pager,執(zhí)行nopager命令即可。
10、將輸出內(nèi)容轉(zhuǎn)儲(chǔ)到文件
你可能偶爾需要將SQL執(zhí)行結(jié)果輸出到一個(gè)文本文件,可以使用SELECT INTO OUTFILE command命令達(dá)到目的,或直接在mysql客戶(hù)端中啟用tee命令,并制定輸出文件實(shí)現(xiàn)同樣的功能,如:
代碼如下:
mysql>tee sales_report.txt
小結(jié)
不管你是挑選其中一部分還是嘗試這10個(gè)技巧,它們都會(huì)為你節(jié)省大量的時(shí)間和精力,并會(huì)減輕你的痛苦,如果你知道其它MySQL命令行技巧,不妨在評(píng)論中一起分享一下吧!
原文出處:http://www.developer.com/db/10-command-line-timesavers-for-mysql-tasks.html