mysql历史命令_MySQL交互技巧
本文介紹一些與客戶端程序mysql進行交互的技巧,這些技巧能幫助我們更有效率地使用它,減少文字輸入。此外,還會描述“怎樣更加方便地連接到服務器”,以及“如何在不經手工輸入的情況下輸入語句”。
簡化連接過程
在啟動mysql程序時,通常都需要設定某些連接參數,如主機名、用戶名或密碼。如果在每次啟動mysql程序時都輸入這么多的內容,那么你很快就會感到厭煩。其實,在連接MySQL服務器時,有好幾種辦法可以減少打字輸入的需要。
- 把連接參數存儲在一個選項文件里。
- 利用shell的歷史命令功能輸入重復命令。
- 利用shell別名或腳本定義一個mysql命令行快捷方式。
使用選項文件
MySQL允許把連接參數存儲到一個選項文件里。這樣,你就不用在每次啟動mysql時都輸入這些參數了。它們的使用效果與在命令行上輸入它們是一樣的。這樣做的好處在于,其他MySQL客戶端程序(如mysqlimport或mysqlshow)也能使用這些參數。換句話說,選項文件不僅能簡化mysql的啟動過程,也可以讓許多其他程序受益。本節對“如何設置客戶端程序所用的選項文件”進行了簡要介紹。有關更多詳細信息請參考F.2.2節。
在Unix系統上,可以創建一個名為~/.my.cnf的文件(即在你的主目錄下創建一個名為.my.cnf的文件)來作為選項文件。在Windows系統上,可以在MySQL安裝目錄下或者在C盤根目錄下,創建一個名為my.ini的選項文件(如果在C盤根目錄下,就是C:my.ini)。選項文件是一個純文本文件,因此可以使用任何一種文本編輯器來創建。選項文件的內容近似如下:
[client] host=server_host user=your_name password=your_pass其中,[client]行是client選項組的開始標記。MySQL客戶端程序會由該行開始讀入各行,一直到文件末尾或遇到一個不一樣的選項組起始標記為止,從而獲得各個選項值。請把其中的server_host、your_name和your_pass分別替換為你在連接MySQL服務器時所用的主機名、用戶名和密碼。例如,服務器運行在cobra.example.com主機上,MySQL的用戶名和密碼分別是sampadm和secret,那么請在.my.cnf文件里放入下面幾行內容:
[client] host=cobra.example.com user=sampadm password=secret那個[client]行是必需的,用于定義選項組的起始位置。不過,那些用來定義參數值的文本行都是可選的,你可以只列出所需要的那些參數值。例如,你使用的是Unix系統,并且MySQL用戶名就是Unix的登錄名,那么可以不用包含user那一行。默認的主機是localhost,因此如果你要連接的服務器運行在本地主機上,那么host那一行也可以不要。
如果是在Unix系統上,那么在創建選項文件之后還需要為它設置訪問權限,從而保證其他人不能讀取和修改它。下面兩條命令都可以實現讓選項文件僅限你本人訪問:
% **chmod 600 .my.cnf **% **chmod u=rw,go-rwx .my.cnf**利用shell的歷史命令功能
有些shell程序,如tcsh或bash,能把你在命令行上輸入過的命令記錄在一個歷史清單里,從而可以讓你重復其中的命令。如果你使用的是這類shell程序,那么這個歷史清單可以幫你避免輸入整條的命令。例如,在你剛使用過mysql之后,你可以像下面那樣來執行它:
% **!my**感嘆號字符(!)的作用是告知shell程序,讓它在命令歷史清單里,把你最近執行過的以my開頭的命令找出來,再執行一次,就好像你在命令行上再次自己輸入了它一樣。有些shell程序還支持使用鍵盤上的上下箭頭鍵(或組合鍵Ctrl+P和Ctrl+N)在命令歷史清單里前后移動。這時,在當中選擇一條命令之后,按Enter鍵即可執行它。tcsh和bash具有這樣的功能,其他shell可能也有。如果你想了解更多如何使用歷史命令列表的信息,可以查閱你所用的shell程序的幫助文檔。
利用shell別名和腳本
如果shell程序支持別名機制,那么你可以將一個較短的命令名映射到一條較長的命令上。例如,在csh或tcsh里,你就可以像下面這樣用alias命令來創建一個名為sampdb的別名:
alias sampdb 'mysql -h cobra.example.com -p -u sampadm sampdb'bash的語法稍有不同:
alias sampdb='mysql -h cobra.example.com -p -u sampadm sampdb'利用別名定義之后,下面兩條命令完全等價:
% **sampdb **% **mysql -h cobra.example.com -p -u sampadm sampdb**很明顯,第一條命令比第二條簡短很多。如果想讓這個別名在你每次登錄系統時都能生效,那么還需要把alias命令放到shell程序的啟動文件里(例如,tcsh的啟動文件是.tcshrc,而bash下的啟動文件是.bashrc或.bash_profile)。
在Windows系統上,也有類似的技巧,即可以先創建一個快捷方式指向mysql程序,然后再編輯該快捷方式的屬性,讓它包含相關的連接參數。
另一種能讓你在調用命令時少打字的方法是,創建一個腳本,讓它帶著恰當的選項執行my``sql。在Unix系統上,一個shell腳本與剛才定義的命令別名sampdb是等價的:
#!/bin/sh exec mysql -h cobra.example.com -p -u sampadm sampdb如果把這個腳本命名為sampdb,并將其設置為可執行的(使用chmod +x sampdb命令),那么在命令提示符里輸入sampdb,即可啟動mysql,并連接到sampdb數據庫。
在Windows系統上,可以使用批處理文件來完成同樣的事情。先創建一個名為sampdb.bat的批處理文件,然后再把下面的內容放入其中:
mysql -h cobra.example.com -p -u sampadm sampdb執行這個批處理文件的辦法有兩種:一種是在控制臺窗口的提示符處輸入sampdb;另一種是雙擊這個批處理文件的Windows圖標。
如果需要訪問多個數據庫或連接多個主機,那么你可以多定義幾個別名、快捷方式或者腳本,每一個都以不同的選項參數來調用mysql程序。
在調用命令時減少打字輸入
從對數據庫進行交互式查詢的角度講,mysql是一個極其有用的程序,但其操作界面卻主要適合于輸入短小的單行查詢命令。雖然mysql自身并不關心輸入的查詢命令是否會延續多少行,但輸入一條長長的查詢命令卻不是件讓人高興的事。如果因為語法錯誤而不得不重新輸入一遍,那么肯定會讓人更郁悶不已。有幾種技術可以幫助我們減少不必要的錄入工作。
- 利用mysql的輸入行編輯功能。
- 利用復制和粘貼。
- 利用批處理運行mysql程序。
利用mysql的輸入行編輯器
mysql程序支持輸入行編輯。你可以編輯當前正在輸入的那一行,也可以把以前的輸入行調出來,直接再次輸入它們,或者在進一步修改之后輸入它們。當在輸入的命令行中有打字錯誤的時候,使用這個功能會很方便:在按Enter鍵之前,可以把光標移到出錯位置,對問題進行修正。如果你輸入了一個有錯誤的查詢命令,那么可以把它重新調出來,編輯修正問題,然后再次提交。(如果你是在一行里輸入了整條查詢命令,那么修改起來是最容易的。)
表1-4列出了一些適用于Unix系統的按鍵組合。
{-:-}表1-4 mysql程序的輸入編輯命令
按鍵組合含 義
向上鍵或Ctrl+P調出前一個輸入行
向下鍵或Ctrl+N調出后一個輸入行
向左鍵或Ctrl+B向左移動光標
向右鍵或Ctrl+F向右移動光標
Esc b把光標向后移動一個單詞
Esc f把光標向前移動一個單詞
Ctrl+A把光標移到輸入行的開頭
Ctrl+E把光標移到輸入行的末尾
Ctrl+D刪除光標位置上的那個字符
Delete刪除光標前面(左側)的那個字符
Esc D刪除單詞
Esc Backspace刪除光標前面(左側)的那個單詞
Ctrl+K刪除從光標位置到輸入行末尾的所有內容
在Windows平臺上,mysql程序并沒有提供行編輯功能。不過,Windows自身支持許多編輯命令,如表1-5所示,因此mysql程序可以直接使用它們。
{-:-}表1-5 Windows的輸入編輯命令
按鍵組合含 義
向上鍵調出前一行
向下鍵調出后一行
向左鍵光標左移一個字符(后退)
向右鍵光標右移一個字符(前進)
Ctrl + 向左鍵光標左移一個單詞
Ctrl + 向右鍵光標右移一個單詞
Home光標移動到行首
----------------------------------------------------
End光標移動到行尾
Delete刪除光標處的字符
Backspace刪除光標左邊的字符
Esc刪除整行
Page Up調出最早輸入的命令
Page Down調出最后輸入的命令
F3調出最后輸入的命令
F7彈出命令菜單,用向上鍵/向下鍵選擇
F9彈出命令菜單,用命令編號選擇
F8,F5循環顯示命令列表
下面的示例演示了一個輸入行編輯功能的簡單用法。假設你在mysql程序里輸入了如下所示的查詢命令:
mysql> **SHOW COLUMNS FROM persident****;**在按Enter鍵之前,你突然發現自己把president錯拼成了persident,那么可以像下面這樣修改這條查詢命令。
(1)先按幾次向左鍵,把光標左移到字符s的位置上。
(2)按兩次Delete鍵或Backspace鍵(這兩個鍵都可以刪除光標左側的字符),刪除er。
(3)再重新輸入re,修正錯誤。
(4)然后按下Enter鍵來執行該查詢命令。
如果在按Enter鍵之后才發現打錯了字,那么也不要緊。等到mysql顯示出錯信息之后,按向上鍵調出剛才輸入的那條查詢命令,然后像剛才描述的那樣將其修改好即可。
利用復制和粘貼來執行語句
如果你使用的是窗口化操作環境,那么可以把你認為有用的那些語句保存到某個文件里,其后通過復制和粘貼操作再次調用它們。
(1)在某個終端或控制臺窗口里啟動mysql程序。
(2)在文檔窗口里打開那個用來存放語句的文件。(例如,我在Unix系統上用vi,在Windows系統上用gvim``。)
(3)在這個文件里找到你想要執行的語句,選取并復制它。然后切換到終端窗口,把剛才復制的那條語句粘貼到mysql程序里。
這一過程看起來比較繁瑣,但在掌握之后卻相當快捷。它提供了一種無需打字,即可快速輸入命令的方式。稍加練習,即可熟練掌握。
你也可以將復制和粘貼的順序反過來使用(把終端窗口里的語句復制粘貼到你的文件里)。在Unix系統上,當在mysql里輸入語句時,這些語句會被保存到位于主目錄下的一個名為.mysql_history的文件里。如果你手工輸入了一條語句之后,想把它保存起來以供今后使用,那么可以這樣做:先退出mysql,再用一個編輯器打開.mysql_history,然后將.mysql_history里的語句復制粘貼到你的那個語句存檔文件里。
利用mysql執行腳本文件
mysql程序并非只能在交互模式下運行,它也可以在非交互模式(即批處理)下從某個文件里讀取輸入。如果你有一些需要定期運行的語句,那么此方法會特別有用,因為你不用每次都來重新輸入它們。只要在一個文件中保存一次這些語句,就可以根據需要反復地讓mysql執行它們。
假設你有一條查詢命令,它可以通過member表里的interests列,將那些對某個特定時期的美國歷史感興趣的“美史聯盟”成員找出來。例如,想要將那些對Great Depression(美國20世紀30年代的那個大蕭條時期)感興趣的成員找出來,那么可以編寫出類似下面這樣的查詢命令:
SELECT last_name, first_name, email, interests FROM member WHERE interests LIKE '%depression%' ORDER BY last_name, first_name;把這條查詢命令保存在interests.sql文件里,然后像下面這樣將它提供給mysql程序執行:
%** mysql sampdb < interests.sql**默認情況下,當以批處理模式運行時,mysql程序產生的輸出內容是以制表符分隔的。如果想得到交互方式運行mysql``時輸出的格式效果,可以加上一個-t選項:
% **mysql -t sampdb < interests.sql**如果想把輸出結果保存起來,那么可以將它重定向至一個文件:
% **mysql -t sampdb < interests.sql > ****interests.out**如果已經運行了mysql,那么可以通過source命令來執行指定文件里的內容:
mysql> **source interests.sql**如果需要將那些對Thomas Jefferson總統的生平感興趣的成員查找出來,那么可以先編輯這個文件,把其中的depression改為Jefferson,然后再次運行mysql即可。不過,這個方法只有在你不會頻繁地使用這條查詢命令時才會顯現出優勢來。如果要頻繁地運行某條查詢命令,那么需要另謀出路。在Unix系統上,有一種讓查詢命令變得更加靈活的方法:先把它保存為一個可以接受腳本命令行參數的shell腳本;然后,用這些命令行參數來更改查詢命令的文本內容。這種參數化查詢命令的方式,讓你可以在運行腳本時指定interests值。通過下面這個shell腳本interests.sh,可以看出其中的工作原理:
#!/bin/sh # interests.sh - find USHL members with particular interests if [ $# -ne 1 ]; then echo 'Please specify one keyword'; exit; fi mysql -t sampdb <其中的第3行用于確保命令行參數只有一個;否則,它就會輸出一條簡短的出錯信息,然后退出執行。在<
在運行該腳本之前,還必須把它設置為可執行的:
%** chmod +x interests.sh**現在,你不用在每次運行這個腳本時都去編輯它了。只需通過命令行參數,告訴它你想查找什么東西即可:
% **./interests.sh depression % **./interests.sh Jefferson**你可以在sampdb發行版的misc目錄里找到這個interests.sh腳本。另外,在那里還提供了一個與之等效的Windows批處理文件interests.bat。
{說明} 強烈建議大家不要把這類腳本安裝在公共區域里,因為它們在執行時不會對參數進行安全檢查,因而很容易遭遇SQL注入攻擊。假設有人調用類似下面的腳本發起攻擊:
******% ./interests.sh ****"****Jefferson****'****;DROP DATABASE sampdb;****"***此腳本的后果是會有一條DROP DATABASE語句被注入腳本語句中,成為mysql的輸入內容。如此一來,這條命令會真的被執行,其后果可想而知。
本文摘自《MySQL技術內幕》(第5版)
《MySQL技術內幕》(第5版)
《MySQL技術內幕》(第5版)是MySQL方面名副其實的經典著作,全面介紹MySQL的基礎知識以及MySQL有別于其他數據庫系統的獨特功能,書中特別關注如何高效地使用和管理MySQL。
全書由4個部分組成:第一部分集中介紹與數據庫使用相關的一些基本概念,第二部分重點關注的是自己如何動手編寫和使用MySQL的程序,第三部分主要是面向那些負責數據庫管理的讀者,第四部分提供了一些參考附錄。書中包含大量示例,詳盡地演示了MySQL的各項功能特性。此外,本書還為使用C語言、PHP語言和Perl語言開發數據庫應用的讀者提供了相關內容。
本書不僅適合MySQL初學者閱讀,也適合想要深入了解MySQL的數據庫管理人員和開發人員參考。
總結
以上是生活随笔為你收集整理的mysql历史命令_MySQL交互技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3d 强制添加脚本_每日学点---Jen
- 下一篇: 小米redmi_安兔兔公布12月安卓手机