確保你連接上了服務器,如在上一章節討論的。連接上服務器并不代表選擇了任何數據庫,但這樣就可以了。知道關于如何查詢的基本知識,比馬上跳至創建表、給他們裝載數據并且從他們檢索數據更重要。本節描述輸入命令的基本原則,使用幾個查詢,你能嘗試了解mysql是如何工作的。
這是一個簡單的命令,要求服務器告訴它的版本號和當前日期。在mysql>提示輸入如下命令并按回車鍵:
mysql>?SELECT?VERSION(),?CURRENT_DATE;? +-----------------+--------------+ |?VERSION()????|?CURRENT_DATE?| +-----------------+--------------+ |?5.1.2-alpha-log?|?2005-10-11??| +-----------------+--------------+ 1?row?in?set?(0.01?sec) mysql>
這詢問說明mysql的幾個方面:
· 一個命令通常由SQL語句組成,隨后跟著一個分號。(有一些例外不需要分號。早先提到的QUIT是一個例子。后面我們將看到其它的例子。)
· 當發出一個命令時,mysql將它發送給服務器并顯示執行結果,然后顯示另一個mysql>顯示它準備好接受其它命令。
·?mysql用表格(行和列)方式顯示查詢輸出。第一行包含列的標簽,隨后的行是查詢結果。通常,列標簽是你取自數據庫表的列的名字。如果你正在檢索一個表達式而非表列的值(如剛才的例子),mysql用表達式本身標記列。
·?mysql顯示返回了多少行,以及查詢花了多長時間,它給你提供服務器性能的一個大致概念。因為他們表示時鐘時間(不是?CPU?或機器時間),并且因為他們受到諸如服務器負載和網絡延時的影響,因此這些值是不精確的。(為了簡潔,在本章其它例子中不再顯示“集合中的行”。)
能夠以大小寫輸入關鍵詞(大小寫不敏感)。下列查詢是等價的:
mysql>?SELECT?VERSION(),?CURRENT_DATE;?mysql>?select?version(),?current_date;?mysql>?SeLeCt?vErSiOn(),?current_DATE;? 這是另外一個查詢,它說明你能將mysql用作一個簡單的計算器: mysql>?SELECT?SIN(PI()/4),?(4+1)*5;?+------------------+---------+ |?SIN(PI()/4)??????|?(4+1)*5?| +------------------+---------+ |?0.70710678118655?|??????25?| +------------------+---------+ 1?row?in?set?(0.02?sec)
至此顯示的命令是相當短的單行語句。你可以在一行上輸入多條語句,只需要以一個分號間隔開各語句:
mysql>?SELECT?VERSION();?SELECT?NOW();? +-----------------+ |?VERSION()???????| +-----------------+ |?5.1.2-alpha-log?| +-----------------+ 1?row?in?set?(0.00?sec) +---------------------+ |?NOW()???????????????| +---------------------+ |?2005-10-11?15:15:00?| +---------------------+ 1?row?in?set?(0.00?sec)
不必全在一個行內給出一個命令,較長命令可以輸入到多個行中。mysql通過尋找終止分號而不是輸入行的結束來決定語句在哪兒結束。(換句話說,mysql接受自由格式的輸入:它收集輸入行但直到看見分號才執行。)
這里是一個簡單的多行語句的例子:
mysql>?SELECT?????->?USER()?????->?,?->?CURRENT_DATE;? +---------------+--------------+ |?USER()?????|?CURRENT_DATE?| +---------------+--------------+ |?jon@localhost?|?2005-10-11??| +---------------+--------------+
在這個例子中,在輸入多行查詢的第一行后,要注意提示符如何從mysql>變為->,這正是mysql如何指出它沒見到完整的語句并且正在等待剩余的部分。提示符是你的朋友,因為它提供有價值的反饋,如果使用該反饋,將總是知道mysql正在等待什么。
如果你決定不想執行正在輸入過程中的一個命令,輸入c取消它:
mysql>?SELECT?????->?USER()?????->?c?mysql>
這里也要注意提示符,在你輸入c以后,它切換回到mysql>,提供反饋以表明mysql準備接受一個新命令。
下表顯示出可以看見的各個提示符并簡述它們所表示的mysql的狀態:
提示符 ? ?含義 ? ?
mysql> ? ?準備好接受新命令。 ? ?
-> ? ?等待多行命令的下一行。 ? ?
‘> ? ?等待下一行,等待以單引號(“’”)開始的字符串的結束。 ? ?
“> ? ?等待下一行,等待以雙引號(“””)開始的字符串的結束。 ? ?
`> ? ?等待下一行,等待以反斜點(‘`’)開始的識別符的結束。 ? ?
/*> ? ?等待下一行,等待以/*開始的注釋的結束。 ? ?
當你打算在一個單行上發出一個命令時,通常會“偶然”出現多行語句,但是沒有終止分號。在這種情況中,mysql等待進一步輸入:
mysql>?SELECT?USER()?????->
如果出現這種情況(你認為輸完了語句,但是只有一個->提示符響應),很可能mysql正在等待分號。如果你沒有注意到提示符的提示,在意識到你需要做什么之前,你可能會呆坐一會兒。輸入一個分號完成語句,mysql將執行:
mysql>?SELECT?USER()????->?;? +---------------+ |?USER()????| +---------------+ |?jon@localhost?| +---------------+
在字符串收集期間將出現?‘>?和?“>?提示符(提示MySQL正等待字符串的結束)。在MySQL中,可以寫由‘’’或‘”’字符括起來的字符串?(例如,’hello’或”goodbye”),并且mysql允許輸入跨越多行的字符串。當看到一個?‘>?或?“>?提示符時,這意味著已經輸入了包含以‘’’或‘”’括號字符開始的字符串的一行,但是還沒有輸入終止字符串的匹配引號。這顯示你粗心地省掉了一個引號字符。例如:
mysql>?SELECT?*?FROM?my_table?WHERE?name?=?'Smith?AND?age?
如果你輸入SELECT語句,然后按Enter(回車)鍵并等待結果,什么都沒有出現。不要驚訝,“為什么該查詢這么長呢?”,注意”>提示符提供的線索。它告訴你mysql期望見到一個未終止字符串的余下部分。(你看見語句中的錯誤嗎?字符串”Smith丟掉了第二個引號。)
走到這一步,你該做什么?最簡單的是取消命令。然而,在這種情況下,你不能只是輸入c,因為mysql作為它正在收集的字符串的一部分來解釋它!相反,應輸入關閉的引號字符(這樣mysql知道你完成了字符串),然后輸入c:
mysql>?SELECT?*?FROM?my_table?WHERE?name?=?'Smith?AND?age??'c?mysql>
提示符回到mysql>,顯示mysql準備好接受一個新命令了。
`>?提示符類似于?‘>?和”>?提示符,但表示你已經開始但沒有結束以`>?開始的識別符。
知道’>和”>提示符的含義很重要,因為如果你錯誤地輸入一個未終止的字符串,任何后面輸入的行將要被mysql忽略–包括包含QUIT的行!這可能令人相當困惑,特別是如果取消當前命令前還不知道你需要提供終止引號。