触发器数据库精选文档.ppt
《触发器数据库精选文档.ppt》由会员分享,可在线阅读,更多相关《触发器数据库精选文档.ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、触发器数据库1本讲稿第一页,共五十六页7.1.1触发器的基本概念触发器的基本概念7.1触发器的基本概念和优点触发器的基本概念和优点 数据库触发器是一种在基表被修数据库触发器是一种在基表被修改时自动执行的内嵌过程,当使用改时自动执行的内嵌过程,当使用UPDATEUPDATE、INSERTINSERT或或DELETEDELETE命令在指定命令在指定表中对数据进行修改时,用来防止对表中对数据进行修改时,用来防止对数据进行的不正确或不一致的修改数据进行的不正确或不一致的修改 2本讲稿第二页,共五十六页通过触发器可以把事务通过触发器可以把事务规则从应用程序代码移到数规则从应用程序代码移到数据库中从而确保
2、事务规则被据库中从而确保事务规则被遵守,并能显著提高性能遵守,并能显著提高性能3本讲稿第三页,共五十六页7.1.2使用触发器的优点使用触发器的优点1.强制比强制比CHCEKCHCEK约束更复杂的数据约束更复杂的数据完整性完整性在在CHECKCHECK约束中不允许引用其他约束中不允许引用其他表中的列来完成检查工作,而触发表中的列来完成检查工作,而触发器则可以引用其他表中的列来完成器则可以引用其他表中的列来完成数据完整性的约束数据完整性的约束进出货:存货量进出货:存货量定购量定购量4本讲稿第四页,共五十六页2.使用自定义的错误信息使用自定义的错误信息用户有时需要在数据完整用户有时需要在数据完整性遭
3、到破坏或其他情况下,发性遭到破坏或其他情况下,发出预先自定义好的错误信息或出预先自定义好的错误信息或动态自定义的错误信息动态自定义的错误信息5本讲稿第五页,共五十六页3.实现数据库中多张表的级联修改实现数据库中多张表的级联修改在在titleauthor、sales及及roysched表中对各匹配行进行定位删除表中对各匹配行进行定位删除title_idtitle_id列列titlestitles表表在title_id列上定义一个删除触发器titleauthortitleauthor表表salessales表表royschedroysched表表此三列均有title_id字段6本讲稿第六页,共五十
4、六页4.比较数据库修改前后数据的状态比较数据库修改前后数据的状态用户可在触发器用户可在触发器中引用由于修改中引用由于修改所影响的记录行所影响的记录行触触发发器器提供提供访问由访问由INSERTINSERT、UPDATEUPDATE或或DELETEDELETE语句引起的数据语句引起的数据变化的前后状态变化的前后状态7本讲稿第七页,共五十六页5.维护非规范化数据维护非规范化数据非规范数据通非规范数据通常是指在表中常是指在表中的派生的、冗的派生的、冗余的数据值余的数据值维护非规范化数据应该通过使用触发器来实现表的级联是指不表的级联是指不同表之间的主外同表之间的主外键关系,维护表键关系,维护表的级联可
5、通过设的级联可通过设置表的主键与外置表的主键与外键的关系来实现键的关系来实现注意区别8本讲稿第八页,共五十六页 触发器类型:触发器类型:分为两种:分为两种:AFTER触发器和触发器和INSTEADOF触发器触发器AFTER触发器:触发器:这种触发器将在数据变动这种触发器将在数据变动(insert,update,delete操作操作)完成完成以后才触发。对变动的数据进行检查,如果发现错误,则拒以后才触发。对变动的数据进行检查,如果发现错误,则拒绝或回滚变动的数据。绝或回滚变动的数据。INSTEADOF触发器:触发器:这种触发器将在数据变动以前被触发。并取代变动数据这种触发器将在数据变动以前被触发
6、。并取代变动数据的操作的操作(insert,update,delete操作操作),转而去执行触发器定义,转而去执行触发器定义的操作。的操作。在建立触发器时,还必须指定触发操作:在建立触发器时,还必须指定触发操作:insert、update、delete操作,至少指定一种,也可指定多种。操作,至少指定一种,也可指定多种。9本讲稿第九页,共五十六页触发事件发生After条件触发器执行示意图条件触发器执行示意图执行触发事件执行触发器动作触发事件发生Insteadof条件触发器执行示意图条件触发器执行示意图不执行触发事件不执行触发事件执行触发器动作10本讲稿第十页,共五十六页 触发器结构:触发器结构:
7、事件UPDATEINSERTDELETE条件AFTERINSTEAD OF动作各种Transact-SQL语句有时,触发器也称主动规则,或称事件条件动作规则(ECA)11本讲稿第十一页,共五十六页7.2触发器的创建触发器的创建CREATETRIGGERtrigger_nameONtable|viewWITHENCRYPTIONFOR|AFTER|INSTEADOFDELETE,INSERT,UPDATEWITHAPPENDNOTFORREPLICATIONAS12本讲稿第十二页,共五十六页IFUPDATE(column)AND|ORUPDATE(column).n|IF(COLUMNS_UPD
8、ATED()bitwise_operatorupdated_bitmask)comparison_operatorcolumn_bitmask.nsql_statement.n SQL Server不支持在触发器中包含所有的create语句、DROP语句等13本讲稿第十三页,共五十六页创建触发器创建触发器在同一个数据表中可以创建多个在同一个数据表中可以创建多个after触发器,在表或视图上,触发器,在表或视图上,每个每个insert、update、delete语句语句最多可以定义一个最多可以定义一个insteadof触发触发器。器。14本讲稿第十四页,共五十六页创建触发器应该考虑以下几个问题:
9、创建触发器应该考虑以下几个问题:CREATETRIGGER语句必须是批处理中的语句必须是批处理中的第一个语句。第一个语句。创建触发器的权限默认分配给表的所有者,创建触发器的权限默认分配给表的所有者,且不能将该权限转给其他用户。且不能将该权限转给其他用户。触发器为数据库对象,其名称必须遵循标识触发器为数据库对象,其名称必须遵循标识符的命名规则。符的命名规则。虽然触发器可以引用当前数据库以外的对象,虽然触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建触发器。但只能在当前数据库中创建触发器。15本讲稿第十五页,共五十六页创建触发器应该考虑以下几个问题:创建触发器应该考虑以下几个问题:虽然
10、不能在临时表或系统表上创建触发器,但虽然不能在临时表或系统表上创建触发器,但是触发器可以引用临时表。是触发器可以引用临时表。在为某数据表创建外键约束时在为某数据表创建外键约束时,选中选中级联删除级联删除相关字段相关字段,不能定义,不能定义INSTEADOFDELETE触发器;选中触发器;选中级联更新相关字段级联更新相关字段,不能定义,不能定义INSTEADOFUPDATE触发器。触发器。虽然虽然TRUNCATETABLE语句类似于没有语句类似于没有WHERE子句(用于删除行)的子句(用于删除行)的DELETE语语句,但它并不会引发句,但它并不会引发DELETE触发器,因为触发器,因为TRUNC
11、ATETABLE语句没有记录。语句没有记录。16本讲稿第十六页,共五十六页7.2.1INSERT触发器触发器例:例:在在pubs库的库的authors表上创建表上创建my_trigger1触发器,该触发器被操作触发器,该触发器被操作INSERT所触发所触发USEpubsgoCREATETRIGGERmy_trigger1ONauthorsFORINSERTASraiserror(unauthorized,10,1)17本讲稿第十七页,共五十六页当向表当向表authors插入数据时将触发触发插入数据时将触发触发器,但是数据仍能被插入表中器,但是数据仍能被插入表中INSERTINTOauthors
12、values(172-33-1234,White,John,408496-7223,10932BiggeRd.,MenloPark,CA,94025,1)定义触发器时指定了定义触发器时指定了FORFOR选项,选项,AFTERAFTER为为默默认值,触发器只在认值,触发器只在INSERTINSERT中指定的操作都中指定的操作都执行后才激发,因此仍能插入数据执行后才激发,因此仍能插入数据18本讲稿第十八页,共五十六页有没有什么办法能实现有没有什么办法能实现触发器被执行的触发器被执行的同时同时,取消触发触发器的取消触发触发器的SQL语句的操作呢?语句的操作呢?用INSTEAD OF关键字来实现19本
13、讲稿第十九页,共五十六页例例:在在pubspubs库的库的authors表上创建触发器表上创建触发器mymy_trigger2,它被操作,它被操作DELETEDELETE所触发,所触发,且要求触发触发器的且要求触发触发器的DELETEDELETE语句在执行语句在执行后被取消后被取消USEPubsGOCREATETRIGGERmy_trigger2ONauthorsINSTEADOFDELETEASraiserror(NoRightToDeleteIt,10,1)20本讲稿第二十页,共五十六页如果在表如果在表authors中删除前面例中删除前面例子中新增的记录,就会报错,子中新增的记录,就会报错
14、,如:如:DELETE*fromauthorsWhereau_id=172-33-123421本讲稿第二十一页,共五十六页7.2.2UPDATE触发器触发器通过定义通过定义IF UPDATE IF UPDATE 实现当特定列被更新时触发触发器实现当特定列被更新时触发触发器不论该更新影响表中的多少行不论该更新影响表中的多少行若用户需要实现多个特定列中的任意一若用户需要实现多个特定列中的任意一列被更新时触发触发器,可以通过在触列被更新时触发触发器,可以通过在触发器定义中使用多个发器定义中使用多个IFUPDATE语句来实现语句来实现22本讲稿第二十二页,共五十六页例例:在在pubspubs库的库的a
15、uthorsauthors表上建触发器表上建触发器member_trigger,它将被,它将被UPDATEUPDATE操作操作激活激活,且不允许修改且不允许修改au_lname字段字段USEpubsgoCREATETRIGGERmember_triggerONauthorsFORUPDATEAS23本讲稿第二十三页,共五十六页不使用INSTEAD OF而是通过rollback transaction子句恢复原来的数据的方法来实现字段不被修改IFUPDATE(au_lname)BEGINraiserror(Unauthorized!,10,1)rollbacktransactionEND24本讲
16、稿第二十四页,共五十六页建好触发器后试着执行建好触发器后试着执行UPDATEUPDATE操作操作USEpubsgoUPDATEauthorsSETau_lname=WangtiWHEREau_lname=White运行结果显示:运行结果显示:“Unauthorized!”25本讲稿第二十五页,共五十六页在在“查询分析器查询分析器”中运行如下命令:中运行如下命令:USEpubsgoSELECTau_lnameFROMauthorsWHEREau_lnameLIKEW%查询结果中只有两行的查询结果中只有两行的White的的内容,可见刚才的更新操作并不能实内容,可见刚才的更新操作并不能实现对表中现对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 触发器 数据库 精选 文档
限制150内