MySQL™ 參考手冊(輸入查詢)

輸入查詢

確保已鏈接到服務器,如上一節中所述。這樣作自己並不會選擇任何可使用的數據庫,但這不要緊,此時,更重要的是要找到一些關於如何發出查詢的信息,而不是直接建立表,將數據加載到它們中以及從中檢索數據。本節介紹了輸入查詢的基本原則,使用你能夠嘗試的幾個查詢來熟悉mysql的工做原理。mysql

這是一個簡單的查詢,要求服務器告訴你它的版本號和當前日期,在mysql>提示符後面輸入以下所示,而後按Enter鍵:sql

mysql> SELECT VERSION(), CURRENT_DATE;
+-----------+--------------+
| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 5.8.0-m17 | 2019-07-09   |
+-----------+--------------+
1 row in set (0.02 sec)
mysql>

這個查詢說明了幾個關於mysql的東西:數據庫

  • 查詢一般由一個SQL語句後跟一個分號組成(有一些例外,能夠省略分號,前面提到的QUIT就是其中之一,咱們稍後會找到其餘)。
  • 當你發出查詢時,mysql將其發送到服務器執行並顯示結果,而後打印另外一個mysql>提示符以指示它已準備好進行另外一個查詢。
  • mysql以表格形式顯示查詢輸出(行和列),第一行包含列的標籤,如下行是查詢結果。一般,列標籤是從數據庫表中提取的列的名稱,若是要檢索表達式的值而不是表列(如剛剛顯示的示例中所示),則mysql使用表達式自己標記列。
  • mysql顯示返回了多少行以及執行查詢所需的時間,這使你能夠大體瞭解服務器性能。這些值不精確,由於它們表明時鐘時間(不是CPU或機器時間),而且由於它們受服務器負載和網絡延遲等因素的影響。

關鍵字能夠輸入任何大小寫,如下查詢是等效的:segmentfault

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() |
+-----------+
| 8.0.13    |
+-----------+
1 row in set (0.00 sec)

+---------------------+
| NOW()               |
+---------------------+
| 2019-07-09 00:01:40 |
+---------------------+
1 row in set (0.00 sec)

不須要在一行上給出所有查詢,因此須要多行的長查詢不是問題。mysql經過查找終止分號來肯定語句的結束位置,而不是查找輸入行的結尾(換句話說,mysql接受自由格式輸入:它收集輸入行但在看到分號以前不執行它們)。性能

這是一個簡單的多行語句:code

mysql> SELECT
    -> USER()
    -> ,
    -> CURRENT_DATE;
+---------------+--------------+
| USER()        | CURRENT_DATE |
+---------------+--------------+
| jon@localhost | 2019-07-09   |
+---------------+--------------+

在此示例中,請注意在輸入多行查詢的第一行後,提示如何從mysql>更改成->,這就是mysql如何代表它尚未看到完整的語句而且正在等待其他的語句,提示符號是你的朋友,由於它提供了有價值的反饋。若是你使用該反饋,你始終能夠了解mysql正在等待什麼。字符串

若是你決定不想執行正在輸入的查詢,請經過鍵入\c取消它:get

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 < 30;
    '>

若是輸入此SELECT語句,則按回車鍵並等待結果,沒有任何反應,而不是想知道爲何這個查詢花了這麼長時間,請注意'>提示符提供的線索。它告訴你mysql但願看到未終止的字符串的其他部分(你是否在語句中看到錯誤?字符串'Smith缺乏第二個單引號)。

此時,你要作什麼?最簡單的方法是取消查詢,可是,在這種狀況下,你不能只鍵入\c,由於mysql將其解釋爲它正在收集的字符串的一部分。相反,輸入結束引號字符(因此mysql知道你已經完成了字符串),而後鍵入\c

mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
    '> '\c
mysql>

提示符更改回mysql>,表示mysql已準備好進行新查詢。

`>提示符相似於'>「>提示符,但表示你已經開始但未完成反引號引用的標識符。

重要的是要知道'>「>`>提示符號是什麼意思,由於若是你錯誤地輸入了一個未終止的字符串,你輸入的任何其餘行彷佛都會被mysql忽略 — 包括一行包含QUIT的行。這可能很是使人困惑,特別是若是你不知道在取消當前查詢以前須要提供終止引用。

此時的多行語句是在沒有輔助( ->或其餘)提示符的狀況下編寫的,以便更容易地複製和粘貼語句,以便你本身嘗試。

上一篇:鏈接和斷開服務器

相關文章
相關標籤/搜索