详解MySQL5.0


_ 至今还没有 _ _ MySQL 5 _ _ 版本发布的官方确定日期,但 _ _ MySQL _ _ 专家 _ _ Mike Hillyer _ _ 从内部抢先获取了有关 _ _ MySQL 5 _ _ 的新特点。在这篇技巧文章中, _ _ Hillyer _ _ 回答了读者有关 _ _ MySQL 5 _ _ 和从 _ _ Oracle _ _ 和 _ _ Microsoft _ _ 的产品升级到 _ _ MySQL _ _ 方面的问题。 _ _ _

** MySQl 5 ** ** 中的哪些特点在何种情况下将可能非常有用? **

** Hillyer ** ** : ** 那是一定的!让我们看一看 MySQL 5 中主要的特点:

存储进程( Stored Procedures )是存储于 MySQL 服务器中的进程码,它能够在服务器端被完全的执行。 MySQL 使用标准的 SQL :2003 存储进程语言,此语言也被称作 PL/PSM 。这里有一个存储进程的例子:

CREATE PROCEDURE procedure1 /* name */

(IN parameter1 INTEGER) /* parameters */

此存储进程获取一个单精度整型变量,然后根据变量是否等于 17 ,将其插入“ birds ”或“ beasts ”表中。

虽然存储进程并不是每个人都需要,但使用强制性的存储进程,将使他们的程序具有可移植性:你可以使用存储进程编写事务处理逻辑,然后在 PHP 前端、桌面应用程序和 PDA 程序中重用它,在 MySQL 服务器上调用存储进程。你还能够在 C 、 PHP 、 Java 、 VB ,或其它任何可以连接 MySQL 的语言中调用同样的存储进程。这可以节省大量的工作,因为你不必要再重复的一遍又一遍的执行同样的逻辑运算。

你可以在这篇文档: http://dev.mysql.com/tech-resources/articles/mysql-storedprocedures.html 中学习到更多有关存储进程的知识。

触发器使用同样的过程语言作为存储进程,不过相比等待用户调用代码,它附加在一个事件上,比如 INSERT (插入)表的事件。事件通常是 INSERT 、 UPDATE 和 DELETE 。这里是一个触发器的例子:

CREATE TRIGGER t25_bi

BEFORE INSERT ON t25

FOR EACH ROW

IF LEFT(NEW.s2,1)<>'A' THEN SET NEW.s1=0; END IF;//

在上面的这种情况下,触发器检查正在插入到表中的数据,看它插入 s2 字段的最左边的字符若不是“ A ”,则设置 s1 列的值为 0 。触发器能够被用来记录操作( logging activity ,就是说你可能希望有一个审计表显示每个动作,另一个表作为日志记录)、验证数据( validating data ,根据复杂的标准检查数据的插入值),和不需强制的外来关键字就可以维护表处理程序之间的关系。

http://dev.mysql.com/tech-resources/articles/mysql-triggers.html ,你可以学习到更多有关触发器的知识。

而视图( View )则是“一个数据库中定义的持久的指定的、源表。”将视图想像成一个能够应用于表中的存储查询。这里有几个有关视图的例子:

A view is "a named, derived table whose definition is a persistent part of the database." Think of a view as a stored query that can be used as a table. Here are a couple of examples of views:

CREATE VIEW v AS SELECT column1 FROM t;

CREATE VIEW v AS

SELECT * FROM t

WHERE col 1 IN (SELECT MAX(col1) FROM t);

使用视图将使 MySQL 的使用简单化。如果你为了事务报告使用一个复杂的查询,它们通常可以容易的转换成一个视图,然后终端用户能够使用视图创建报告。视图还能够在安全方面有所帮助,如果一个用户只有访问一个表单中的某一行的子集的权限,你就可以创建一个视图,分配给他相应的权限,而不必像以前一样把整个表的权限都要给他(比如你想某个用户只能访问多区域表单中的单一区域销售数据)。

http://dev.mysql.com/tech-resources/articles/mysql-views.html ,你可以看到更多有关视图的文章。

至于如何使用 MySQL 的新特典,则依赖于你的应用和你的技术水平。多数用户不需要在程序编写上具有很多经验,就能够从视图中获取巨大的好处,因此非常值得尝试。

MySQL ** 的可扩展性如何? **

Hillyer ** : ** 这完全取决于你的需要,不过还是让我给你一些真实性的可扩展性的例子。在上个月的 2005 MySQL 用户讨论会上,我遇到了一些运行 MySQL 的,拥有 20TB 字节数据的用户,他们使用这些数据进行统计分析。此次会议, Ticketmaster 描述了 MySQL 如何通过复制设定,用 MySQL 的复制体系将应用扩展到处理许多不同地点的服务器,它们每天的售票数超过 500,000 张。 Wikipedia 同样使用 MySQL 服务器,此服务器拥有 32GB 的内存,处理高负载的数据库应用,并且 MySQL 还能够处理更多的内存和资源。一些知名的公司,如 Yahoo 、 Google 和 Slashdot ,都使用 MySQL 运行高负载的 Web 应用。

最后我要说的是,这些都取决于你需要何种扩展,不过你可以放心, MySQL 具有非常好的可扩展性,能够与其它东西很好的结合在一起。

** 我的公司现在实用磁带驱动器备份 ** ** MySQL ** ** 。我们的系统有一点老了,现在我们正在寻找另外的解决方案,您能否向我建议一些能够跟 ** ** MySQL ** ** 一起更好工作的备份系统? **

Hillyer ** : ** 通常,一个备份方案是硬件和软件的混合体,而对 MySQL 来说,硬件并不是与备份真正关系紧密的,你可以将备份存储在磁带、光盘,或者磁盘阵列上。如果你之前实用的是磁带,那么你只需要活的一个新的磁带解决方案即可。

在软件方面,有多种方案:你可以实用内建在 MySQL 中的工具,比如 mysqldump 和 mysqlhotcopy ,或者实用来自专业公司,如 Veritas 和 Arkeia 的第三方备份解决方案。 MySQL 已经在它的官方网站发布了一个备份方案的列表―― http://solutions.mysql.com/search.php?pc=14% 2C 86&q=&level=0 ,可能对你非常有用。

** 我们现在所有的应用都实用 ** ** Oracle 8i ** ** ,不过到了升级的时候。我们对 ** ** MySQL ** ** 低成本非常感兴趣,但是有一个问题,我们不知道 ** ** MySQL ** ** 有没有能力处理位于两个海岸的公司的动态 ** ** Web ** ** 销售业务。我们的情况是否能够使用 ** ** MySQL ** ** ?我们将要考察实用的模型,或者说客户-服务器的转换是不是很困难? **

Hillyer ** : ** 根据你们现在正在使用的 Oracle 的情况, MySQL 将非常适合你们的需要。你们现有的系统需要在账户中存储一些项目,比如广泛的使用存储进程,而 MySQL 支持不同的存储进程标准。 Oracle 使用 PL/SQL 语言, MySQL 则使用 PL/PSM ,这会导致一个问题,就是如果你使用了大量的 Oracle 特有语法,则需要重写原来的程序。

至于实现处理动态 Web 销售业务,根本不必担心。如 Ticketmaster 和 Travelocity 之类的公司,都在高事务处理环境中广泛使用 MySQL ,并且觉得 MySQL 的规模刚好适合他们的需要。

在模型选择方面,我无法根据你给出的信息作出准确的回答。我知道许多组织最初都是先转移后端数据库,然后考虑改变他们的应用程序,看起来根据情况逐渐的做一些小修改比一次性撕裂整个系统要容易的多。

我们公司已经逐渐(150个用户)转移到了Linux。现在在数据库上,我们想脱离微软的SQL,但是迁移任务看起来是一个非常大的处理任务,因为我们的IT团队只有一个人(就是我),人力资源太少了。而如果我们选择了MySQL,会不会丢失一些功能或数据?我是否能够单独处理迁移任务?

Hillyer ** <SPAN style="FONT-SIZE: 12pt; COLOR: #2d3741; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; m **

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus