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