1.0 使用SHOW語句找出服務器上當前存在什么數據庫:
mysql> SHOW DATABASES;
每台機器上的數據庫列表是不同的,但是很可能有mysql和test數據庫。mysql是必需的,因為它描述用戶訪問權限,test數據庫經常作為用戶試身手的工作區。
可見我的數據庫里面沒有test。
2.0 沒有就自己創建:
現在假設一個場景,假定在一個小動物園中有很多寵物,現在想跟蹤關於它們各種類型的信息。我們通過創建表來保存數據並根據所需要的信息裝載他們,然后可以從表中檢索數據來回答關於動物不同種類的問題。
在Unix下,數據庫名稱是區分大小寫的(不像SQL關鍵字),因此你必須總是以menagerie訪問數據庫,而不能用Menagerie、MENAGERIE或其它一些變量。
對表名也是這樣的。(在Windows下,該限制不適用,盡管你必須在一個給定的查詢中使用同樣的大小寫來引用數據庫和表。但是,由於多種原因,作為最好的慣例,一定要使用與數據庫創建時的同樣的大小寫。)
mysql> CREATE DATABASE menagerie;
3.0 menagerie(小動物園)數據庫我們可以訪問它:
mysql>USE menagerie
USE,類似QUIT,不需要一個分號。(如果你喜歡,你可以用一個分號終止這樣的語句;這無礙)USE語句在使用上也有另外一個特殊的地方:它必須在一個單行上給出。
數據庫只需要創建一次,但是必須在每次啟動mysql會話時在使用前先選擇它。你可以根據上面的例子執行一個USE語句來實現。還可以在調用mysql時,通過命令行選擇數據庫,只需要在提供連接參數之后指定數據庫名稱。例如:
shell> mysql -h host -u user -p menagerie
Enter password: ********
注意,剛才顯示的命令行中的menagerie不是你的 密碼。如果你想要在命令行上在-p選項后提供 密碼,則不能插入空格(例如,如-pmypassword,不是-p mypassword)。但是,不建議在命令行輸入密碼,因為這樣會暴露 密碼,能被在機器上登錄的其它用戶窺探到。
4.0 在該數據庫創建的任何東西可以被訪問它的其它人刪除,因此,你應該詢問MySQL管理員許可你使用自己的一個數據庫。假定你想要調用你的menagerie,管理員需要執行這樣一條命令:
mysql> GRANT ALL ON menagerie.* TO 'your_mysql_name'@'your_client_host';
這里your_mysql_name是分配給你的MySQL用戶名,your_client_host是所連接的服務器所在的主機。
5.0 創建數據庫是很容易的部分,但是在這時它是空的,正如SHOW TABLES將告訴你的:
mysql> SHOW TABLES;
6.0 較難的部分是決定你的數據庫結構應該是什么:你需要什么數據庫表,各數據庫表中有什么樣的列。
根據假設,我現在包含每個寵物記錄的表,命名為pet表。它可能存在某些信息:
名字 動物的主人 種類 性別 年齡
其中,年齡比較特殊,年齡隨着時間流逝而變化,這意味着你將要不斷地更新你的記錄。單獨存儲一個年齡某個數據很顯然不是很好的解決方案,相反, 存儲一個固定值例如生日比較好,那么,無論何時你需要年齡,可以以當前日期和出生日期之間的差來計算它。MySQL提供了日期運算函數,因此這並不困難。存儲出生日期而非年齡還有其它優點:
- 你可以使用數據庫完成這樣的任務,例如生成即將到來的寵物生日的提示。
- 你可以相對於日期而不止是當前日期來計算年齡。例如,如果你在數據庫存儲死亡日期,你能很容易地計算出一只寵物死時有多大。
那么我們的數據庫pet表內元素優化為:
名字 動物的主人 種類 性別 出生和死亡日期
7.0 使用一個CREATE TABLE語句指定你的數據庫表的布局:
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
可以隨時使用DESCRIBE,例如,如果忘記表中的列的名稱或類型時。
8.0 創建表后,需要填入內容。通過LOAD DATA和INSERT語句可以完成該任務。
假定我的寵物紀錄描述如下。(假定在MySQL中期望的日期格式是YYYY-MM-DD;這可能與平常習慣的不同。)
name |
owner |
species |
sex |
birth |
death |
Fluffy |
Harold |
cat |
f |
1993-02-04 |
|
Claws |
Gwen |
cat |
m |
1994-03-17 |
|
Buffy |
Harold |
dog |
f |
1989-05-13 |
|
Fang |
Benny |
dog |
m |
1990-08-27 |
|
Bowser |
Diane |
dog |
m |
1979-08-31 |
1995-07-29 |
Chirpy |
Gwen |
bird |
f |
1998-09-11 |
|
Whistler |
Gwen |
bird |
|
1997-12-09 |
|
Slim |
Benny |
snake |
m |
1996-04-29 |
|
9.0 填充這么多數據一行行輸入時很笨的方法。因為是從一個空表開始的,填充它的一個簡易方法是創建一個文本文件,每個動物各一行,然后用一個語句將文件的內容裝載到表中。
創建一個文本文件“pet.txt”,每行包含一個記錄,用定位符(tab)把值分開,並且以CREATE TABLE語句中列出的列次序給出。對於丟失的值(例如未知的性別,或仍然活着的動物的死亡日期),你可以使用NULL值。為了在你的文本文件中表示這些內容,使用\N(反斜線,字母N)。例如,Whistler鳥的記錄應為(這里值之間的空白是一個定位符):
要想將文本文件“pet.txt”裝載到pet表中,使用這個命令:
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
請注意如果用Windows中的編輯器(使用\r\n做為行的結束符)創建文件,應使用:(在運行OS X的Apple機上,應使用行結束符'\r'。)
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
-> LINES TERMINATED BY '\r\n';
(在運行OS X的Apple機上,應使用行結束符'\r'。)
pet.txt文件,放在G盤下面)(里面的空格都是按Tab鍵,不是一個或很多空格鍵造成的)。
第一次執行命令時,報出這樣的錯誤:
原因是txt文件保存時默認ANSI格式,我們需要改成和mysql要求的格式utf-8一樣的:
顯示成功導入,並羅列出列表,在pet.txt文檔中"null"也可以改成“\n”,從代碼中可知,在mysql語句中,地址路徑的寫法同linux,windows系統的是"G:\pet.txt",而linux/mysql用的是“G:/pet.txt”,不能用錯。
10.0 如果想要一次增加一個新記錄,可以使用INSERT語句。假定張發財把一只新倉鼠命名為Puffball,你可以使用下面的INSERT語句添加一條新記錄:
mysql> INSERT INTO pet
-> VALUES ('Puffball','張發財','hamster','f','1999-03-30',NULL);

可見,可以直接用INSERT語句插入“NULL”代表不存在的值。不能使用LOAD DATA中所示的的”\N”。
END