既然你知道怎樣輸入命令
現在是存取一個數據庫的時候了
假定在你的家(你的
動物園
)中有很多寵物
並且你想追蹤關於他們各種各樣類型的信息
你可以通過創建表來保存你的數據並根據所需要的信息裝載他們做到
然後你可以通過從表中檢索數據來回答關於你的動物不同種類的問題
本節顯示如何做到所有這些事情
怎樣創建一個數據庫
怎樣創建一個數據庫表
怎樣裝載數據到數據庫表
怎樣以各種方法從表中檢索數據
怎樣使用多個表
動物園數據庫將會是簡單的(故意的)
但是不難把它想象成可能用到相似類型數據庫的真實世界情況
例如
這樣的一個數據庫能被一個農夫用來追蹤家畜
或由一個獸醫追蹤病畜記錄
使用SHOW語句找出在服務器上當前存在什麼數據庫
mysql> SHOW DATABASES;
+
+
| Database |
+
+
| mysql |
| test |
| tmp |
+
+
數據庫列表可能在你的機器上是不同的
但是mysql和test數據庫很可能的在其間
mysql是必需的
因為它描述用戶存取權限
test數據庫經常作為一個工作區提供給用戶試試身手
如果test數據庫存在
嘗試存取它
mysql> USE test
Database changed
注意
USE
類似QUIT
不需要一個分號
(如果你喜歡
你可以用一個分號終止這樣的語句
這無礙)USE語句在使用上也有另外一個特殊的地方
它必須在一個單行上給出
你可列在後面的例子中使用test數據庫(如果你能訪問它)
但是你在該數據庫創建的任何東西可以被與訪問它的其他人刪除
為了這個原因
你可能應該詢問你的MySQL管理員許可你自己使用的一個數據庫
假定你想要調用你的menagerie
管理員需要執行一個這樣的命令
mysql> GRANT ALL ON menagerie
* TO your_mysql_name;
這裡your_mysql_name是分配給你的MySQL用戶名
創建並選用一個數據庫
如果在設置你的權限時
管理員為你創建了數據庫
你可以開始使用它
否則
你需要自己創建它
mysql> CREATE DATABASE menagerie;
在Unix下
數據庫名字是區分大小寫的(不像SQL關鍵詞)
因此你必須總是以menagerie引用你的數據庫
不是Menagerie
MENAGERIE或一些其他變種
對表名也是這樣的
(在Windows下
該限制不適用
盡管你必須在一個給定的查詢中使用同樣的大小寫來引用數據庫和表
)
創建了一個數據庫並不選定以使用它
你必須明確地做這件事
為了使menagerie稱為當前的數據庫
使用這個命令
mysql> USE menagerie
Database changed
你的數據庫只需要創建一次
但是你必須在每次啟動一個mysql會話時為使用而選擇它
你可以由發出上面一個USE語句做到
另外
當你調用時mysql
你可在命令行上選擇數據庫
就在你可能需要提供的任何連接參數之後指定其名字
例如
shell> mysql
h host
u user
p menagerie
Enter password: ********
注意
menagerie不是你在剛才所示命令的口令
如果你想要在命令行上在
p選項後提供你的口令
你必須做到沒有多余的空格(例如
如
pmypassword
不是
p mypassword)
然而
不建議把你的口令放在命令行上
因為這樣做把它暴露出來
能被在你的機器上登錄的其他用戶窺探到
創建一個數據庫表
創建數據庫是容易的部分
但是在這時它是空的
正如SHOW TABLES將告訴你
mysql> SHOW TABLES;
Empty set (
sec)
較難的部分是決定你的數據庫結構應該是什麼
你將需要什麼數據庫表
和在他們中有什麼樣的列
你將需要一個包含你每個寵物的記錄的表
它可稱為pet表
並且它應該包含
最少
每個動物的名字
因為名字本身不是很有趣
表應該包含另外的信息
例如
如果在你豢養寵物的家庭有超過一個人
你可能想要列出每個動物的主人
你可能也想要記錄例如種類和性別的一些基本的描述信息
年齡呢?那可能有趣
但是在一個數據庫中存儲不是一件好事情
年齡隨著時間流逝而變化
這意味著你將要不斷地更新你的記錄
相反
存儲一個固定值例如生日比較好
那麼
無論何時你需要年齡
你可以以當前日期和出生日期之間的差別來計算它
MySQL為日期運算提供了函數
因此這並不困難
存儲出生日期而非年齡也有其他優點
你可以將數據庫用於這樣的任務例如生成即將到來的寵物生日的提示
(如果你認為這類查詢是點蠢
注意
這與在一個商務數據庫來標示你不久要給它發出生日祝賀的客戶的環境中是同一個問題
因為計算機幫助私人聯絡
)
你可以相對於日期而不止是當前日期來計算年齡
例如
如果你在數據庫存儲死亡日期
你能容易計算一只寵物是何時多大死的
你可能想到pet表中其他有用的其他類型信息
但是到目前為止這些現在是足夠了
名字
主人
種類
性別
出生和死亡日期
使用一個CREATE TABLE語句指定你的數據庫表的布局
mysql> CREATE TABLE pet (name VARCHAR(
)
owner VARCHAR(
)
> species VARCHAR(
)
sex CHAR(
)
birth DATE
death DATE);
VARCHAR對name
owner和species列是個好的選擇
因為列值將會是變長的
這些列的長度都不必是相同的
而且不必是
你可以挑選從
到
的任何長度
無論哪個對你來說好象最合理
(如果你做了較差的選擇
以後會變得你需要一個更長的字段
MySQL提供一個ALTER TABLE語句
)
動物性表可以用許多方法表示
例如
m
和
f
或也許
male
和
female
使用單個字符
m
和
f
是最簡單的
為birth和death列使用DATE數據類型是相當明顯的選擇
既然你創建了一個表
SHOW TABLES應該產生一些輸出
mysql> SHOW TABLES;
+
+
| Tables in menagerie |
+
+
| pet |
+
+
為了驗證你的表是按你期望的方式被創建
使用一個DESCRIBE語句
mysql> DESCRIBE pet;
+
+
+
+
+
+
+
| Field | Type | Null | Key | Default | Extra |
+
+
+
+
+
+
+
| name | varchar(
) | YES | | NULL | |
| owner | varchar(
) | YES | | NULL | |
| species | varchar(
) | YES | | NULL | |
| sex | char(
) | YES | | NULL | |
| birth | date | YES | | NULL | |
| death | date | YES | | NULL | |
+
+
+
+
+
+
+
你能隨時DESCRIBE
例如
如果你忘記在你表中的列的名字或他們是什麼類型
將數據裝入一個數據庫表
在你創建表後
你需要充實它
LOAD DATA和INSERT語句用於此
假定你的寵物紀錄描述如下
(觀察到MySQL期望日期時以YYYY
MM
DD格式
這可能與你習慣的不同
)
name owner species sex birth death
Fluffy Harold cat f
Claws Gwen cat m
Buffy Harold dog f
Fang Benny dog m
Bowser Diane dog m
Chirpy Gwen bird f
Whistler Gwen bird
Slim Benny snake m
因為你是從一張空表開始的
充實它的一個容易方法是創建包含為你的動物各一行一個文本文件
然後用一個單個語句裝載文件的內容到表中
你可以創建一個文本文件
pet
txt
每行包含一個記錄
用定位符(tab)把值分開
並且以在CREATE TABLE語句中列出的列次序給出
對於丟失的值(例如未知的性別
或仍然活著的動物的死亡日期)
你可以使用NULL值
為了在你的文本文件表示這些
使用\N
例如
對Whistler鳥的記錄看起來像這樣的(這裡在值之間的空白是一個單個的定位字符)
Whistler Gwen bird \N
\N
為了裝載文本文件
pet
txt
到pet表中
使用這個命令
mysql> LOAD DATA LOCAL INFILE
pet
txt
INTO TABLE pet;
如果你願意
你能明確地在LOAD DATA語句中指出列值的分隔符和行尾標記
但是缺省是定位符和換行符
這些對爭取讀入文件
pet
txt
的語句是足夠的
當你想要一次增加一個新記錄時
INSERT語句是有用的
在它最簡單的形式
你為每一列提供值
以列在CREATE TABLE語句被列出的順序
假定Diane把一只新倉鼠命名為Puffball
你可以使用一個這樣INSERT語句增加一條新記錄
mysql> INSERT INTO pet
> VALUES (
Puffball
Diane
hamster
f
NULL);
注意
這裡字符串和日期值被指定為引號擴起來的字符串
另外
用INSERT
你能直接插入NULL代表不存在的值
你不能使用\N
就像你用LOAD DATA做
From:http://tw.wingwit.com/Article/program/MySQL/201311/29518.html