实验十 触发器.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
触发器(trigger) 是一种特殊的存储过程,不需要由用户调用,当对数据库进行修改(插入、修改、更新)操作时,自动被系统执行。 在数据库应用过程中,DBMS需对数据库完整性状况及运行中的其他异常状况发出预警信息并进行相应处理,所以引入触发器,这是一种主动完整性约束机制。 触发器实现了数据库管理的ECA(event-condition-actionrule)规则,也称主动数据库规则,即:当发生某一事件时,如果满足给定条件,则执行相应动作。 ECA规则体现了DBMS的主动服务性能,即根据发生的事件或数据库状态主动进行相关处理,由触发器实现。 触发器的功能及特性: 可强制执行较复杂的业务规则或要求。 可以禁止或回滚违反引用完整性的更改,从而取消所尝试的数据修改。 可以用来实施复杂的完整性约束,实现数据库中多张表的级联更新。 使用CHECK约束,可以限制不满足检查条件的记录输入到表中。CHECK约束的检查条件表达式不允许引用其它表中的字段,而触发器可以引用其它表中的字段,实现比CHECK约束更为复杂的约束。 *约束只能通过标准的系统错误信息传递错误信息。如果应用程序要求使用(或能从中获益)自定义信息和较为复杂的错误处理,则必须使用触发器。 *触发器可以从DBA_TRIGGERS,USER_TRIGGERS数据字典中查到。 *触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。通常域完整性可通过CHECK约束进行强制,而引用完整性(RI)可通过FOREIGNKEY约束进行强制。因此,在约束所支持的功能无法满足应用程序的功能要求时,触发器才显得极为有用。 *触发器是数据库语言程序化的一种表征,并且能够保证数据库的一致性,另一方面检测和维护触发器增大了系统开销,降低了修改数据库操作的效率。 *在数据库操作中,可以通过关系、触发器、存储过程、应用程序等来实现数据操作,同时规则、约束、缺省值也是保证数据完整性的重要机制。滥用触发器势必影响数据库的结构,并且增加数据库维护的复杂性。 触发器的触发方式 1、后触发 当引起触发器执行的更新语句执行完成,并通过各种约束检查后,才执行触发称为后触发。 创建后触发方式的触发器时用AFTER或FOR关键字来指定。 后触发只能创建在表上,而不能创建在视图上。 2、替代触发 引起触发器执行的更新语句停止执行,仅执行触发器语句,这种触发方式称做替代触发。 创建这种触发器时用INSTEADOF关键字来指定。 替代触发可以创建在表或视图上。 3、inserted临时表和deleted临时表 每个触发器被激活时,系统都会为它自动创建两个临时表:inserted表和deleted表。 当执行INSERT语句向表中插入数据时,系统在将数据插入表的同时,自动把相应的数据插入到inserted这一系统临时表中; 当执行DELETE语句删除表中的数据时,系统在将数据从表中删除的同时,自动把删除的数据插入到deleted这一系统临时表中; 当执行UPDATE语句修改表数据时,系统先从表中删除原有的行,然后再插入新行。其中被删除的行存放在deleted表中,同时插入的新行存放在inserted表中。 触发器执行完成后,与该触发器相关的这两个临时表也会被自动删除。 触发器的创建 利用SQL命令创建触发器 语法格式: CREATETRIGGERtrigger_nameON{table|view}/*指定触发器名及操作对象*/ [WITHENCRYPTION]/*说明是否采用加密方式*/ {FOR|AFTER|INSTEADOF}{[DELETE][,][INSERT][,][UPDATE]} /*定义触发器的类型*/ [NOTFORREPLICATION]/*说明该触发器不用于复制*/ AS [{IFUPDATE(column)[{AND|OR}UPDATE(column)] [...n] |IF(COLUMNS_UPDATED(){bitwise_operator}updated_bitmask) {comparison_operator}column_bitmask[...n] }] /*两个IF子句用于说明触发器执行的条件*/ sql_statements /*T-SQL语句序列*/ (1)FOR触发器的设计 【例1】对于school数据库,如果在student表中添加或更改数据,则向客户端显示一条信息。/*使用带有提示消息的触发器*/ 【例2】在数据库school中创建一触发器,当向score表中插入一记录时,检查该记录的sno在student表是否存在,检查

文档评论(0)

linyin1994 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档