請確認您已連線至伺服器,如前一節所述。這樣做本身並不會選取任何要使用的資料庫,但這沒關係。此時,了解如何發出查詢比直接跳入建立表格、載入資料至表格和從表格檢索資料更重要。本節描述輸入查詢的基本原則,使用您可以試用的幾個查詢來熟悉 mysql 的運作方式。
以下是一個簡單的查詢,要求伺服器告訴您其版本號碼和目前日期。在 mysql>
提示符號後輸入如下所示的內容,然後按下 Enter 鍵。
mysql> SELECT VERSION(), CURRENT_DATE;
+-----------+--------------+
| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 8.4.0-tr | 2024-01-25 |
+-----------+--------------+
1 row in set (0.00 sec)
mysql>
此查詢說明了 mysql 的幾個事項
查詢通常由 SQL 陳述式後接分號組成。(有些例外情況可以省略分號。
QUIT
,之前提到過,就是其中之一。我們稍後會介紹其他的。)當您發出查詢時,mysql 會將其傳送到伺服器執行並顯示結果,然後列印另一個
mysql>
提示符號,表示它已準備好進行另一個查詢。mysql 以表格形式(列和欄)顯示查詢輸出。第一列包含欄的標籤。後面的列是查詢結果。通常,欄標籤是您從資料庫表格擷取的欄名稱。如果您擷取的是運算式的值,而不是表格欄(如剛才所示的範例),mysql 會使用運算式本身標記欄。
mysql 會顯示傳回的列數以及查詢執行所需的時間,這讓您對伺服器的效能有大致的了解。這些值不精確,因為它們代表的是實際時間(而非 CPU 或機器時間),並且會受到伺服器負載和網路延遲等因素的影響。(為了簡潔起見,「rows in set」 行有時不會顯示在本章的其餘範例中。)
關鍵字可以使用任何大小寫輸入。以下查詢是等效的
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.4.0-tr |
+-----------+
1 row in set (0.00 sec)
+---------------------+
| NOW() |
+---------------------+
| 2024-01-25 18:33:04 |
+---------------------+
1 row in set (0.00 sec)
查詢不一定要全部放在單行上,因此需要多行的冗長查詢不是問題。mysql 會藉由尋找結束分號,而不是尋找輸入行的結尾來判斷陳述式的結束位置。(換句話說,mysql 接受自由格式的輸入:它會收集輸入行,但直到看到分號才會執行它們。)
以下是一個簡單的多行陳述式
mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
+---------------+--------------+
| USER() | CURRENT_DATE |
+---------------+--------------+
| jon@localhost | 2018-08-24 |
+---------------+--------------+
在此範例中,請注意在您輸入多行查詢的第一行後,提示符號如何從 mysql>
變更為 ->
。這就是 mysql 指示它尚未看到完整陳述式,正在等待其餘部分的方式。提示符號是您的好朋友,因為它提供寶貴的回饋。如果您使用該回饋,您就可以隨時了解 mysql 正在等待什麼。
如果您決定不想執行正在輸入的查詢,請輸入 \c
來取消它
mysql> SELECT
-> USER()
-> \c
mysql>
在這裡,也請注意提示符號。在您輸入 \c
後,它會切換回 mysql>
,提供回饋以指示 mysql 已準備好進行新的查詢。
下表顯示您可能會看到的每個提示符號,並摘要說明它們對 mysql 狀態的含義。
提示符號 | 含義 |
---|---|
mysql> |
準備好進行新查詢 |
-> |
-> |
'> |
等待多行查詢的下一行 |
"> |
'> |
`> |
等待下一行,等待完成以單引號 (' ) 開頭的字串 |
/*> |
"> |
等待下一行,等待完成以雙引號 ("
) 開頭的字串
mysql> SELECT USER()
->
`>
mysql> SELECT USER()
-> ;
+---------------+
| USER() |
+---------------+
| jon@localhost |
+---------------+
在字串收集期間(換句話說,MySQL 等待字串完成)會出現 '>
和 ">
提示符號。在 MySQL 中,您可以使用 '
或 "
字元包圍字串(例如,'hello'
或 "goodbye"
),而 mysql 允許您輸入跨越多行的字串。當您看到 '>
或 ">
提示符號時,表示您輸入的行包含以 '
或 "
引號字元開頭的字串,但尚未輸入與之匹配的結束引號。這通常表示您不小心遺漏了引號字元。例如:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>
如果您輸入這個 SELECT
陳述式,然後按下 Enter 並等待結果,則不會發生任何事情。與其想知道為什麼這個查詢需要這麼長時間,不如注意 '>
提示符號所提供的線索。它告訴您 mysql 正在等待看到未終止字串的其餘部分。(您看到陳述式中的錯誤了嗎?字串 'Smith
缺少第二個單引號。)
此時,您該怎麼辦?最簡單的方法是取消查詢。但是,在這種情況下,您不能只輸入 \c
,因為 mysql 會將其解讀為正在收集的字串的一部分。相反地,請輸入結束引號字元(以便 mysql 知道您已完成字串),然後輸入 \c
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'> '\c
mysql>
提示符號會變回 mysql>
,表示 mysql 已準備好接收新的查詢。
`>
提示符號與 '>
和 ">
提示符號類似,但表示您已開始但尚未完成以反引號括住的識別符號。
了解 '>
、">
和 `>
提示符號的含義非常重要,因為如果您錯誤地輸入未終止的字串,則您輸入的任何其他行都會被 mysql 忽略 — 包括包含 QUIT
的行。這可能會非常令人困惑,尤其是在您不知道必須先提供結束引號,才能取消目前的查詢時。
從現在開始,多行陳述式將不使用次要的(->
或其他)提示符號編寫,以便更容易複製和貼上這些陳述式來自行嘗試。