目前,市面上的數(shù)據(jù)庫(kù)產(chǎn)品多種多樣,從大型企業(yè)的解決方案到中小企業(yè)或個(gè)人用戶的小型應(yīng)用系統(tǒng),可以滿足用戶的多樣化需求。這里,我們所要向大家介紹的MySQL數(shù)據(jù)庫(kù)是眾多的關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品中的一個(gè),相比較其它系統(tǒng)而言,MySQL數(shù)據(jù)庫(kù)可以稱得上是目前運(yùn)行速度最快的SQL語(yǔ)言數(shù)據(jù)庫(kù)。除了具有許多其它數(shù)據(jù)庫(kù)所不具備的功能和選擇之外,MySQL數(shù)據(jù)庫(kù)是一種完全免費(fèi)的產(chǎn)品,用戶可以直接從網(wǎng)上下載數(shù)據(jù)庫(kù),用于個(gè)人或商業(yè)用途,而不必支付任何費(fèi)用(推薦下載站點(diǎn)http://www.mysql.com)。
總體來(lái)說(shuō),MySQL數(shù)據(jù)庫(kù)具有以下主要特點(diǎn):
1. 同時(shí)訪問(wèn)數(shù)據(jù)庫(kù)的用戶數(shù)量不受限制;
2. 可以保存超過(guò)50,000,000條記錄;
3. 是目前市場(chǎng)上現(xiàn)有產(chǎn)品中運(yùn)行速度最快的數(shù)據(jù)庫(kù)系統(tǒng);
4. 用戶權(quán)限設(shè)置簡(jiǎn)單、有效。
如今,包括Siemens和Silicon Graphics這樣的國(guó)際知名公司也開(kāi)始把MySQL作為其數(shù)據(jù)庫(kù)管理系統(tǒng),這就更加證明了MySQL數(shù)據(jù)庫(kù)的優(yōu)越性能和廣闊的市場(chǎng)發(fā)展前景。
本文將重點(diǎn)向讀者介紹MySQL數(shù)據(jù)庫(kù)的一些基本操作,包括如何與數(shù)據(jù)庫(kù)建立連接,如果設(shè)置數(shù)據(jù)庫(kù),以及如何執(zhí)行基本的命令等。希望能夠?qū)ψx者學(xué)習(xí)和掌握MySQL數(shù)據(jù)庫(kù)有所助益。
入門
一般來(lái)說(shuō),我們?cè)L問(wèn)MySQL數(shù)據(jù)庫(kù)時(shí),首先需要使用telnet遠(yuǎn)程登錄安裝數(shù)據(jù)庫(kù)系統(tǒng)的服務(wù)器,然后再進(jìn)入MySQL數(shù)據(jù)庫(kù)。MySQL數(shù)據(jù)庫(kù)的連接命令如下:
mysql -h hostname -u username -p[password]
或者:
mysql -h hostname -u username --password=password
其中,hostname為裝有MySQL數(shù)據(jù)庫(kù)的服務(wù)器名稱,username和password分別是用戶的登錄名稱和口令。
如果MySQL數(shù)據(jù)庫(kù)安裝和配置正確的話,用戶在輸入上述命令之后會(huì)得到如下系統(tǒng)反饋信息:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 49 to server version: 3.2 3-beta-log
Type help for help.
mysql$#@62;
這樣,用戶就成功進(jìn)入了MySQL數(shù)據(jù)庫(kù)系統(tǒng),可以在mysql$#@62;命令提示符之后輸入各種命令。下面,我們列出一些MySQL數(shù)據(jù)庫(kù)的主要管理命令供讀者參考,用戶也可以通過(guò)在命令符之后輸入help,\h或?得到以下命令的簡(jiǎn)單說(shuō)明。
mysql$#@62; help
help (\h) 顯示命令幫助
(\h) 作用同上
clear (\c) 清除屏幕內(nèi)容
connect (\r) 重新連接服務(wù)器,可選參數(shù)為 db(數(shù)據(jù)庫(kù))和 host(服務(wù)器)
exit (\) 退出mysql數(shù)據(jù)庫(kù),作用與quit命令相同
go (\g) 將命令傳送至mysql數(shù)據(jù)庫(kù)
print (\p) 打印當(dāng)前命令
quit (\q) 退出mysql數(shù)據(jù)庫(kù)
status (\s) 顯示服務(wù)器當(dāng)前信息
use (\u) 打開(kāi)數(shù)據(jù)庫(kù),以數(shù)據(jù)庫(kù)名稱作為命令參數(shù)
上述命令主要用于MySQL數(shù)據(jù)庫(kù)的系統(tǒng)管理,如果用戶需要對(duì)某個(gè)具體的數(shù)據(jù)庫(kù)進(jìn)行操作,可以使用use命令進(jìn)入該數(shù)據(jù)庫(kù),格式如下:
mysql$#@62; use dbname;
這里需要提醒讀者注意的一點(diǎn)就是MySQL數(shù)據(jù)庫(kù)要求使用者在所有命令的結(jié)尾處使用“;”作為命令結(jié)束符。
數(shù)據(jù)類型和數(shù)據(jù)表
從本質(zhì)上說(shuō),數(shù)據(jù)庫(kù)就是一種不斷增長(zhǎng)的復(fù)雜的數(shù)據(jù)組織結(jié)構(gòu)。在MySQL數(shù)據(jù)庫(kù)中,用于保存數(shù)據(jù)記錄的結(jié)構(gòu)被稱為數(shù)據(jù)表。而每一條數(shù)據(jù)記錄則是由更小的數(shù)據(jù)對(duì)象,即數(shù)據(jù)類型組成。因此,總體來(lái)說(shuō),一個(gè)或多個(gè)數(shù)據(jù)類型組成一條數(shù)據(jù)記錄,一條或多條數(shù)據(jù)記錄組成一個(gè)數(shù)據(jù)表,一個(gè)或多個(gè)數(shù)據(jù)表組成一個(gè)數(shù)據(jù)庫(kù)。我們可以把上述結(jié)構(gòu)理解為如下形式:
Database $#@60; Table $#@60; Record $#@60; Datatype
數(shù)據(jù)類型分為不同的格式和大小,可以方便數(shù)據(jù)庫(kù)的設(shè)計(jì)人員創(chuàng)建最理想的數(shù)據(jù)結(jié)構(gòu)。能否正確的選擇恰當(dāng)?shù)臄?shù)據(jù)類型對(duì)最終數(shù)據(jù)庫(kù)的性能具有重要的影響,因此,我們有必要首先對(duì)數(shù)據(jù)類型的有關(guān)概念進(jìn)行較為詳細(xì)的介紹。
MySQL 數(shù)據(jù)類型
MySQL 數(shù)據(jù)庫(kù)提供了多種數(shù)據(jù)類型,其中較為常用的幾種如下:
CHAR (M)
CHAR數(shù)據(jù)類型用于表示固定長(zhǎng)度的字符串,可以包含最多達(dá)255個(gè)字符。其中M代表字符串的長(zhǎng)度。
舉例如下:
car_model CHAR(10);
VARCHAR (M)
VARCHAR是一種比CHAR更加靈活的數(shù)據(jù)類型,同樣用于表示字符數(shù)據(jù),但是VARCHAR可以保存可變長(zhǎng)度的字符串。其中M代表該數(shù)據(jù)類型所允許保存的字符串的最大長(zhǎng)度,只要長(zhǎng)度小于該最大值的字符串都可以被保存在該數(shù)據(jù)類型中。因此,對(duì)于那些難以估計(jì)確切長(zhǎng)度的數(shù)據(jù)對(duì)象來(lái)說(shuō),使用VARCHAR數(shù)據(jù)類型更加明智。VARCHAR數(shù)據(jù)類型所支持的最大長(zhǎng)度也是255個(gè)字符。
這里需要提醒讀者注意的一點(diǎn)是,雖然VARCHAR使用起來(lái)較為靈活,但是從整個(gè)系統(tǒng)的性能角度來(lái)說(shuō),CHAR數(shù)據(jù)類型的處理速度更快,有時(shí)甚至可以超出VARCHAR處理速度的50%。因此,用戶在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)應(yīng)當(dāng)綜合考慮各方面的因素,以求達(dá)到最佳的平衡。
舉例如下:
car_model VARCHAR(10);
INT (M) [Unsigned]
INT數(shù)據(jù)類型用于保存從- 2147483647 到2147483648范圍之內(nèi)的任意整數(shù)數(shù)據(jù)。如果用戶使用Unsigned選項(xiàng),則有效數(shù)據(jù)范圍調(diào)整為0-4294967295。舉例如下:
light_years INT;
按照上述數(shù)據(jù)類型的設(shè)置,-24567為有效數(shù)據(jù),而3000000000則因?yàn)槌隽擞行?shù)據(jù)范圍成為無(wú)效數(shù)據(jù)。
再例如:
light_years INT unsigned;
這時(shí),3000000000成為有效數(shù)據(jù),而-24567則成為無(wú)效數(shù)據(jù)。
FLOAT [(M,D)]
FLOAT數(shù)據(jù)類型用于表示數(shù)值較小的浮點(diǎn)數(shù)據(jù),可以提供更加準(zhǔn)確的數(shù)據(jù)精度。其中,M代表浮點(diǎn)數(shù)據(jù)的長(zhǎng)度(即小數(shù)點(diǎn)左右數(shù)據(jù)長(zhǎng)度的總和),D表示浮點(diǎn)數(shù)據(jù)位于小數(shù)點(diǎn)右邊的數(shù)值位數(shù)。
舉例如下:
rainfall FLOAT (4,2);
按照上述數(shù)據(jù)類型的設(shè)置,42.35為有效數(shù)據(jù),而324.45和3.542則因?yàn)槌^(guò)數(shù)據(jù)長(zhǎng)度限制或者小數(shù)點(diǎn)右邊位數(shù)大于規(guī)定值2成為無(wú)效數(shù)據(jù)。
DATE
DATE數(shù)據(jù)類型用于保存日期數(shù)據(jù),默認(rèn)格式為YYYY-MM-DD。MySQL提供了許多功能強(qiáng)大的日期格式化和操作命令,本文無(wú)法在此一一進(jìn)行介紹,感興趣的讀者可以參看MySQL的技術(shù)文檔。
DATE數(shù)據(jù)類型舉例如下:
the_date DATE;
TEXT / BLOB
TEXT和BLOB數(shù)據(jù)類型可以用來(lái)保存255 到65535個(gè)字符,如果用戶需要把大段文本保存到數(shù)據(jù)庫(kù)內(nèi)的話,可以選用TEXT或BLOB數(shù)據(jù)類型。TEXT和BLOB這兩種數(shù)據(jù)類型基本相同,唯一的區(qū)別在于TEXT不區(qū)分大小寫(xiě),而B(niǎo)LOB對(duì)字符的大小寫(xiě)敏感。
SET
SET數(shù)據(jù)類型是多個(gè)數(shù)據(jù)值的組合,任何部分或全部數(shù)據(jù)值都是該數(shù)據(jù)類型的有效數(shù)據(jù)。SET數(shù)據(jù)類型最大可以包含64個(gè)指定數(shù)據(jù)值。
舉例如下:
transport SET ("truck", "wagon") NOT NULL;
根據(jù)上述數(shù)據(jù)類型的設(shè)置,truck、wagon、以及truck,wagon都可以成為transport的有效值。
ENUM
ENUM數(shù)據(jù)類型和SET基本相同,唯一的區(qū)別在于ENUM只允許選擇一個(gè)有效數(shù)據(jù)值。例如:
transport ENUM ("truck", "wagon") NOT NULL;
根據(jù)上述設(shè)置,truck或wagon將成為transport的有效數(shù)據(jù)值。
以上,我們只是對(duì)用戶使用MySQL數(shù)據(jù)庫(kù)的過(guò)程中經(jīng)常用到的數(shù)據(jù)類型進(jìn)行了簡(jiǎn)單介紹,有興趣的讀者,可以參看MySQL技術(shù)文檔的詳細(xì)說(shuō)明。
數(shù)據(jù)記錄
一組經(jīng)過(guò)聲明的數(shù)據(jù)類型就可以組成一條記錄。記錄小到可以只包含一個(gè)數(shù)據(jù)變量,大到可以滿足用戶的各種復(fù)雜需求。多條記錄組合在一起就構(gòu)成了數(shù)據(jù)表的基本結(jié)構(gòu)。
數(shù)據(jù)表
在我們執(zhí)行各種數(shù)據(jù)庫(kù)命令之前,首先需要?jiǎng)?chuàng)建用來(lái)保存信息的數(shù)據(jù)表。我們可以通過(guò)以下方式在MySQL數(shù)據(jù)庫(kù)中創(chuàng)建新的數(shù)據(jù)表:
mysql$#@62; CREATE TABLE test (
$#@62; name VARCHAR (15),
$#@62; email VARCHAR (25),
$#@62; phone_number INT,
$#@62; ID INT NOT NULL AUTO_INCREMENT,
$#@62; PRIMARY KEY (ID));
系統(tǒng)反饋信息為:
Query OK, 0 rows affected (0.10 sec)
mysql$#@62;
這樣,我們就在數(shù)據(jù)庫(kù)中創(chuàng)建了一個(gè)新的數(shù)據(jù)表。注意,同一個(gè)數(shù)據(jù)庫(kù)中不能存在兩個(gè)名稱相同的數(shù)據(jù)表。
這里,我們使用CREATE TABLE命令創(chuàng)建的test數(shù)據(jù)表中包含name,email,phone_number和ID四個(gè)字段。MySQL數(shù)據(jù)庫(kù)允許字段名中包含字符或數(shù)字,最大長(zhǎng)度可以達(dá)到64個(gè)字符。
下面,我們來(lái)看一看創(chuàng)建數(shù)據(jù)表時(shí)所用到的幾個(gè)主要的參數(shù)選項(xiàng)。
Primary Key
具有Primary Key限制條件的字段用于區(qū)分同一個(gè)數(shù)據(jù)表中的不同記錄。因?yàn)橥粋€(gè)數(shù)據(jù)表中不會(huì)存在兩個(gè)具有相同值的Primary Key字段,所以對(duì)于那些需要嚴(yán)格區(qū)分不同記錄的數(shù)據(jù)表來(lái)說(shuō),Primary Key具有相當(dāng)重要的作用。
Auto_Increment
具有Auto_Increment限制條件的字段值從1開(kāi)始,每增加一條新記錄,值就會(huì)相應(yīng)地增加1。一般來(lái)說(shuō),我們可以把Auto_Increment字段作為數(shù)據(jù)表中每一條記錄的標(biāo)識(shí)字段。
NOT NULL
NOT NULL限制條件規(guī)定用戶不得在該字段中插入空值。
其它數(shù)據(jù)表命令
除了創(chuàng)建新的數(shù)據(jù)表之外,MySQL數(shù)據(jù)庫(kù)還提供了其它許多非常實(shí)用的以數(shù)據(jù)表作為操作對(duì)象的命令。
顯示數(shù)據(jù)表命令
mysql$#@62; show tables;
該命令將會(huì)列出當(dāng)前數(shù)據(jù)庫(kù)下的所有數(shù)據(jù)表。
顯示字段命令
mysql$#@62; show columns from tablename;
該命令將會(huì)返回指定數(shù)據(jù)表的所有字段和字段相關(guān)信息。
數(shù)據(jù)操作
對(duì)MySQL數(shù)據(jù)庫(kù)中數(shù)據(jù)的操作可以劃分為四種不同的類型,分別是添加、刪除、修改和查詢,我們將會(huì)在本節(jié)中對(duì)此進(jìn)行介紹。但是,首先我們需要強(qiáng)調(diào)的一點(diǎn)就是MySQL數(shù)據(jù)庫(kù)所采用的SQL語(yǔ)言同其它絕大多數(shù)計(jì)算機(jī)編程語(yǔ)言一樣,對(duì)命令的語(yǔ)法格式有嚴(yán)格的規(guī)定。任何語(yǔ)法格式上的錯(cuò)誤,例如不正確的使用括號(hào)、逗號(hào)或分號(hào)等都可能導(dǎo)致命令執(zhí)行過(guò)程中的錯(cuò)誤。因此,建議用戶在學(xué)習(xí)時(shí)一定要多留心語(yǔ)法格式的使用。
添加記錄
用戶可以使用INSERT命令向數(shù)據(jù)庫(kù)中添加新的記錄。
例如:
mysql$#@62; INSERT INTO test VALUES
mysql$#@62; (John, carrots@mail.com,
mysql$#@62; 5554321, NULL);
上述命令正確執(zhí)行后會(huì)返回以下信息:
Query OK, 1 row affected (0.02 sec)
mysql$#@62;
對(duì)上述命令有幾點(diǎn)我們需要說(shuō)明。首先,所有的字符類型數(shù)據(jù)都必須使用單引號(hào)括起來(lái)。其次,NULL關(guān)鍵字與AUTO_INCREMENT限制條件相結(jié)合可以為字段自動(dòng)賦值。最后,也是最重要的一點(diǎn)就是新記錄的字段值必須與數(shù)據(jù)表中的原字段相對(duì)應(yīng),如果原數(shù)據(jù)表中有4個(gè)字段,而用戶所添加的記錄包含3個(gè)或5個(gè)字段的話都會(huì)導(dǎo)致錯(cuò)誤出現(xiàn)。
MySQL數(shù)據(jù)庫(kù)的一個(gè)非常顯著的優(yōu)勢(shì)就是可以對(duì)整數(shù)、字符串和日期數(shù)據(jù)進(jìn)行自動(dòng)轉(zhuǎn)換。因此,用戶在添加新記錄時(shí)就不必?fù)?dān)心因?yàn)閿?shù)據(jù)類型不相符而出現(xiàn)錯(cuò)誤。
查詢數(shù)據(jù)
如果我們無(wú)法從數(shù)據(jù)庫(kù)中查找和讀取數(shù)據(jù)的話,數(shù)據(jù)庫(kù)就喪失了其存在和使用的價(jià)值。
在MySql數(shù)據(jù)庫(kù)中,用戶可以使用SELECT命令進(jìn)行數(shù)據(jù)的查詢。
例如:
mysql$#@62; SELECT * FROM test
mysql$#@62; WHERE (name = "John");
上述命令會(huì)返回如下結(jié)果:
name | | phone | ID |
John | carrots@mail.com | 5554321 | 1 |
刪除數(shù)據(jù)
用戶除了可以向數(shù)據(jù)表中添加新的記錄之外,還可以刪除數(shù)據(jù)表中的已有記錄。刪除記錄可以使用DELETE命令。
例如:
mysql$#@62; DELETE FROM test
mysql$#@62; WHERE (name = "");
該命令將會(huì)刪除test數(shù)據(jù)表中name字段的值為John的記錄。同樣,
mysql$#@62; DELETE FROM test
mysql$#@62; WHERE (phone_number = 5554321);
將會(huì)從數(shù)據(jù)表中刪除phone_number字段值為5554321的記錄。
修改數(shù)據(jù)
MySQL數(shù)據(jù)庫(kù)還支持用戶對(duì)已經(jīng)輸入到數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行修改。修改記錄可以使用UPDATE命令。
例如:
mysql$#@62; UPDATE test SET name = Mary
mysql$#@62; WHERE name = "John";
上述命令的執(zhí)行結(jié)果如下:
name | | phone | ID |
Mary | carrots@mail.com | 5554321 | 1 |
到此為止,我們對(duì)MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)操作的核心概念,即數(shù)據(jù)的添加、刪除、修改和查詢進(jìn)行了簡(jiǎn)單的介紹。事實(shí)上,MySQL數(shù)據(jù)庫(kù)所支持的SQL語(yǔ)言具有非常豐富和強(qiáng)大的數(shù)據(jù)操作功能,感興趣的讀者可以參看網(wǎng)頁(yè)陶吧欄目?jī)?nèi)的相關(guān)文章。我們?cè)谶@里就不重復(fù)介紹了。