close

8 MySQL教學課程

本章通過演示如何使用mysql客戶程式創造和使用一個簡單的資料庫,提供一個MySQL的入門教學課程。mysql(有時稱為“終端監視器”或只是“監視”)是一個交互式程式,允許你連接一個MySQL伺服器,運行查詢並察看結果。mysql可以用於批模式:你預先把查詢放在一個文件中,然後告訴mysql執行文件的內容。使用mysql的兩個方法都在這裡涉及。

為了看清由mysql提供的一個選擇項目表了,用--help選項調用它:

shell> mysql --help

本章假定mysql已經被安裝在你的機器上,並且有一個MySQL伺服器你可以連接。如果這不是真的,聯絡你的MySQL管理員。(如果是管理員,你將需要請教這本手冊的其他章節。)

本章描述建立和使用一個資料庫的全程序。如果你僅僅對存取一個已經存在資料庫感興趣,你可能想要跳過描述怎樣創建資料庫及它所包含的表的章節。

既然本章本質上是一個教學課程,許多細節有必要被省略。對於這裡所涉及的話題的更多資訊,咨詢本手冊的相關章節。

8.1 連接與斷開服務者

為了連接伺服器,當你調用mysql時,你通常將需要提供一個MySQL用戶名和很可能,一個密碼。如果伺服器運行在不是你登錄的一台機器上,你也將需要指定主機名。聯繫你的管理員以找出你應該使用什麼連接參數進行連接(即,那個主機,用戶名字和使用的密碼)。一旦你知道正確的參數,你應該能像這樣連接:

shell> mysql -h host -u user -p
Enter password: ********

********代表你的密碼﹔當mysql顯示Enter password:提示時輸入它。

如果能工作,你應該看見mysql>提示後的一些介紹資訊:

shell> mysql -h host -u user -p
Enter password: ********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 459 to server version: 3.22.20a-log

Type 'help' for help.

mysql> 

提示符告訴你mysql準備為你輸入命令。

一些MySQL安裝允許用戶以“anoymous”(匿名)用戶連接在本地主機上運行的伺服器。如果在你的機器是這種情況,你應該能通過沒有任何選項地調用mysql與該伺服器連接:

shell> mysql 
在你成功地連接後,你可以在mysql>提示下打入QUIT隨時斷開: 
mysql> QUIT
Bye

你也可以鍵入control-D斷開。

在下列章節的大多數例子都假設你連接到伺服器。由mysql>提示指明他們。

8.2 輸入查詢

確保你連接上了伺服器,如在先前的章節討論的。這樣做本身將不選擇任何資料庫來工作,但是那很好。從這點講,知道關於如何出詢問的一點知識,比馬上跳至創建表、給他們裝載數據並且從他們檢索數據要來的重要寫。本節描述輸入命令的基本原則,使用幾個查詢,你能嘗試讓自己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讓你進入跨越多行的字符串。當你看到一個'>">提示符時,這意味著你已經輸入了包含以“'”“"”括號字符開始的字符串的一行,但是還沒有輸入終止字符串的匹配引號。如果你確實正在輸入一個多行字符串,很好,但是果真如此嗎?不盡然。更常見的,'>">提示符顯示你粗心地省掉了一個引號字符。例如:

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的行!這可能相當含糊,特別是在你能取消當前命令前,如果你不知道你需要提出終止引號。

網路出處:http://twpug.net/docs/mysql323/manual_Tutorial.html

arrow
arrow
    創作者介紹
    創作者 Johnson峰 的頭像
    Johnson峰

    Johnson峰的部落格

    Johnson峰 發表在 痞客邦 留言(0) 人氣()