网站大量收购独家精品文档,联系QQ:2885784924

08_触发器与事务.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在本章中,你将学到: 实现触发器 触发器是一种特殊的存储过程 触发器不能在系统表上创建。 触发器不像存储过程,不能返回值或结果集 实现事务 维护数据的完整性 ;触发器有以下类型: DML 触发器 当关联表被DML影响的时候,触发 DDL 触发器 DDL影响的时候触发 DDL 触发器是 SQL Server 2005 的新增功能 用于管理任务 触发器的限制 CREATE TRIGGER 必须是批处理中的第一条语句,并且只能应用于一个表。 触发器只能在当前的数据库中创建 ;DML触发器的特性 自动触发,在数据修改语句提交的时候 不能被显式调用或执行 防止错误、未授权和数据的不一致 不能返回数据给用户 可以嵌套到32层 示例:trgDeleteDepartment ;DML触发器的工作原理 SQL Server 2005 会自动创建和管理 两个表:Inserted表和Deleted表 驻留在内存中 用户不能修改 表的结构与触发器作用的表的结构相同 触发器工作??成以后,表删除 Inserted表:用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在插入或更新事务期间,新行将同时被添加到插入的表和触发器表。插入的表中的行是触发器表中的新行的副本。 Deleted表:用于存储 DELETE 和 UPDATE 语句所影响的行的副本。在执行 DELETE 或 UPDATE 语句的过程中,行从触发器表中删除,并传输到删除的表中。删除的表和触发器表通常没有相同的行。 ;INSERT操作时触发器的工作 插入数据时,insert触发器将被触发执行,新的记录被增加到触发器表和inserted表中 DELETE操作时触发器的工作 级联:主表删除,依赖表中也删除 限制:如果相关记录在依赖表中存在,限制从主表中删除 无效:主表中删除,在依赖表中的相关列中置为无效 UPDATE操作时触发器的工作 相当于插入一条新纪录和删除一条旧记录 表中原有的记录存放在deleted表中 修改后的记录存放在inserted表中;创建 DML 触发器时需指定: 名称。 定义触发器时所基于的表。 触发器被触发的时间。 激活触发器的数据修改语句。有效选项为 INSERT、UPDATE 或 DELETE。多个数据修改语句可激活同一个触发器。例如,触发器可由 INSERT 或 UPDATE 语句激活。 执行触发器操作的编程语句。;AFTER 触发器 : 在执行了 INSERT、UPDATE 或 DELETE 语句操作之后执行 AFTER 触发器,只有在成功执行触发 SQL 语句之后,才会执行 AFTER 触发器 如果仅指定 FOR 关键字,则 AFTER 为默认值 AFTER 触发器只能在表上指定 可以为任何一个DML操作定义多个AFTER触发器 INSTEAD OF 触发器 当要执行DML操作时,用别的操作代替 不能为表或视图的DML操作创建多余一个的INSTEAD OF 触发器;嵌套触发器 一个触发器执行启动另一个触发器的操作 DML 触发器和 DDL 触发器最多可以嵌套 32 层 递归触发器 直接递归 :在触发器触发并执行一个导致同一个触发器再次触发的操作时,将发生此递归 间接递归 :触发器触发并执行一个触发同一个表或另一个表的另一个触发器的操作时,将发生此递归。第二个触发器执行一个再次触发第一个触发器的操作 ;课间思考;触发器: 使用CREATE TRIGGER语句来创建触发器 语法: CREATE TRIGGER trigger_name ON { OBJECT NAME } { FOR | AFTER | INSTEAD OF } { event_type [ ,...n ] | DDL_DATABASE_LEVEL_EVENTS } { AS { sql_statement [ ...n ] } } 创建两个称为魔表的临时表 让我们看看如何…;;改变触发器: 语法: ALTER TRIGGER trigger_name { FOR | AFTER } { event_type [ ,...n ] | DDL_DATABASE_LEVEL_EVENTS } { AS { sql_statement [ ...n ] } } 删除触发器: 语法: DROP TRIGGER { trigger } 让我们看看如何…;ALTER TRIGGER HumanResources.trgInsertShift ON HumanResources.Shift FOR INSERT AS DECLARE @ModifiedDate d

文档评论(0)

sy78219 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档