MySQL是一个广受Linux社区人们喜爱的半商业的数据库 MySQL是可运行在大多数的Linux平台(iSparcetc)以及少许非Linux甚至非Unix平台
许可费用
MySQL的普及很大程度上源于它的宽松除了略显不寻常的许可费用MySQL的价格随平台和安装方式变化MySQL的Windows版本(NT和X)在任何情况下都不免费而任何Unix变种(包括Linux)的MySQL如果由用户自己或系统管理员而不是第三方安装则是免费的第三方案庄则必须付许可费
价格
平台 安装方式 价格
Windows NTX 任何 美元
Unix或Linux 自行安装 免费
Unix或Linux 第三方安装 美元
需要一个应用组件 美元
可以得到多种支持合同内容太多不再罗列最新报价可咨询MySQL站点
安装
可以在MySQL站点上获得大多数主要的软件包格式(RPMDBETGZ)客户端库和各种语言包装(Wrapper)可以分开的RPM格式获得RPM格式的安装没有多大麻烦并且无需初始配置在rcd(以RedHat RPM为例)生成一个初始脚本故MySQL守护进程在多用户模式下重启时被启动运行MySQL的守护进程(mysqld)消耗很少的内存(在运行RedHat 的奔腾上每个守护进程使用K内存和另外M共享内存的开销)并在只有在执行真正的查询时才装载到处理器上这意味着对小型数据库来说MySQL可以相当轻松地使用而不会对其他系统功能有太大的影响
数据类型
字段支持大量数据类型是件好事通常的整数浮点数字符串和数字均以多种长度表示并支持变长的BLOB(Binary Large OBject)类型对整数字段由自动增量选项日期时间字段也能很好的表示
MySQL与大多数其他数据库系统不同的是提供两个相对不常用的字段类型ENUM和SETENUM是一个枚举类型非常类适于Pascal语言的枚举类型它允许程序员看到类似于redgreenblue的字段值而MySQL只将这些值存储为一个字节SET也是从Pascal借用的它也是一个枚举类型但一个单独字段一次可存储多个值这种存储多个枚举值的能力也许不会给你一些印象(并可能威胁第三范式定义)但正确使用SET和CONTAINS关键字可以省去很多表连接能获得很好的性能提高
SQL兼容性
MySQL包含一些与SQL标准不同的转变他们的大多数被设计成是对SQL语言脚本语言的不足的一种补偿然而另一些扩展确实使 MySQL与众不同例如LINK子句搜索是自动地忽略大小写的MySQL 也允许用户自定义的SQL函数换句话说一个程序员可以编写一个函数然后集成到MySQL中并且其表现的与任何基本函数如SUM()或AVG ()没有什么不同函数必须被编译道一个共享库文件中(so文件)然后用一个LOAD FUNCTION命令装载
它也缺乏一些常用的SQL功能没有子选择(在查询中的查询)视图(View)也没了当然大多数子查询可以用简单的连接(join)子句重写但有时用两个嵌套的查询思考问题比一个大连接容易同样视图仅仅为程序员隐蔽where子句但这正是程序员们期望的另一种便利
存储过程和触发器
MySQL没有一种存储过程(Stored Procedure)语言这是对习惯于企业级数据库的程序员的最大限制多语句SQL命令必须通过客户方代码来协调这种情形是借助于相当健全的查询语言和赋予客户端锁定和解锁表的能力这样才允许的多语句运行
参考完整性(Referential IntegrityRI)
MySQL的主要的缺陷之一是缺乏标准的RI机制然而MySQL的创造者也不是对其用户的愿望置若罔闻并且提供了一些解决办法其中之一是支持唯一索引Rule限制的缺乏(在给钉字段域上的一种固定的范围限制)通过大量的数据类型来补偿不简单地提供检查约束(一个字段相对于同一行的另一个字段的之值的限制)外部关键字和经常与RI相关的级联删除功能有趣的是当不支持这些功能时SQL分析器容忍这些语句的句法这样做目的是易于移植数据库到MySQL中这是一个很好的尝试并且它确实未来支持该功能留下方便之门然而那些没有仔细阅读文档的的人可能误以为这些功能实际上是存在的
安全性
自始至终我对MySQL最大的抱怨是其安全系统它唯一的缺点是复杂而非标准另外只有到调用mysqladmin来重读用户权限时才发生改变通常的SQL GRANT/REVOKE 语句到最近的版本才被支持但是至少他们现在有了 MySQL的编写者广泛地记载了其特定的安全性系统但是它确实需要一条可能是别无它法的学习过程
备份和恢复数据导入/导出
强制参考一致性的缺乏显着地简化备份和恢复单靠数据导入/导出就可完美复制这一功能LOAD DATA INFILE命令给了数据导入很大的灵活性SELECT INTO命令实现了数据导出的相等功能另外既然MySQL不使用原始的分区所有的数据库数据能用一个文件系统备份保存数据库活动能被记载与通常的数据库日志不同(存储记录变化或在记录映像之前/之后) MySQL记载实际的SQL语句这允许数据库被恢复到失败前的那一点但是不允许提交(commit)和回卷(rollback)操作
连接性
MySQL客户库是客户/服务器结构的C语言库它意味着一个客户能查询驻留在另一台机器的一个数据库然而MySQL真正的强项处于该库中的语言包装器(wrapper) PerlPathon和PHP只是一部分Apache的Web服务器也有许多模块例如目录存取文件等允许各种各样的Apache配置信息(例如目录存取文件)使用MySQL应用程序接口简单一致并且相但完整另外多平台ODBC驱动程序可自由获得
未来
MySQL的开发继续以快速进行着事实上开发步伐对大多数开放源代码是一种挑战本文提到的几个抱怨中有很多新功能正在解决然而我将不对还没确实存在的特征做评价开发者们向我表明了在未来的开发中把增加查询功能和提高查询速度作为最高优先级
总结
Mysql是数据库领域的中间派它缺乏一个全功能数据库的大多数主要特征但是又有比类似Xbase记录存储引擎更多的特征它象企业级RDBMS那样需要一个积极的服务者守护程序但是不能象他们那样消费资源查询语言允许复杂的连接(join)查询但是所有的参考完整必须由程序员强制保证
MySQL在Linux世界里找到一个位置-提供简洁和速度同时仍然提供足够的功能使程序员高兴数据库程序员将喜欢其查询功能和广泛的客户库数据库管理员会觉得系统缺乏主要数据库功能他们会发觉它对简单数据库(在不能保证购买大牌数据库时)是有价值的