触发器和存储过程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
务器平台上执行,该平台比客户工作站执行效率更高。
2、改善了安全性。 存储过程简化了安全机制,它可以简化对某些操 作的授权。例如,假如一个用户不希望别人在他的表 上使用SELECT语句,他可以写一个仅可以修改这个
表的某些行或列的存储过程,然后将调用该过程的权
限授给特定的用户,这样其它用户就可以通过该存储 过程访问这个表。
代码相比,在服务器上执行这些代码减少了网络通讯
量和网络冲突;触发器把数据完整性代码放在服务器 平台上比放在客户工作站上更有效; 3、安全性。触发器运行要有表主人的授权,但是, 触发器能够被在表中插入、删除、修改记录的任何一 个用户触发。任何一个应用程序或交互式子用户都无 法避开触发器。
触发器的功能
3、存储过程在不同的RDBMS上语法不同。 存储过程使用了特定厂商扩展的SQL语句。一般 来讲,存储过程代码不能方便地在不同的RDBMS之 间进行转换。
应用访问数据库时。一般要经过5个步骤: 1 查询语句发送到服务器; 2 服务器编译SQL语句; 3 优化查询计划; 4 执行查询; 5 结果返回应用。
数据库技术
第 16 讲 索引、触发器和存储过程、 DBMS的基本功能和系统结构
一、触发器和存储过程 当对一个表执行特定的操作时,被调用或者被
“触发”的SQL语句称为触发器。触发器能够依次调
用SQL语句或者存储过程。
触发器是事件驱动的SQL代码,当插入、删除、
修改指定的表和列中的数据时,这些代码将自动执行, 因此触发器总是与特定的数据库表及特定的数据库事 件(如插入(Insert)、删除(Delete)、修改(Update)等)相 联系。
的结果。
存储过程潜在的缺点如下:
1、难以保持负荷平衡。
存储过程提出了一种在服务器上集中处理的模型,
用集中处理代替事务的分布处理。这种方法,除非服 务器的性能进行了优化,符合存储过程运行的需求, 否则它会降低服务器的性能。 2、增加了管理要求。
存储过程是一个共享的资源。管理员必须确保使
用这些存储过程,不允许同一个业务规则、事务、运 算法则的多个存储过程存在。
触发器的优点
触发器不依赖于任何客户端应用程序,也不依赖
于访问数据库的语言。触发器有如下优点:
1、标准化。在整个应用上,触发器保证了数据的
完整性和一致性,一旦在表上建立了触发器,它就存 储在数据库中;这种方法消除了各个客户应用程序的
冗余编码,便于规则发生变化时对编码进行修改;
2、高效率。触发器初始执行后,作为编译的代码 执行。它的运行速度快,与在客户工作站上执行这些
存储过程和触发器是在创建时编译的,当通过 存储过程发出一个请求时,上述第2、3步就没有了, 并且在第一步上也可以提高性能。
用一个存储过程比写SQL语句更快、更简单。 6、有利于专门技术的使用。 技术熟练的开发者能够集中精力,写出复杂查询、
运算法则和事务的存储过程。其它具有一般SQL经验
的开发者能够调用这些存储过程。
7、简化了应用的维护,增加了应用的灵活性。 存储过程有助于从应用逻辑中把业务规则分离出
来。当业务发Biblioteka Baidu变化,需要修改业务规则时,这个变
许远程登录,那么本地数据库服务器 就可以执行其它
数据库服务器上的存储过程。例如,可以在本地服务 器上写一个触发器, 当某一事件发生(如删除、更新 或插入)时,该触发器执行远程服务器上的存储过程。
5、提高了开发者的劳动生产率。 存储过程消除了开发者为一个事务或一个运算法
则的多次需求而编写和测试SQL语句的重复劳动。调
化只影响存储过程。与改变、测试和调整一个及多个 客户的成千上万个用户程序相比,改变和测试存储过 程是更有效、更省时间、少犯错误的好方法。
8、保证了运算法则的一致性。 存储过程能够确保运算法则每次以同样的精度运 行。与此相反,在一个或多个客户应用中多处存放的
嵌入式SQL语句,它们写的稍有不同,就会产生不同
触发器对于强制执行的工作是非常有用的,它主
要用于下面两种情况: 1 、保证数据的完整性和一致性。当规则太复杂, 不能用数据定义语言(DDL)定义它们、这时使用触发 器非常有效;
2、实现数据之间逻辑联系的业务规则。 例如:在职工表中插入一个新的职工记录时,业 务规则要求职工的工作终止日期字段是一个空值。这 个规则不能使用数据定义语言中 CREATE TABLE语
个过程时,数据库服务器对它进行分析并准备好一个
执行计划,最后把这个计划存储在系统表中,以后过 程的每次执行都可以依据这个存储的计划,由于大部
分查询处理工作已做好,不需再花费时间进行编译, 因此存储过程的执行较快。
在客户工作站上,通常调用存储过程比把一系列
的SQL语句发送到数据库引擎上更有效。当一份申请 首次调用存储过程时,它被编译进数据库引擎的虚拟 内存中,并在内存中运行。编译后的代码,被保留在 内存中以便于以后的运行,这个工作完全在数据库服
录时触发;
●修改触发器 (Update trigger) ,在表中企图修改 记录时触发。
存储过程 存储过程是从客户应用或访问数据库的语句中分
离出来的。存储过程的设置大大提高了SQL语句的功
能、效率和灵活性,具体表现在: 1、改善了性能。 存储过程与原始SQL语句或批处理中的SQL语句 的最大区别在于它是预先编译好的,当第一次运行一
3、减少了网络通讯量。
在客户/服务器环境下,存储过程经过编译和优化
后,存储在服务器端而不是客户端。 这样,在网络上 传输的只是一个远程调用和最终的执行结果,而不是 一系列的SQL语句和它们的返回结果,从而大大减少 了网络上的传输量,提高了系统性能。
4、完成一些难以完成的工作。 如果本地数据库服务器和远程数据库服务器都允
句定义,它需要一个触发器。
对于不能由其它手段实现的规则可考虑使用触发 器,以此改善系统的效率。如:参照完整性、表或列
的约束等。
触发器的类型
触发器是根据所触发事件的类型进行分类的。通
常的RDBMS支持三种类型的触发器: ●插入触发器 (lnsent trigger),在表中企图插入记
录时触发;
●删除触发器 (Delete trigger),在表中企图删除记