MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 16626|回复: 13
打印 上一主题 下一主题

[触发器及事件] MySQL储存过程编程教程-概述

[复制链接]
跳转到指定楼层
1#
发表于 2007-10-15 08:53:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
《MySQL 储存过程编程》
原著:Steven Feuerstein, Guy Harrison
翻译作者:
drekey@gmail.com  
翻译作者个人博客
http://www.drekey.cn/blog/
交流分享平台:MySQLpub.com(转载请注明)
出版:O'Reilly
出版日期:2006年五月
ISBN-10:0-596-10089-2
ISBN-13:978-0-59-610089-6
页数: 636页



概览
MySQL5.0中储存过程的实现作为早已非常著名mysql数据库的一部分,在使得mysql成为广泛的企业级应用的领头羊的过程中有着里程碑的意义。如果你打算严肃的来面对建立基于web的数据库应用程序的将来,你必须快速的掌握怎样用储存过程进行工作(并且用正确的方法建立他们),这本书的目的就是打算成为一本储存过程编程的圣经,作为一种资源,来共同面对这一MySQL程序员所无法逃避的现状。

在MySQL突如其来降生的十年中,它已然是现今具有统治地位的开源数据库,无论是性能和表现都能和那些诸如Oracle和SQL Server这样的商用RDBMS(关系型数据库)相竞争。并且MySQL能够和Linux和php结合在一起,成为数百万应用程序的心脏,现在,MySQL5.0结合了对于储存过程,函数和触发器的支持,提供了作为真正企业级应用的编程能力。

MySQL新的过程语言有着直白化的语法,我们可以用它很容易的写出简单的程序,但是要写出安全,容易维护,高效并且容易调试的程序却并非易事。作为一个新生事务,还很少有人能在MySQL领域拥有对储存过程实质性的编程经验,但是Guy Harrison 和Steven Feuerstein正是这极少数的一员,他们在这一专业领域拥有十年的经验。

在MySQL储存过程编程这本书中,作者们很好的利用了自身积累的难得的经验,他们将充满代码的示例和各种语言级的基础知识融入进应用程序的构建所需要的各种协调和实践中,使之成为一本高可阅读性的MySQL开发一站式指南,这本书由以下四个方面组成:

  • MySQL储存过程编程基础 — 指南,基本表达式,储存过程中的SQL和错误处理
  • 创建MySQL储存过程程序 — 事务处理,内建函数,储存过程函数和触发器
  • 在应用程序中使用MySQL储存过程程序 — 在PHP,Java,Perl,Python 和 .NET(C# 和 VB.NET)中使用储存过程编程
  • 优化MySQL储存过程程序 — 安全性,基本和高级SQL调试,优化储存过程代码,并且进行最有效的编程实践

这本书的主题网站拥有数千行的代码,方便你随时运行。

Guy Harrison 是Quest软件公司数据库解决方案的总构架师,并且有大量关于MySQL的主题演说和文章,Steven Feuerstein 是Oracle PL/SQL 编程(Oracle PL/SQL Programming) 一书的作者,在Oracle储存过程编程工作超过十年,他们俩都在数据库开发领域拥有十年以上的经验,并且出版了大量的书籍。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏2 分享淘帖 顶3 踩
2#
 楼主| 发表于 2007-10-15 09:03:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MySQL储存过程编程所受到的赞誉
“我不太相信以这个话题为中心的书会写的不觉得干瘪,但Guy和Steven在这方面显示出的深度和提供给读者的资料,让我相信这是一本非常棒的书”
      –Brian Aker,MySQL AB总构架师


“很高兴和Guy及其他O’Relly的编辑在一起做了许多有关这本书的技术文章。作者在这个方面拥有非常扎实的功底。我发觉这本书有很多带有代码的示例,很容易读懂,MySQL的用户将发觉这本书是一个极好的学习资源。”
      –Arjen Lentz,MySQL AB社区版经理

“基于MySQL在现今企业级应用中的快速增长,开发者和数据库管理员都热切的期盼能够在创建高性能储存过程和其他MySQL特性代码方面得到专家级的指导,我相信没有人能找到比Guy Harrison和Steven Feuerstein写出的顶级的MySQL代码更有指导意义的书”
      –Robin Schumacher,MySQL AB 项目经理

“这是第一本全神贯注于MySQL储存过程的书,我发现他的提点是我曾经都发觉过的”
      –Peter Gulutzan,MySQL软件构架师

“MySQL5.0为用户打开了一个新的世界,而这本书是探索这个世界最好的指南”
      –Andy Dustman,MySQL API for python的作者

“Guy和Steven给MySQL开发者带来了非常珍贵的东西,他们不仅覆盖了储存过程编写的细节方面,而且还提供了在实际开发中如何设计数据库应用程序的非常宝贵的建议,他们独特的幽默感增加了这本书的阅读乐趣”
      –James Cooper 西雅图,WA技术顾问
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏2 分享淘帖 顶3 踩
3#
 楼主| 发表于 2007-10-15 09:03:55 | 只看该作者
前言
在过去的五年时间里,我们亲眼见证了开源软件在商业领域应用的大爆发。
Linux几乎全面取代了各种Unix–这种具有统治地位的非Windows操作系统;
Apache成为目前为止最有价值的web服务器;
Perl和PHP组件构成了成百万的商业网站;
JBoss,Hibernate,Spring和Eclipse强有力的入侵Java,J2EE开发以及应用服务器市场,虽然当今的关系型数据库仍然被一些商业机构(Oracle,IBM和微软)所垄断着,但是,开源数据库在商业用户中正成指数增长。
MySQL是一个占有统治地位的开源数据库管理系统:他在基于LAMP(Linux-Apache-MySQL-PHP/Perl/Python)和LAMJ(Linux-Apache-MySQL-JBoss)这样的开源组合应用程序中起到了日益重要的作用,并且越来越多的被部署到需要高性能,稳定的关系型数据库的地方。

在landmark一书中改革的先驱者
Clayton Christensen给出了为何开源和其他“颠覆性”技术会取代传统的可持续技术的第一个被广泛认可原因。
● The Innovator’s Dilemma, Clayton Christensen (New York, 2000), HarperBusiness Essentials.

在好比Linux这样的颠覆性的技术刚刚出现的时候,它的能力和表现比主流及高端市场可以接受的尺度低得多,但是,新的技术对于那些有限制条件或者要在预算中去除现有商业构建花销的族群来说却有极高的吸引力。要知道那些低端市场总是伴随着低利润率和低产出,因此既有的供应商宁愿放弃这块市场来给这些颠覆性的技术以容身之处。无论是可持续/传统的或是颠覆性/创新的技术都在不断改进它们的能力,但当固有的技术显现出盛于平均用户需求甚至高端用户需求时,颠覆性技术在主流市场的部分人群中就开始变得有吸引力。

对于现有的供应商而言,低端市场总是伴随着低收益,于是供应商做出了一系列持续退出现有市场的决定,把市场留给了这些颠覆性的技术,同时,颠覆性的技术开始成为他们真正的威胁,现有的供应商无法在使用他们的既有产品所吞噬来的收入与之竞争,当然还有其他很多原因使他们最终失去了对市场的统治地位。

对于开源而言,MySQL很典型的显示了颠覆性技术模型的这些特点。五年前,MySQL的能力利主流商业需求还很遥远,以至于MySQL在商业环境下的使用几乎都没有听说过,虽然MySQL就像其他开源技术一样对于那些无法支付商用数据库的用户来说免费或者说成本极低
,但MySQL在历经了快速的技术变更中增加了事务,子查询和其他只有昂贵的商用数据库才能提供的功能,MySQL4.0的发布使得这一数据库在很多旗帜鲜明的公司的关键性任务中得到了大量的应用,包括Yahoo,Google和Sabre.
● MySQL has a dual licensing model that allows for free use in many circumstances but does require a commercial license in some circumstances.

同时,商业数据库公司增加了新的功能,虽然这些功能是相对于高端市场,但目前已经可以证实这些新特性已经远远超出大多数用户的需求,相对于混合对象数据类型,内建模拟Java虚拟机,或者是复杂的分区及聚合性能这些新特性,用户更关心性能,易于管理性和稳定性。

随着5.0的发布,MySQL被证实跨越了成为可信赖的企业级应用的最后一个障碍,创建储存过程,函数,触发器和可更新试图等能力扫清了使得MySQL成为易维护性主流商用数据库的障碍,个别来说,在介绍储存过程之前首先要说MySQLJava J2EE的认证,因为这个认证需要产品包含储存例程,而在我们在MySQL中没有找到这些在商用数据库中所拥有的特性,当然,这些功能已经远远超出了主流数据库所应有的需求,我们相信MySQL将作为开源关系型数据库的领军人物继续前进,并且储存过程,函数触发器将在MySQL的成功故事中扮演重要的角色。

首先,一点关于本书名称和术语的解释:
在IT业界,媒体上或者MySQL AB自己的称呼都趋向于用储存过程一词带指储存过程和储存函数,虽然严格的说在技术上这是一种表述错误(函数并非过程),但是我们觉得相对于MySQL储存过程,函数和触发器编程这样一个沉长而不顺口的称呼,MySQL储存过程编程这一书名更能准确的概述本书的用意。


为了避免引起歧义,我们是用储存过程程序这一术语来带指包括过程,函数和触发器在内的数据库例程,如果要特制其中的某一个,书中会特别指出。
4#
 楼主| 发表于 2007-10-15 09:04:58 | 只看该作者
这本书的目标
储存过程,函数和触发器所提供的新的能力(我们可以大致称他们为储存过程程序)给MySQL的开发者制定了新的游戏规则,只有在别的关系型数据库中已经拥有过经验,才能在MySQL应用程序中做的更好,更可靠及更有效。当然,不恰当的使用储存过程程序,或者差劲的储存过程程序构架,可能导致应用程序性能表现低劣,难以维护和不稳定。

基于这些原因,我们预见到了写一本书来帮追MySQL从业人员认识MySQL储存过程程序潜在能力的重要性。我们希望这本书能帮助你恰当的使用MySQL储存过程,并且写出可靠正确,有效且易于维护的过程,函数和触发器。

编写出可靠储存过程应用程序的实践依赖与以下四点:

恰当的使用
使用恰当的储存过程程序能够帮助你改善MySQL应用程序的性能,可靠性和可维护性,当然储存过程程序并非万能,他们只能在适当的场合被使用,在书中我们描述了储存过程程序可能被用来改善性能的场合,并且勾画了一些大致的模式(及不使用模式的)储存过程程序。

可靠性
包括MySQL储存过程程序语言在能的所有编程语言都允许你写出在任何场合都有可预见行为的代码,但是这些语言也允许你写出受制于故障和各种不可预料场合的错误代码。我们勾画了怎样才能稳妥及可预见的面对错误,来轻松的面对各种程序错误。

易维护性
我们总是对修改自己同事或自己所写的代码感到情绪低落,并且发现这些代码的意图,逻辑和机制几乎不能理解。所谓的“意大利面式的”代码可以用任何语言来写,这方面,MySQL储存程序也不例外,我们将介绍如何通过对管理,程序结构,注释和其他机制的实践来写出易于维护的代码。

性能
任何非凡的应用程序都要面对潜在或显然的既定性能要求。数据库的SQL代码和储存程序代码的性能往往是影响应用程序全局性能的重要方面。此外,在要处理的数据和事务的体积增加时,落后的数据库代码经常不能彻底甚至完全不能达到预期的目的。在本书中,我们将向你展示什么时候该使用储存程序来改善性能以及如何用储存过程代码交付最高性能的应用程序。当然,结合SQL在内的储存程序经常是高性能应用程序的一个重要组成部分,所以我们也将在一定深度上来阐述如何写高性能的SQL代码。
5#
 楼主| 发表于 2007-10-15 09:05:47 | 只看该作者
这本书的结构

MySQL储存过程编程主要分为四个部分

第一部分,储存编程基础
第一部分主要介绍储存过程编程语言和详细的描述,语言结构及用法。
  • 第1章,介绍MySQL储存过程程序,回答几个基本的问题:这种语言是怎么来的?它的好处有哪些?语言的主要功能有哪些?
  • 第2章,MySQL储存编程指南,作为一个指南来让你最快度的开始使用语言,它向你展示了如何创建各种基本类型的储存程序,并提供了有关这种语言功能的交互式例子
  • 第3章,语言基础,展示了如何使用变量,字面量,操作符和表达式
  • 第4章,语句块,条件表达式和迭代编程,并主要阐述了如何实现条件命令(IF和CASE)以及循环结构
  • 第5章,在储存程序中使用SQL,讨论怎样才能把SQL和这种语言结合起来
  • 第6章,错误处理,提供了错误是怎样被处理的

第二部分,储存程序结构解析
这一部分将描述如何使用第一部分中的各个元素来创建功能强大而实用的程序
  • 第7章,创建和维护储存程序,勾画用可用的表达式创建和修改储存程序并提供了如何管理你的代码的一些建议
  • 第8章,事务管理,阐述了在储存程序中使用事务的一些基础知识
  • 第9章,MySQL内建函数,详细介绍了可以用于储存程序的内建函数
  • 第10章,储存函数,向你解释如何使用储存函数 — 这一特别的储存程序
  • 第11章,触发器,描述了如何使用另一种特别的储存程序:触发器 — 在数据库表中被激活用来响应DML(数据库操纵语言)

第三部分,在应用程序中的MySQL储存程序
储存程序可以被用来做各种不同的事情,包括提供给MySQL管理员和开发者的储存例程,当然,大多数重要的使用范畴都是像本章中所描述的和应用程序一起是使用的,储存程序允许我们将一些原本属于应用程序逻辑的代码移到数据库服务器内部;如果能够这部分,将能给我们的应用程序的安全性,有效性和易维护性带来很大的好处
  • 第12章,在应用程序中使用MySQL储存程序,思考并在实践中体会在当今基于web的标准应用程序中使用储存程序的重大意义。其他的章节将向你展示如何在其他开发语言中和MySQL的储存过程和函数协同工作
  • 第13章,在PHP中使用MySQL储存程序,描述如何在PHP中调用储存程序,我们将讨论myslqi及最近被绑定与PHP的MySQL连接器PDO和他们对于储存程序的支持
  • 第14章,在Java中使用MySQL储存程序,介绍如何在Java的JDBC,Servlets,企业级JavaBeans,Hibernate和Spring中调用MySQL储存程序
  • 第15章,在Perl中使用MySQL储存程序,介绍如何在Perl中使用MySQL储存程序
  • 第16章,在Python中使用MySQL储存程序,介绍如何在Python中如何使用MySQL储存程序
  • 第17章,在.NET中使用MySQL储存程序,介绍在C#和VB.NET中使用MySQL储存程序

第四部分,优化储存程序
本书的最后一个部分希望将“好”变得“更好”,能够使程序正确的运行是一件了不起的事情:任何正在运行的程序都是一个好程序,而一个杰出的程序则需要性能优良,安全易维护且能应对一切
  • 第18章,储存程序安全问题,独立的讨论安全性问题及由储存过程和函数引发的问题
  • 第19章,调试储存程序和SQL代码,这一章节和接下来的20章,21,22章将介绍储存程序的优化,这章将首先介绍性能优化的工具和一些技巧
  • 第20章,基本SQL调试,你的储存程序的性能绝大部分取决于内部SQL代码,所以这一章将对SQL代码的调试基础给出指导
  • 第21章,高级SQL调试,这一章是基于第20章,介绍了更多SQL高级调试的途径
  • 第22章,优化储存程序代码,包含储存程序自身的性能优化
  • 第23章,最好的储存程序开发实践,合上书本来看一下最好的储存程序开发实践,这些指导将让你写出快速安全,以维护,易调试的程序。

你会发现本书在内容分配上比较均衡,这一点不仅体现在储存程序开发的章节中,同样也存在于例如PHP或者Java这些别的开发语言中,个别来说,我们假设你在不经SQL调试的情况下无法写出高性能的程序,所以我们在SQL调试上投入了大量的篇幅,再则,这样做无论SQL代码是否被内嵌与你的程序中都会有好处,同样的,讨论事务设计和安全问题在其他语言中也是可以接受的。
6#
 楼主| 发表于 2007-10-15 09:06:25 | 只看该作者
这本书没有覆盖的内容
这本书并非覆盖了所有与MySQL相关的内容,它只关注于储存程序语言,下面的主题超出了本书的范围并且没有被覆盖,除了在偶然的场合才会被提到。

SQL语言
我们假设你已经具备了使用SQL语言的知识,并且你应该知道怎样使用SELECT, UPDATE, INSERT和DELETE表达式。

MySQL数据库管理
虽然数据库管理员可以使用本书进行数据库创建和维护的知识,但是本书并未对MySQL的DDL(数据定义语言)进行细致的探究。
7#
 楼主| 发表于 2007-10-15 09:07:32 | 只看该作者
本书中使用的约定
下面的约定将在本书中应用
斜体
将被用于URL和首次使用的术语的强调
等宽
将被用于代码示例中的SQL关键字
等宽加粗
在代码示例中,高亮当前被讨论的表达式
等宽斜体
在代码示例中,指示应该由你提供的元素(比如:filename)
大写
在代码片段中指示MySQL关键字
小写
在代码片断中指示用户定义的变量或参数等
符号
在代码片段中为了严密输入
缩进
在代码片段中为了清楚的显示代码结构,当然这不是必须的
//
在代码片段中,单行注释将影响至这一行的结束
/*和*/
在代码片段中,多行注释定界符可以作用于多行
.
在代码片段和相关的讨论中,起到将对象名和成员名相分割的作用
[]
在语法描述中,表示可选参数
{}
在语法描述中,表示你必须从中选取一个的参数列表
|
在语法描述中,分割在大挂号中的元素,例如{TRUE|FALSE}。

在语法描述中,指示重复的项,也做和讨论无关的内容
指示提示,建议和注意事项,例如:我们将告诉你某个设定是不是与版本相关
指示警告或需要引起警惕,例如:我们将告诉你某些设定是否会与操作系统冲突
8#
 楼主| 发表于 2007-10-15 09:08:18 | 只看该作者
版本选择
这本书介绍了MySQL5.0的储存过程语言,虽然我们的源代码可以直接被使用在5.1.7这个MySQL版本上,但是MySQL5.0.18是最近被广泛使用的二进制社区版本。
9#
 楼主| 发表于 2007-10-15 09:09:49 | 只看该作者
本书网站上的可用资源
我们在O’Reilly的站点上提供了所有本书的相关代码,进入
      
     http://www.oreilly.com/catalog/mysqlspp

并且点击Examples来到本书的网站。

要找到特定的代码片段,可以查找相应的文件或者指出代码出现的位置,比方说,要找到Example 3-1,你可以进入example0301.sql。

在网站上你也可以下载到在本书中使用的样例数据库的数据文件,源代码中包含了我们在开发过程中用到的样例文件,勘误表和附录。

特别要指出,我们将用网站交流有关使用MySQL储存程序和其他工具的信息,因为MySQL储存程序相对来说是一个新生事务,MySQL公司将在不同的MySQL数据库服务器版本中不断的修改,精炼这种语言的功能和行为,同样的在本书出版之时,在别的语言工具(PHP,Perl,Python,Hibernate)中对于储存程序的支持也是不完整的,所以我们将在网站中对这些语言的改进保持更新。
10#
 楼主| 发表于 2007-10-15 09:10:09 | 只看该作者
使用样例代码
这本书是用来帮助你完成工作的,大体来说,你可以在你的书中,程序及文档中引用这些代码片段,除非你对这些代码做出了非常重大的修改,你不必联系我们已取得许可,举例来说,用书中的代码写了一个程序不需要请求许可,销售O’Reilly书中的代码的CD-ROM分法版不需要许可,用书中的代码回答技术问题不需要许可,在你的文档中使用本书的代码不需要许可。

我们赞同在引用中申明标题,作者,出版商和ISBN,举例来说,“MySQL Stored Procedure Programming by Guy Harrison with Steven Feuerstein. Copyright 2006 O’Reilly Media, Inc., 0-596-10089-2.”,但这并非必须

如果你觉得你在使用本书的时候超出了正常的使用范围,可以随时给我们来信
permissions@oreilly.com
11#
 楼主| 发表于 2007-10-15 09:10:35 | 只看该作者
Safari(R)标志
当你在你钟爱的技术书本的封面上看到Safari(R)标志的时候,这意味着这本书可以在O’Reilly Network Safari书架上。

在线得到Safari提供了一种比ebook更好的解决方案,它是一个虚拟的图书馆,可以让你轻松的搜索上千本顶级技术书籍,剪切,粘贴代码片段,下载章节并快速而精确的找到你要的信息,你可以进入这个网址http://safari.oreilly.com
12#
 楼主| 发表于 2007-10-15 09:11:06 | 只看该作者
联系我们
我们在出版之前已经尽我们的所能对书中的信息和源代码进行了校验,但是由于巨大的数目以及不断发展的技术,你也许会发现许多功能都在发生变化,因而我们的书本出现了错误,如果那样的话,请联系我们:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (in the United States or Canada)
707-829-0515 (international or local)
707-829-0104 (fax)
你也可以给我们发电子邮件,或者发到邮件列表或目录中

有关技术问题的答疑和对本书的评论,请发送至

同样,在前些章节已经提到过我们有一个和本书配到的网站,你在上面可以找到本书的源代码,勘误表(以前的错误报告和现在的错误公开)和其他一些本书的信息,你可以进入网址

其他有关本书的信息和别的事项,可以进入O’Reilly的官方网站
13#
 楼主| 发表于 2007-10-15 09:11:29 | 只看该作者
对本书的相关工作人员表示感谢
首先要感谢我们在O’Reilly的编辑,感谢他不遗余力的工作和在幕后对各个项目的关注,还有很多O’Reilly的同仁在书本的撰写过程中也扮演了重要的角色,包括责任编辑Adam Witwer和Rob Romano,美工和其他发行事宜都有Argosy Publishing赞助。

在这本书的编撰过程中技术评论家的建议是相当苛刻的,这本书的范围不仅包括了MySQL储存程序语言本身,还有五种不同的其他开发语言及MySQL5.0自身的新特性,此外,在我们写书的时候储存程序本身也在不断的进化,如果没有我们的这些技术评论家宝贵的意见我们的书就无法在技术的精准度和技术范围的适应性上取得任何成绩,感谢技术评论者Tim Allwine, Brian Aker, James Cooper, Greg Cottman, Paul DuBois, Andy Dustman, Peter Gulutzan, Mike Hillyer, Arjen Lentz, 和Mark Matthews。

对于整个开源社区特别是MySQL社区版的开发团队,我们也要说一声感谢,拥有如此高质量和革新性的开源软件的能力不断的满足着我们的各种需求并给我们以惊喜,很多MySQL及其他开源社区通过不同的途径贡献着他们的力量。

我们使用了很多开源的第三方维护接口程序来确保能够支持MySQL5.0的新特性,特别感谢Wez Furlong, Patrick Galbraith, 和Andy Dustman及他们在PHP PDO,Perl DBI 和Python MySQLdb接口中所做的贡献。

Guy(本书的原作者):(引用他自己的话来说)我特别要感谢我的妻子Jenni和孩子Christopher, Katherine, Michael和William 对我在书籍的撰写过程中对我的宽容和支持,我很爱他们,也同样感谢Steven和我合写了这本书Steven:我在最近的10年里花了大量的时间于Oracle PL/SQL的学习和工作上,这些经验清楚的告诉我储存程序的重要性,当Guy邀请我和他同写这一书时我也很高兴,并且我认为Guy借助这次契机给MySQL程序员的帮助在开源关系型数据库的利用上是非常充分的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-4-25 14:38 , Processed in 0.073557 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表