MySQL是一個快速、多執行序(Multithread)、多使用者,以及功能強大的關聯式資料庫管理系統(Relational database management system,RDBMS)。它可以輕易地與C、C++、Java、Perl、PHP等語言作連結,也能夠運行於多種不同的作業平台上,包括Solaris、RedHat、Linux、FreeBSD、OS/2、Windows等都可以安裝這個功能強大的開放原始碼資料庫軟體。
MySQL的優點與特性
MySQL基本的SQL指令執行效率非常地快速,尤其是 “select/insert/update” 等相關指令執行的速度比商業軟體的資料庫(如MSSQL、Oracle)還要快上許多。MySQL同時也支援許多不同的語言,中文的Big5也在支援的名單內。
雖然MySQL是以Open Source為出發點的軟體,但它並不完全是一個免費的軟體,因為其版權在某些情況下是需要付費的,例如將它與其它產品一起包裝與販售、商業或營利單位使用,或製成一個套件等都需要付版權費。不過對於個人及非營利單位來說,它並不需要付任何的費用,且可任意地下載使用。
MySQL所收取的授權費主要是用來協助MySQL的研發所需,這也算是對為開放原始碼軟體作出貢獻的一些社群鼓勵。且透過這樣的付費機制,MySQL將會在這些社群的研發下,成長得更為茁壯、延展性也會更強。不過讀者要注意的一點是,「MySQL」的正確發音是「My Ess Que Ell」,而不是「My Sequel」。
當然,MySQL雖然是一款開放原始碼軟體,但性能卻一點也不遜於一般的商業軟體,下面就列出一些MySQL的優點:
- * MySQL是免費的,且可提供原始碼,並支援中文Big5碼。
- * MySQL的速度非常快,甚至比Oracle、MSSQL快,但功能項目卻不如Oracle完整。不過以網頁的前端介面而言,若未用到過量的資料交換(Transaction),則差別就不會很大。
- * MySQL並無人數限制,完全視使用者的配備機器等級而定。不過和一些以Client的人數來作計費的資料庫系統相比,其建置成本幾乎是微不足道。
- * 可設定系統密碼及個人使用權限。
- * 有可變和固定的記錄(Records)大小。
- * 每個表格允許有16個索引,而每個索引可以由1至16個列,或列的一部份組成。其最大索引的長度可達256 Bytes。
- * 所有的欄位都可以有預設值。
- * 包含了Isamchk這個工具。其工具可讓使用者快速檢查、最佳化和修復資料庫。
- * 支援了ODBC的所有功能。舉例來說,使用者可以使用MS – Access連上MySQL Server來作管理或傳輸的動作。
- * MySQL在設計之初就是以速度為第一考量,即使資料庫的Data超過100 GB,它也一樣能夠正常使用,並不會出現當機或延遲的情形。
- * 支援遠端操控的功能,使用者可透過網路來存取或傳送資料。也就是說,我們可以透過網路將資料庫的資料送到遠端目的地,也可以將遠端電腦的資料傳進資料庫。
MySQL的不足之處
每個資料庫系統都有不同的優點與缺點,而MySQL也不例外。在這裡,我們將它與Access作個簡單的比較。
關聯性資料庫管理系統
Access是一個關聯性資料庫管理系統(Relational Database Management System,RDBMS),而MySQL卻並非在每一個層面都可以當作這種系統來使用。這也意味著,雖然MySQL很好用,但它還不是最好的資料庫軟體,因為MySQL無法處理複雜的關聯性資料庫,如子查詢(Subqueries)的功能。不過還是有替代方案,就是使用者可將大多數的子查詢功能改寫成“Join”,雖然意思不同,但功能卻很類似子查詢。
交易、確認/撤回
另一個MySQL所沒有支援的管理層面功能,是交易(Transaction)和確認(Commit)/撤回(Rollback)。 一個交易所需的是資料庫能夠被當作一個單位,以共同執行一群或一套命令。如果一個交易沒有辦法完成,那麼整個交易裡面就沒有一個指令能夠執行的下去。對於必須在線上處理訂單的商業網站來說,MySQL沒有支援這項功能,的確會讓他們覺得很失望。不過雖然MySQL本身沒有處理交易的功能,但可透過MaxSQL伺服器來執行這項任務。
MaxSQL是一個外掛形式的伺服器,它本身所提供的表格可用來支援交易的功能。
外來鍵的支援
外來鍵(Foreign key)和參考整合限制(Referential Integrity)可讓使用者訂定表格中的資料規則,然後將規則(Constraint)加到想要設定規則的資料裡面。不過一個有賴複雜的資料關係的應用程式並不適合使用MySQL,所以當有人說MySQL不支援外來鍵時,所指的就是資料庫的參考整合限制。MySQL除了沒有支援外來鍵規則之外,當然更沒有支援連鎖刪除效應(Cascading Delete)。簡單地說,如果使用者需要複雜的資料關係,那麼最好還是用原來的 Access吧。
此外,使用者在MySQL也不會找到預存程序(Stored Procedure)和觸發(Trigger)。而在Access裡,有提供相對事件程序(Event Procedure),以及GetRows功能,這是都是不錯的資料擷取功能。
MySQL的架構
在MySQL的架構中,包含了幾種資料型態。而在這裡,筆者將要介紹其中的基本資料型態,及具體的檔案資料型態。
MySQL的基本資料型態
MySQL的基本資料型態主要分為四類,以下將個別作個簡介:
數值資料(Numeric Values)
數值資料簡單來說,就是數字。其中包括一般的10進位數字,以及科學記號的表示法,如1.2 E + 12。此外,16進位的數字表示法也會顯示出來,如0XA8。
字串資料(String Values)
字串資料是由文字字元所組成的資料,在MySQL中的字串表示,是以「'」或「"」圍起來。而跳脫出字元,使用者可以在字串中放入特殊的值,如(表一):
跳脫字元
|
意義
|
/0
|
NUL,指的是字元ASCII0,不是NULL。
|
/'
|
單引號文字字元,「'」
|
/"
|
雙引號文字字元,「"」
|
/b
|
倒退
|
/n
|
換行
|
/r
|
回到最初
|
/t
|
跳行
|
日期與時間資料(Date and Time Values)
顧名思義,這是用來儲存日期與時間的資料。
NULL Values
NULL就是什麼都沒有,表示沒有任何的數值。在這種情況下,資料表中會顯示NULL。所以當使用者在建立資料表時,需要對表中的欄位設定其資料型態。在資料表的欄位中,有些參數是以選擇性的方式出現,在下定義時可以不用放上去。這些參數的意義分別是:
- * ():刮號中的數字可指定資料的長度。
- * M:這裡所代表的是指定資料最大長度,也就是字元的數目,例如8850是一個數字,但字元長度為“4”。
- * D:這是用來指定浮點數型態的小數位數。
- * ZEROFILL:這是用來在數值型態中,將不足的位數補0。
- * UNSIGNED:這可以讓數值不會產生負數,只有正數與0。
MySQL具體的檔案資料型態
在上述的四種型態中,除了NULL之外,其他三類中又可以分成多欄位資料型態。這些型態如(表二)。
資料型態
|
說明
|
TINYINT
|
有符號的範圍是-128到127,無符號的範圍是0到255。
|
SMALLINT
|
有符號的範圍是-32768到32767,無符號的範圍是0到65535。
|
MEDIUMINT
|
有符號的範圍是-8388608到8388607,無符號的範圍是0到16777215。
|
INT
|
有符號的範圍是-2147483648到2147483647,無符號的範圍是0到4294967295。
|
INTEGER
|
INT的同義詞。
|
BIGINT
|
有符號的範圍是-9223372036854775808到9223372036854775807,無符號的範圍是0到18446744073709551615。
|
FLOAT
|
單精密浮點數字。不能無符號。允許的值是-3.402823466E+38到-1.175494351E-38,0和1.175494351E-38到3.402823466E+38。
|
DOUBLE
|
雙精密)浮點數字。不能無符號。允許的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到1.7976931348623157E+308。
|
DOUBLE PRECISION
|
DOUBLE的同義詞。
|
REAL
|
DOUBLE的同義詞。
|
DECIMAL
|
DECIMAL值的最大範圍與DOUBLE相同。
|
NUMERIC
|
DECIMAL的同義詞。
|
DATE
|
日期。其支援的範圍是“
1000-01-01
”到“
9999-12-31
”。
|
DATETIME
|
日期與時間組合。支援的範圍是 “1000-01-01 00:00:
00”
到“9999-12-31 23:59:
59”
。
|
TIMESTAMP
|
時間戳記。範圍是“1970-01-01 00:00:
00”
到2037年的某時。
|
TIME
|
一個時間。範圍是“-838:59:59'到'838:59:
59”
。
|
YEAR
|
2或4位數字格式的年(內定是4位)。允許的值是1901到2155。
|
CHAR
|
固定長度,1 - 255個字元。
|
VARCHAR
|
可變長度,1 - 255個字元。
|
TINYBLOB
|
二進位數值的欄位,最大長度為255(2^8-1)個字串。
|
TINYTEXT
|
最大長度為255(2^8-1)個字串。
|
MEDIUMBLOB
|
二進位數值的欄位,最大長度為16777215(2^24-1)個字串。
|
MEDIUMTEXT
|
最大長度為16777215(2^24-1)個字串。
|
LONGBLOB
|
二進位數值的欄位,最大長度為4294967295(2^32-1)個字串。
|
LONGTEXT
|
最大長度為4294967295(2^32-1)個字串。
|
ENUM
|
一個ENUM最多能有65535不同的值。
|
SET
|
一個SET最多能有64個成員。
|
結語
MySQL是一個很出色的資料庫軟體,對許多中小企業(Small Medium Bussiness,SMB)來說,它不但可以替企業省去許多不必要的花費(如客戶端數目費、伺服器數目費等),且它還是一個半開放源碼的免費軟體,除了與其它的軟體Bundle起來,或再製出售的用途外,使用者可隨意地更改與使用。雖然功能並不會比其它的資料庫軟體強大,但也足以應付一個SMB所擁有的資料量了。
至於想要下載MySQL的讀者,可以到MySQL的官方網站(http://www.mysql.com)點選Downloads項目。在點選後,由於MySQL的網站上,提供了各項作業系統平台的版本,所以請讀者選擇適合您需要的版本下載就行了。
<作者為系統工程師,聯絡方式:billhsieh@gmail.com>