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,指的是字元ASCII 0,不是NULL。
|
/'
|
单引号文字字元,「'」
|
/"
|
双引号文字字元,「"」
|
/本
|
倒退
|
/你
|
换行
|
/让
|
回到最初
|
/他
|
跳行
|
日期与时间资料(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
|
一个INT最多能有65535不同的值。
|
SET
|
一个SET最多能有64个成员。
|
结语
MySQL是一个很出色的资料库软体,对许多中小企业(Small Medium Bussiness,SMB)来说,它不但可以替企业省去许多不必要的花费(如客户端数目费、伺服器数目费等),且它还是一个半开放源码的免费软体,除了与其它的软体Bundle起来,或再制出售的用途外,使用者可随意地更改与使用。虽然功能并不会比其它的资料库软体强大,但也足以应付一个SMB所拥有的资料量了。
至于想要下载MySQL的读者,可以到MySQL的官方网站(http://www.mysql.com)点选Downloads项目。在点选后,由于MySQL的网站上,提供了各项作业系统平台的版本,所以请读者选择适合您需要的版本下载就行了。
"