MySQL使用簡單教程(參考MySQL官方文檔)
本文通過演示如何使用MySQL客戶機程序創建和使用一個簡單的數據庫,允許連接到MySQL服務器、運行查詢和查看結果。
mysql也可以在批處理模式下使用:預先將查詢放在文件中,然后告訴mysql執行文件的內容。
要查看mysql提供的選項列表,請使用--help選項調用它:
1 shell> mysql --help
本文假設mysql已安裝在您的計算機上,並且可以連接到mysql服務器
本文描述了建立和使用數據庫的整個過程。如果您只對訪問現有數據庫感興趣,可以跳過本文。
因為本文本質上是教程,所以許多細節都必須省略。有關此處所述主題的更多信息,請參閱MySQL官方手冊的相關章節。
一、連接和斷開與服務器的連接
要連接到服務器,通常需要在調用MySQL時提供MySQL用戶名,很可能還有密碼。如果服務器在您登錄的計算機以外的計算機上運行,則還需要指定主機名。
1 shell> mysql -h host -u user -p 2 Enter password: ********
host和user表示運行MySQL服務器的主機名和MySQL帳戶的用戶名。如果可以,您應該看到一些介紹性信息,然后是mysql>提示:
1 shell> mysql -h host -u user -p 2 Enter password: ******** 3 Welcome to the MySQL monitor. Commands end with ; or \g. 4 Your MySQL connection id is 25338 to server version: 5.7.30-standard 5 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. 6 mysql>
如果在運行MySQL的同一台計算機上登錄,則可以省略主機,只需使用以下命令:
1 shell> mysql -u user -p
I如果嘗試登錄時收到錯誤消息,如錯誤2002(HY000):無法通過套接字'/tmp/MySQL.sock'連接到本地MySQL服務器(2),這意味着MySQL服務器守護進程(Unix)或服務(Windows)沒有運行。
有些MySQL安裝允許用戶作為匿名(未命名)用戶連接到本地主機上運行的服務器。如果您的計算機上是這種情況,則應該可以通過調用mysql連接到該服務器,而無需任何選項:
1 shell> mysql
成功連接后,您可以隨時在mysql>提示:
1 mysql> QUIT 2 Bye
在Unix上,也可以通過按Control+D斷開連接。
二、輸入查詢
如之前所述,確保已連接到服務器。這樣做本身不會選擇任何要使用的數據庫
本節介紹輸入查詢的基本原則,可以嘗試使用幾個查詢來熟悉mysql的工作原理。
這里有一個簡單的查詢,要求服務器告訴您它的版本號和當前日期。在mysql>提示下,按如下所示鍵入並按Enter鍵:
1 mysql> SELECT VERSION(), CURRENT_DATE; 2 +--------------+--------------+ 3 | VERSION() | CURRENT_DATE | 4 +--------------+--------------+ 5 | 5.7.1-m4-log | 2012-12-25 | 6 +--------------+--------------+ 7 1 row in set (0.01 sec)
這個查詢說明了mysql的幾個方面:
•查詢通常由SQL語句和分號組成。(在某些情況下,分號可以省略。前面提到的退出就是其中之一。我們稍后再討論其他問題。
•當您發出一個查詢時,mysql將其發送到服務器執行並顯示結果,然后打印另一個mysql>提示符,以指示它已准備好進行另一個查詢。
•mysql以表格形式(行和列)顯示查詢輸出。第一行包含列的標簽。下面的行是查詢結果。通常,列標簽是從數據庫表中獲取的列的名稱。
如果要檢索表達式的值而不是表列(如剛剛顯示的示例所示),mysql將使用表達式本身標記列。
•mysql顯示了返回的行數和執行查詢所需的時間,這讓您大致了解了服務器性能。這些值不精確,因為它們不是CPU或機器時間,並且它們受服務器負載和網絡延遲等因素的影響。
關鍵字可以輸入任何字母大小寫。以下查詢是等效的:
1 mysql> SELECT VERSION(), CURRENT_DATE; 2 mysql> select version(), current_date; 3 mysql> SeLeCt vErSiOn(), current_DATE;
一個查詢不需要全部放在一行上,因此需要幾行的冗長查詢不是問題。mysql通過查找結束分號而不是輸入行的結尾來確定語句的結束位置。
(換句話說,mysql接受自由格式輸入:它收集輸入行,但在看到分號之前不會執行它們。)
下面是一個簡單的多行語句:
1 mysql> SELECT 2 -> USER() 3 -> , 4 -> CURRENT_DATE; 5 +---------------+--------------+ 6 | USER() | CURRENT_DATE | 7 +---------------+--------------+ 8 | jon@localhost | 2010-08-06 | 9 +---------------+--------------+
請注意在您輸入多行查詢的第一行后,提示如何從mysql>更改為->。這就是mysql表示它還沒有看到完整的語句並在等待其他語句的方式。
提示是有必要的,因為它提供了有價值的反饋,你可以隨時知道mysql在等待什么。
如果決定不執行正在輸入的查詢,請鍵入
1 \c: 2 mysql> SELECT 3 -> USER() 4 -> \c 5 mysql>
這里,也注意提示。在您鍵入\c之后,它會切換回mysql>,提供反饋以指示mysql已准備好進行新的查詢。
提示 意義
mysql> 准備好進行新查詢
-> 等待下一行多行查詢
'> 等待下一行,等待以單引號(')開頭的字符串完成
"> 等待下一行,等待以雙引號(“)開頭的字符串完成
`> 等待下一行,等待以倒勾(`)開頭的標識符完成
/*> 等待下一行,等待以/*
三、創建和使用數據庫
一旦知道如何輸入SQL語句,就可以訪問數據庫了。
假設(你的動物園)有幾只寵物,你想跟蹤它們的各種信息。您可以通過創建表來保存數據並加載
他們有想要的信息。然后你可以通過從表格中檢索數據來回答關於你的動物的各種問題。本節介紹如何執行以下操作:
• Create a database
• Create a table
• Load data into the table
• 以各種方式從表中檢索數據
• 使用多個表
動物園數據庫很簡單(故意),但不難想象在現實世界中可能會使用類似類型的數據庫。例如,這樣的數據庫可以被農民用來跟蹤牲畜,也可以被獸醫用來跟蹤病人記錄。
使用Stand語句查找服務器上當前存在的數據庫:
1 mysql> SHOW DATABASES; 2 +----------+ 3 | Database | 4 +----------+ 5 | mysql | 6 | test | 7 | tmp | 8 +----------+
mysql數據庫描述了用戶訪問權限。測試數據庫通常可以作為用戶嘗試的工作區。
語句顯示的數據庫列表在您的計算機上可能不同;如果您沒有“顯示數據庫”權限,則“顯示數據庫”不會顯示您沒有權限的數據庫。
如果存在測試數據庫,請嘗試訪問它:
1 mysql> USE test 2 Database changed
像QUIT一樣,USE不需要分號。(如果您願意,可以用分號來終止這些語句;使用說明在另一方面也很特別:必須在一行上給出。
您可以在下面的示例中使用測試數據庫(如果您有權訪問它),但是您在該數據庫中創建的任何內容都可以被其他有權訪問它的人刪除。
1> 創建和選擇數據庫
如果管理員在設置權限時為您創建數據庫,您可以開始使用它。否則,您需要自己創建它:
1 mysql> CREATE DATABASE menagerie;
在Unix下,數據庫名稱是區分大小寫的(與SQL關鍵字不同),因此必須始終將數據庫引用menagerie, not as Menagerie, MENAGERIE或其他變量。對於表名也是如此。
注意
如果出現錯誤,例如錯誤1044(42000):用戶“micah”@“localhost”的訪問被拒絕在嘗試創建數據庫時指向數據庫“menagerie”,這意味着您的用戶帳戶沒有創建數據庫所需的權限。
創建數據庫並沒有選擇要使用的數據庫;你必須明確地做到這一點。要使menagerie成為當前數據庫,請使用以下語句:
1 mysql> USE menagerie 2 Database changed
數據庫只需要創建一次,但每次啟動mysql會話時都必須選擇使用它。您可以通過發出USE語句來完成此操作,
可以隨時使用SELECT database()查看當前選擇的數據庫。
2> 創建表
創建數據庫很簡單,但此時它是空的,如SHOW TABLES所示:
1 mysql> SHOW TABLES; 2 Empty set (0.00 sec)
更難的是決定數據庫的結構應該是什么:您需要什么表,每個表中應該有哪些列。
使用CREATE TABLE語句指定表的布局:
1 mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), 2 species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
VARCHAR對於name、owner和species列是一個不錯的選擇,因為列的值在長度上有所不同。這些列定義中的長度不必全部相同,也不必是20。你通常可以選擇任何長度從1到65535,只要你覺得最合理的。
如果您做了一個錯誤的選擇,后來發現您需要一個更長的字段,MySQL會提供一個ALTER TABLE語句。
要驗證表是否按預期方式創建,請使用DESCRIBE語句:
1 mysql> DESCRIBE pet; 2 +---------+-------------+------+-----+---------+-------+ 3 | Field | Type | Null | Key | Default | Extra | 4 +---------+-------------+------+-----+---------+-------+ 5 | name | varchar(20) | YES | | NULL | | 6 | owner | varchar(20) | YES | | NULL | | 7 | species | varchar(20) | YES | | NULL | | 8 | sex | char(1) | YES | | NULL | | 9 | birth | date | YES | | NULL | | 10 | death | date | YES | | NULL | | 11 +---------+-------------+------+-----+---------+-------+
3> 將數據加載到表中
創建表后,需要填充它。LOAD DATA和INSERT語句對此很有用。
假設您的寵物記錄可以如圖所示進行描述。
1 name owner species sex birth death 2 Fluffy Harold cat f 1993-02-04 3 Claws Gwen cat m 1994-03-17 4 Buffy Harold dog f 1989-05-13 5 Fang Benny dog m 1990-08-27 6 Bowser Diane dog m 1979-08-31 1995-07-29 7 Chirpy Gwen bird f 1998-09-11 8 Whistler Gwen bird 1997-12-09 9 Slim Benny snake m 1996-04-29
因為您是從一個空表開始的,填充它的一個簡單方法是為每個動物創建一個包含一行的文本文件,然后用一個語句將文件的內容加載到表中。
您可以創建一個文本文件pet.txt,其中每行包含一條記錄,值由制表符分隔,並按照create TABLE語句中列的順序給定。對於丟失的值(例如未知性別或仍在生存的動物的死亡日期),可以使用空值。
要在文本文件中表示這些內容,請使用\N(反斜杠,大寫N)。例如,Whistler the bird的記錄如下所示(其中值之間的空白是單個制表符):
Whistler Gwen bird \N 1997-12-09 \N
要將文本文件pet.txt加載到pet表中,請使用以下語句:
1 mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
當您想一次添加一條新記錄時,INSERT語句非常有用。在最簡單的形式中,按照列在CREATE表中列出的順序為每一列提供值
1 mysql> INSERT INTO pet
2 VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
4> 從表中檢索信息
SELECT語句用於從表中提取信息。聲明的一般形式是:
1 SELECT what_to_select 2 FROM which_table 3 WHERE conditions_to_satisfy;
SELECT的最簡單形式是從表中檢索所有內容:
1 mysql> SELECT * FROM pet; 2 +----------+--------+---------+------+------------+------------+ 3 | name | owner | species | sex | birth | death | 4 +----------+--------+---------+------+------------+------------+ 5 | Fluffy | Harold | cat | f | 1993-02-04 | NULL | 6 | Claws | Gwen | cat | m | 1994-03-17 | NULL | 7 | Buffy | Harold | dog | f | 1989-05-13 | NULL | 8 | Fang | Benny | dog | m | 1990-08-27 | NULL | 9 | Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 | 10 | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | 11 | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | 12 | Slim | Benny | snake | m | 1996-04-29 | NULL | 13 | Puffball | Diane | hamster| f | 1999-03-30 | NULL | 14 +----------+--------+---------+------+------------+------------+
•選擇特定行
•選擇特定列
•排序行
•日期計算
•使用空值
•模式匹配
•計算行數
以上不做詳細介紹,請參考MySQL官方文檔

