確保你連接上了服務器,如在先前的章節討論的。這樣做本身將不選擇任何數據庫來工作,但是那很好。從這點講,知道關於如何出詢問的一點知識,比馬上跳至創建表、給他們裝載數據並且從他們檢索數據要來的重要寫。本節描述輸入命令的基本原則,使用幾個查詢,你能嘗試讓自己
MySQL是如何工作的。
這是一個簡單的命令,要求服務器告訴你它的版本號和當前日期。在
MySQL>提示打入如下命令並按回車鍵:
MySQL> SELECT VERSION(), CURRENT_DATE;
+--------------+--------------+
| version() | CURRENT_DATE |
+--------------+--------------+
| 3.22.20a-log | 1999-03-19 |
+--------------+--------------+
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.707107 | 25 |
+-------------+---------+
至今顯示的命令是相當短的,單行語句。你甚至能在單行上輸入多條語句,只是以一個分號結束每一條:
MySQL> SELECT VERSION(); SELECT NOW();
+--------------+
| version() |
+--------------+
| 3.22.20a-log |
+--------------+
+---------------------+
| NOW() |
+---------------------+
| 1999-03-19 00:15:33 |
+---------------------+
一個命令不必全在一個單獨行給出,所以需要多行的較長命令不是一個問題。
MySQL通過尋找終止的分號而不是尋找輸入行的結束來決定你的語句在哪兒結束。(換句話說,
MySQL接受自由格式輸入:它收集輸入行但執行他們直到它看見分號。)
這裡是一個簡單的多行語句的例子:
MySQL> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
+--------------------+--------------+
| USER() | CURRENT_DATE |
+--------------------+--------------+
| joesmith@localhost | 1999-03-18 |
+--------------------+--------------+
在這個例子中,在你輸入一個多行查詢的第一行後,要注意提示符如何從
MySQL>變為->,這正是
MySQL如何指出它沒見到完整的語句並且正在等待剩余的部分。提示符是你的朋友,因為它提供有價值的反饋,如果你使用該反饋,你將總是知道
MySQL正在等待什麼。
如果你決定,你不想要執行你在輸入過程中輸入的一個命令,打入\c取消它:
MySQL> SELECT
-> USER()
-> \c
MySQL>
這裡也要注意提示符,在你打入\c以後,它切換回到
MySQL>,提供反饋以表明
MySQL准備接受一個新命令。
下表顯示出你可以看見的各個提示符並總結他們意味著
MySQL在什麼狀態下:
提示符 意思
MySQL> 准備好接受新命令
-> 等待多行命令的下一行
'> 等待下一行,收集以單引號(“'”)開始的字符串
"> 等待下一行,收集以雙引號(“"”)開始的字符串
當你打算在一個單行上發出一個命令時,多行語句通常“偶然”出現,但是忘記終止的分號。在這種情況中,
MySQL等待進一步輸入:
MySQL> SELECT USER()
->
如果這發生在你身上(你認為你輸完了語句但是唯一的反應是一個->提示符),很可能
MySQL正在等待分號。如果你沒有注意到提示符正在告訴你什麼,在認識到你需要做什麼之前,你可能花一會兒時間呆坐在那兒。進入一個分號完成語句,並且
MySQL將執行它:
MySQL> SELECT USER()
-> ;
+--------------------+
| USER() |
+--------------------+
| joesmith@localhost |
+--------------------+
'>和">提示符出現在在字符串收集期間。在MySQL中,你可以寫由“'”或“"”字符括起來的字符串 (例如,'hello'或"goodbye"),並且
MySQL讓你進入跨越多行的字符串。當你看到一個'>或">提示符時,這意味著你已經輸入了包含以“'”或“"”括號字符開始的字符串的一行,但是還沒有輸入終止字符串的匹配引號。如果你確實正在輸入一個多行字符串,很好,但是果真如此嗎?不盡然。更常見的,'>和">提示符顯示你粗心地省掉了一個引號字符。
www.xker.com(小新技術網)例如:
MySQL> SELECT * FROM my_table WHERE name = "Smith AND age < 30;
">
如果你輸入該SELECT語句,然後按回車鍵並等待結果,什麼都沒有出現。不要驚訝,“為什麼該查詢這麼長呢?”,注意">提示符提供的線索。它告訴你
MySQL期望見到一個未終止字符串的余下部分。(你在語句中看見錯誤嗎?字符串"Smith正好丟失第二個引號。)
走到這一步,你該做什麼?最簡單的是取消命令。然而,在這種情況下,你不能只是打入\c,因為
MySQL作為它正在收集的字符串的一部分來解釋它!相反,輸入關閉的引號字符(這樣
MySQL知道你完成了字符串),然後打入\c:
MySQL> SELECT * FROM my_table WHERE name = "Smith AND age < 30;
"> "\c
MySQL>
提示符回到
MySQL>,
www.xker.com(小新技術網)顯示
MySQL准備好接受一個新命令了。
知道'>和">提示符意味著什麼是很重要的,因為如果你錯誤地輸入一個未終止的字符串,任何比你下一步輸入的行好象將要被MySQL忽略--包括包含QUIT的行!這可能相當含糊,特別是在你能取消當前命令前,如果你不知道你需要提出終止引號。