预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共43页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

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