Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

存储过程编程3

$
0
0
    1. 存储程序是什么?

一个数据库存储程序有时被称为存储模块或者存储例程(与一个名字相关联的一系列指令),它存储在计算机的数据库服务器中,被计算机的数据库服务器执行。一个存储程序的代码和(有时候)它任何编译过的版本也经常被保存在数据库的系统表中。当程序被执行时,它是在数据库服务的进程和线程的内存地址中执行的。

MYSQL存储程序有三个主要类型:

存储过程

存储过程是存储程序中最常见的类型。一个存储过程是一个通常意义上的程序单元,它在被请求时执行,并且可以接收多个输入和输出参数。


存储函数

存储函数和存储过程很类似,但是它只有一个单一的执行返回结果。更重要的是,存储函数可以被应用于标准的SQL语句,允许程序员有效增强SQL语言的功能。


触发器

触发器是被数据库内部的动作激发或触发的存储程序。典型的是,一个触发器响应于一个对数据库表的DML操作(INSERTUPDATEDELETE)而被调用。触发器可以被用来数据检验或非规范化的自动化(for the automation of denormalization).


其他数据库提供了额外类型的存储程序,包括包和类,两者都允许你定义或收集多个过程和程序到一个单独的,有名字的上下文中。MYSQL暂时不支持这种结构,每个存储程序都是一个单独的实体。


在本书中,我们将使用存储程序这个术语来表示存储过程、函数和触发器,术语存储程序语言来表示编写这些程序所使用的语言。存储程序语言中的大多数工具都能够跨过程、函数和触发器来被使用,但是,函数和触发器在使用这些语言特性的时候,有更加严格的限制。因此,我们为每一种类型的存储程序,都分出一章来介绍这些限制。

1.1.1为什么使用存储程序

程序开发者拥有很多种程序语言来进行选择。大多数这些语言都不是数据库语言,这意味着使用这些语言写出的代码不驻留在数据库服务器,也不被数据库服务管理。相对于普通目的的语言,存储程序提供了一些非常重要的好处,包括:

  • 使用存储程序使得数据库更加安全。

  • 存储程序提供了一种抽象访问例程机制,当数据结构改变时,这种机制能够改善你代码的可维护性。

  • 存储程序可以减少网络交互,因为程序可以使用服务器内部的数据工作,而不是从网络上获取数据。

  • 存储程序可以用来实现一个通用的可被多个程序访问的例程,这些程序可能使用的是不兼容的执行框架,或者来源于数据库服务器外部。

  • 数据库核心逻辑可以在存储程序中被分离开来,并且可以由更加专业的具有更多数据库经验的程序员实现。

  • 在有些情况下,使用存储程序,可以改善应用程序的可移植性。

这是一个很好的优势列表(它们的大部分将会在本书中更加详细的论述),我们并不建议你立即把你所有的应用逻辑移动到存储程序中。在当今的软件技术的丰富和复杂的世界中,你应该了解每一个可能的元素在你的软件配置中的长处和弱点,并总结出如何最大限度的发挥每个元素。在第12章,我们将花很多精力来评估如何以及在什么地方使用MYSQL存储程序。

底线是使用正确额的存储程序:过程、函数和触发器来改善你的应用的性能、安全性、可维护性和稳定性。

随后的章节将会探讨怎么构建MYSQL存储程序,并使用到它们最好的优势。但是,在深入到细节之前,让我们来看一下,如何开发这种技术,并快速浏览一下这种语言的能力。


      1. MYSQL简史

        MYSQL的祖先是一个内部(非SQL)数据库系统,被称为Unireg,它首先是由瑞典公司TCX20世纪80年代开发并优化来作为数据仓库使用的。Unireg的作者Michael"Monty" Widenius1995年增加了SQL接口,从而创建了第一个版本的MYSQL。来自DetronHBDavidAxmark建议Monty在既允许广泛免费使用,但是也支持商业优势的“双许可”模式下把MYSQL发布向全世界。和AllanLarsson一起,DavidMonty就成了MYSQL公司的创始人。

        MYSQL第一个被广泛提供的版本是发布于1996年中期的3.11MYSQL和其他的关联的开源技术一起快速成长。到2005年,MYSQL声称,MYSQL数据库的安装量已经超过了600万。

        版本3MYSQL,虽然适用于很多类型的应用(特别是读取密集型的web应用),但是它还缺乏很多关系型数据库中强制性的功能。例如,事务、视图、子查询在最初就不被支持。

        但是,MYSQL系统被设计成支持广泛扩展的数据访问架构,在这种架构中,SQL层与下面的数据以及文件访问层完全分离。这使得自定义“存储引擎”可以替换或者结合本地的以ISAM(索引顺序访问方法)为基础的MYSQL引擎。在2001年早期的3.23.34版本中,Berkeley-DBBDB)数据库(来自SleepycatSoftware)被集成,并作为一个可选的存储引擎。BDBMYSQL提供了最初的事务处理能力。几乎同时,开源的InnoDB引擎被提供,并很快成为了MYSQL用户的本地可用选项。

        2002年初的4.0版本完全纳入了InnoDB选项,这使得所有MYSQL用户使用事务变得简单,同时也增加了复制功能的改善。在4.0版本基础上,4.1版本在2004年早期构建成功,它包含了很多大量诸如子查询的支持和Unicode字符集的支持等其他改进。

        2005年晚期发布的5.0版本,MYSQL在功能上项商业RDBMS系统迈出了重要一步。它包含了存储过程,函数,触发器,另外增加了数据字典(SQL标准INFORMATION_SCHEMA),并支持可更新视图。

        预计于2006年下半年发布的5.1版本,将新增重要的功能,如内部调度,表分区,基于行的复制和许多其他显著的改进。

      2. MYSQL存储过程,函数和触发器

        MYSQL选择在MYSQL服务器中实现它的存储程序语言,来作为ANSISQL:2003SQL/PSM(持久性存储模块)的子集。一口!从本质上来说,MYSQL存储程序(过程、函数和触发器),符合开放标准的ANSI标准对于这些类型的流程。

        很多MYSQL和开源爱好者一直期望一个基于类似于PHPPython这样的开源语言而实现的存储过程语言。其他希望基于java来实现。然而,在使用ANSI规格时,相同的规格在IBMDB2数据库中被做了修改,MYSQL的优势在于它已经采用ANSI委员会多年的工作,这包括了所有来自于主要的RDBMS公司的代表性工作。

        MYSQL存储程序语言是一个块结构的语言(就像Pascal),包括了诸如操作变量、实现条件执行、执行迭代处理、错误处理等熟悉的命令。用户在现有的存储程序语言,例如OraclePL/SQL或者SQLServerTransact-SQL,会发现非常熟悉的语言特征。熟悉其他语言例如PHP或者JAVA的程序员,可能会认为这个语言很简单,但是他们将会发现,它很容易学习,并且它很匹配数据库的需求。

--------------------------------------------------------------------------------

第一次尝试翻译一些东西,希望得到大家的支持。如果有什么错误,请和我交流。

本书书名:《MySQLStored Procedure Programming》,作者:StevenFeuerstein, Guy Harrison

这个翻译是供我学习MYSQL以及和同行交流的,不作为商业用途。

作者:BuleRiver 发表于2013-5-18 11:59:12 原文链接
阅读:0 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>