相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  教學  /  輸入查詢

5.2 輸入查詢

請確認您已連線至伺服器,如前一節所述。這樣做本身並不會選取任何要使用的資料庫,但這沒關係。此時,了解如何發出查詢比直接跳入建立表格、載入資料至表格和從表格檢索資料更重要。本節描述輸入查詢的基本原則,使用您可以試用的幾個查詢來熟悉 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 的行。這可能會非常令人困惑,尤其是在您不知道必須先提供結束引號,才能取消目前的查詢時。

注意

從現在開始,多行陳述式將不使用次要的(-> 或其他)提示符號編寫,以便更容易複製和貼上這些陳述式來自行嘗試。