触发器综合实例.ppt

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
触发器综合实例 第一页,共十五页,2022年,8月28日 触发器(trigger)是一种特殊的存储过程,它不同于一般的存储过程: 一般的存储过程通过存储过程名称被直接调用 触发器主要是通过事件进行触发而被执行。 第二页,共十五页,2022年,8月28日 触发器的主要作用是实现由主键和外键等约束所不能保证的复杂的参照完整性和数据一致性。 除此之外,触发器还有以下作用: 触发器可以对数据库进行级联修改。 实现比CHECK约束更为复杂的限制。 比较数据修改前后的差别。 强制表的修改要合乎业务规则。 第三页,共十五页,2022年,8月28日 按照触发响应时间按的不同可以将触发器分为两大类:后触发器和前触发器。 (1)后触发器( After Trigger ): 这种类型的触发器将在数据变动(UPDATE、INSERT和DELETE操作)完成后才被触发。 指定 AFTER 与指定 FOR 相同。 AFTER触发器只能在表上定义。 在同一个数据表中可以创建多个AFTER触发器。 默认的为AFTER触发器。 第四页,共十五页,2022年,8月28日 按照触发响应时间按的不同可以将触发器分为两大类:后触发器和前触发器。 (2)前触发器( Inserted Of Trigger ): INSTEAD OF触发器在数据变动以前被触发,并取代变动数据的操作(UPDATE、INSERT和DELETE操作),而去执行触发器定义的操作。 INSTEAD OF触发器可以在表或视图上定义。 在表或视图上,每个UPDATE、INSERT和DELETE语句最多可以定义一个INSTEAD OF触发器。 第五页,共十五页,2022年,8月28日 语法格式: CREATE TRIGGER [ schema_name . ]trigger_name ON { table | view } /*指定操作对象*/ [ WITH ENCRYPTION ] /*说明是否采用加密方式*/ { FOR |AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] /*说明该触发器不用于复制*/ AS { sql_statement [ ; ] [ ...n ] | EXTERNAL NAME asse MBly_name.class_name.method_name } 第六页,共十五页,2022年,8月28日 触发器中使用的特殊表 当触发器引用视图或者临时表,并产生两个特殊的表:deleted表和inserted表。 执行INSERT语句或UPDATE语句向表中插入数据行时,插入到触发器表中的行作为复本同时将被插入到inserted表中; 执行DELETE语句删除表中数据时,触发表中被删除的行作为复本被插入到deleted表中; 执行UPDATE语句修改数据时,先删除触发表中的旧行,并将该旧行插入deleted表中,再插入新行,同时将新行插入到inserted表中。 第七页,共十五页,2022年,8月28日 触发器的主要作用是实现由主键和外键等约束所不能保证的复杂的参照完整性和数据一致性。 除此之外,触发器还有以下作用: 触发器可以对数据库进行级联修改。 实现比CHECK约束更为复杂的限制。 比较数据修改前后的差别。 强制表的修改要合乎业务规则。 第八页,共十五页,2022年,8月28日 使用触发器实现复杂的参照完整性和数据一致性。 例1:若修改SC中一个记录的学号,则要检查S中是否存在与该学号相同的记录,若有则不允许修改,若没有则可以修改. 第九页,共十五页,2022年,8月28日 CREATE TRIGGER TRIGGER_SC ON [dbo].[sc] FOR UPDATE AS IF UPDATE(SNO) BEGIN DECLARE @SNO_NEW CHAR(2) ,@SNO_OLD CHAR(2),@SNO_CNT INT SELECT @SNO_OLD=SNO FROM DELETED SELECT @SNO_CNT=COUNT(*) FROM S WHERE SNO=@SNO_OLD IF @SNO_CNT<>0 ROLLBACK TRANSACTION END 第十页,共十五页,2022年,8月28日 使用触发器对数据库进行级联修改。 例2.若修改表S中一学生的学号,则表SC中与该学生相关的学号被自动修改. CREATE TRIGGER TRIGGER_S ON

文档评论(0)

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

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

1亿VIP精品文档

相关文档