欢迎来到天天文库
浏览记录
ID:17953852
大小:82.00 KB
页数:37页
时间:2018-09-11
《触发器原理与使用方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、触发器原理与使用方法触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的。11.1触发器简介触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQL语句时自动执行的一种存储过程。在SQLServer2005中,根据SQL语句的不同,把触发器分为两类:一类是DML触发器,一类是DLL触发器。11.1.1触发器的概念和作用在SQLServer2005里,可以用两种方法来保证数据的有效性和完整性:约束(check)和触发器(Trigger)。约束是直
2、接设置于数据表内,只能现实一些比较简单的功能操作,如:实现字段有效性和唯一性的检查、自动填入默认值、确保字段数据不重复(即主键)、确保数据表对应的完整性(即外键)等功能。触发器是针对数据表(库)的特殊的存储过程,当这个表发生了Insert、Update或Delete操作时,会自动激活执行的,可以处理各种复杂的操作。在SQLServer2005中,触发器有了更进一步的功能,在数据表(库)发生Create、Alter和Drop操作时,也会自动激活执行。触发器常用的一些功能如下:l完成比约束更复杂的数据约束:
3、触发器可以实现比约束更为复杂的数据约束l检查所做的SQL是否允许:触发器可以检查SQL所做的操作是否被允许。例如:在产品库存表里,如果要删除一条产品记录,在删除记录时,触发器可以检查该产品库存数量是否为零,如果不为零则取消该删除操作。l修改其它数据表里的数据:当一个SQL语句对数据表进行操作的时候,触发器可以根据该SQL语句的操作情况来对另一个数据表进行操作。例如:一个订单取消的时候,那么触发器可以自动修改产品库存表,在订购量的字段上减去被取消订单的订购数量。l调用更多的存储过程:约束的本身是不能调用存
4、储过程的,但是触发器本身就是一种存储过程,而存储过程是可以嵌套使用的,所以触发器也可以调用一个或多过存储过程。l发送SQLMail:在SQL语句执行完之后,触发器可以判断更改过的记录是否达到一定条件,如果达到这个条件的话,触发器可以自动调用SQLMail来发送邮件。例如:当一个订单交费之后,可以物流人员发送Email,通知他尽快发货。l返回自定义的错误信息:约束是不能返回信息的,而触发器可以。例如插入一条重复记录时,可以返回一个具体的友好的错误信息给前台应用程序。l更改原本要操作的SQL语句:触发器可以
5、修改原本要操作的SQL语句,例如原本的SQL语句是要删除数据表里的记录,但该数据表里的记录是最要记录,不允许删除的,那么触发器可以不执行该语句。l防止数据表构结更改或数据表被删除:为了保护已经建好的数据表,触发器可以在接收到Drop和Alter开头的SQL语句里,不进行对数据表的操作。11.1.2触发器的种类在SQLServer2005中,触发器可以分为两大类:DML触发器和DDL触发器lDML触发器:DML触发器是当数据库服务器中发生数据操作语言(DataManipulationLanguage)事件
6、时执行的存储过程。DML触发器又分为两类:After触发器和InsteadOf触发器lDDL触发器:DDL触发器是在响应数据定义语言(DataDefinitionLanguage)事件时执行的存储过程。DDL触发器一般用于执行数据库中管理任务。如审核和规范数据库操作、防止数据库表结构被修改等。11.2DML触发器的分类SQLServer2005的DML触发器分为两类:lAfter触发器:这类触发器是在记录已经改变完之后(after),才会被激活执行,它主要是用于记录变更后的处理或检查,一旦发现错误,也可
7、以用RollbackTransaction语句来回滚本次的操作。lInsteadOf触发器:这类触发器一般是用来取代原本的操作,在记录变更之前发生的,它并不去执行原来SQL语句里的操作(Insert、Update、Delete),而去执行触发器本身所定义的操作。11.3DML触发器的工作原理在SQLServer2005里,为每个DML触发器都定义了两个特殊的表,一个是插入表,一个是删除表。这两个表是建在数据库服务器的内存中的,是由系统管理的逻辑表,而不是真正存储在数据库中的物理表。对于这两个表,用户只有
8、读取的权限,没有修改的权限。这两个表的结构与触发器所在数据表的结构是完全一致的,当触发器的工作完成之后,这两个表也将会从内存中删除。插入表里存放的是更新前的记录:对于插入记录操作来说,插入表里存放的是要插入的数据;对于更新记录操作来说,插入表里存放的是要更新的记录。删除表里存放的是更新后的记录:对于更新记录操作来说,删除表里存放的是更新前的记录(更新完后即被删除);对于删除记录操作来说,删除表里存入的是被删除的旧记录。下面看一下触发器的工作
此文档下载收益归作者所有