关系数据库基础触发器_第1页
关系数据库基础触发器_第2页
关系数据库基础触发器_第3页
关系数据库基础触发器_第4页
关系数据库基础触发器_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、关系数据库基础触发器第1页,共24页,2022年,5月20日,7点22分,星期一主要内容 明确了触发器的基本概念、用途,类型以及工作原理了解DML触发器DDL触发器的使用 第2页,共24页,2022年,5月20日,7点22分,星期一7.1 触发器简介 7.1.1 触发器概念触发器是在对表进行插入(INSERT)、更新(UPDATE)或删除(DELETE)操作时自动执行的存储过程,它是一种特殊类型的存储过程。 触发器这种特殊类型的存储过程,是在基表被修改时自动执行的内嵌过程。 触发器是独立存储在数据库中的独立对象。触发器是现代数据库管理系统用于响应数据变化的一种机制。触发器是实现数据维护规则的有

2、效机制。 第3页,共24页,2022年,5月20日,7点22分,星期一 7.1.2 触发器用途 触发器的用途有:比较不同版本的数据。读取其他数据库的表中的数据。在数据库中所有的相关表中级联所作的修改或删除。回滚无效的修改。强制实现比由CHECK约束提供的限制更为复杂的限制。执行本地和远程存储过程。第4页,共24页,2022年,5月20日,7点22分,星期一7.1.3 触发器类型在SQL SERVER 2005中,触发器分为两大类: DML触发器:DML触发器是当数据库服务器中发生数据操作语言事件时执行的存储过程。DML触发器又分为两大类:AFTER 触发器和INSTEAD OF触发器。 DDL

3、触发器:DDL触发器是在响应数据定义语言事件时执行的存储过程。 第5页,共24页,2022年,5月20日,7点22分,星期一7.1.4 触发器工作原理在SQL SERVER 2005中三种类型的“动作”可以激活DML触发器,即INSERT、 DELETE以及UPDATE。 After触发器在操作完成后再被激活执行触发器里的SQL语句 Instead Of触发器是在对记录的操作进行之前就被激活,执行触发器中的SQL语句,而不再执行原来的SQL操作 DDL触发器是在响应数据定义语言(DDL)语句时触发,一般用于在数据库中执行管理任务。 第6页,共24页,2022年,5月20日,7点22分,星期一

4、7.2 DML触发器的使用DML触发器是由DML语句触发的。 DML触发器的基本要点: 触发时机:指定触发器的出发时间。 触发事件:引起触发器被触发的事件。 条件谓词:当触发器中包含多个触发事件的组合时,为了分别针对不同的事件进行不同的处理,需要使用Oracle提供的条件谓词。INSERTING 当触发事件是INSERT时,为真。UPDATING(COLUMNX):当触发事件是UPDATE时,如果修改了column_x列,为真。DELETING:当触发时间是DELETE时,取值为真。 第7页,共24页,2022年,5月20日,7点22分,星期一7.2.1 After触发器工作原理AFTER 触

5、发器是这记录改变完之后,才会被激活执行,且只能在表上定义。它主要用于记录变更后的处理或检查,一旦发现错误可用Rollback Transaction语句回滚本次操作。 当使用After Table修改一个表的结构以后,会使该表上的触发器变得无效。要使触发器重新发挥作用,就需要重新编译各个触发器。After触发器触发器只能建在数据表上。 第8页,共24页,2022年,5月20日,7点22分,星期一 7.2.2 Instead Of触发器工作原理Instead Of触发器用于取代原来的操作,在记录变更之前发生,它并不去执行原来的插入、更新、删除操作,而去执行触发器本身所定义的操作。Instead

6、Of触发器是定义在复杂视图上的触发器。第9页,共24页,2022年,5月20日,7点22分,星期一7.2.3 DML触发器注意事项注意事项 如下:After触发器只能用于数据表中,Instead Of触发器可以用于数据表中和视图中,但两种触发器都不可以建立在临时表上。一个数据表可以有多个触发器,但一个触发器只能对应一个表。在同一个数据表中,对每个操作而言可以建立许多个After触发器,但Instead Of触发器针对每个操作只能建立一个。如果针对某个操作既设置了After触发器又设置了Instead Of触发器,则Instead Of触发器一定会被激活,After触发器就不一定了。第10页,共

7、24页,2022年,5月20日,7点22分,星期一7.2.4 设计After触发器CreateTRIGGERtrigger_nameONtable|view WITHENCRYPTION FOR|AFTER|INSTEADOFDelete,Insert,Update WITHAPPENDNOTFORREPLICATIONASIFUpdate(column)AND|orUpdate(column).n |IF(COLUMNS_UpdateD()bitwise_operatorupdated_bitmask)comparison_operatorcolumn_bitmask.nsql_statem

8、ent.n第11页,共24页,2022年,5月20日,7点22分,星期一7.2.4 设计After触发器参数trigger_name:是触发器的名称。 Table|view:是在其上执行触发器的表或视图,有时称为触发器表或触发器视图。 WITHENCRYPTION加密:syscomments表中包含CreateTRIGGER语句文本的条目。 AFTER:指定触发器只有在触发SQL语句中指定的所有操作都已成功执行后才激发。 INSTEADOF:指定执行触发器而不是执行触发SQL语句,从而替代触发语句的操作。第12页,共24页,2022年,5月20日,7点22分,星期一7.2.4 设计After触

9、发器Delete,Insert,Update:是指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。 WITHAPPEND:指定应该添加现有类型的其它触发器。NOTFORREPLICATION:表示当复制进程更改触发器所涉及的表时,不应执行该触发器。 AS:是触发器要执行的操作。sql_statement:是触发器的条件和操作。触发器条件指定其它准则,以确定Delete、Insert或Update语句是否导致执行触发器操作。第13页,共24页,2022年,5月20日,7点22分,星期一7.2.5 设计Instead Of 触发器Instead Of 触发器在工作时,SQL Server

10、服务器接到执行SQL语句请求以后,先建立临时的INSERT表和DELETE表,然后就激发Instead Of触发器,至于那个SQL语句是如何执行就不管了。把执行权交给了Instead Of 触发器,由它完成之后的操作。第14页,共24页,2022年,5月20日,7点22分,星期一7.2.6 修改DML触发器使用SQL Server Management Studio修改触发器内容2. 使用Transact-SQL语句修改触发器内容 可以使用系统存储过程sp_rename 命令修改触发器的名字。其语法格式为:Sp_rename oldname, ,newname例如修改前面创建的学生_INSER

11、T触发器的名称为学生2_INSERT的语句为:Sp_rename学生_INSERT, 学生2_INSERT第15页,共24页,2022年,5月20日,7点22分,星期一7.2.7 删除DML触发器使用Server Management Studio删除触发器1) 在Server Management Studio中展开指定的服务器和数据库,这里选中【教务管理】数据库。2) 选择要创建触发器的表(如选择“学生”表),展开数据表,双击数据表结点下的【触发器】项,可以查看到已经存在的触发器3) 在要进行删除的触发器上右击,在弹出的快捷菜单中选择【删除】命令。4) 在弹出的删除对象对话框中显示了当前要

12、删除的触发器相关信息,如果确认删除,则单击确定按钮,系统将删除触发器。第16页,共24页,2022年,5月20日,7点22分,星期一7.2.7 删除DML触发器2. 使用系统存储命令删除触发器用系统命令DROP TRIGGER 删除指定的触发器,其语法形式如下:DROP TRIGGER Trigger name例如删除触发器学生_INSERT的命令为:DROP TRIGGER 学生_INSERT第17页,共24页,2022年,5月20日,7点22分,星期一7.2.8 禁用与启动DML触发器禁用触发器与删除触发器不同,禁用触发器时,仍会为数据表定义该触发器,只是在执行Delete语句、Inser

13、t语句或Update语句,除非重新启动触发器,否则不会执行触发器中的操作。在Server Management Studio中禁用与启动触发器,也不需要先查到触发器列表。在触发器列表里,右击其中一个触发器,在弹出的快捷菜单中选择【禁用】选项,即可禁用该触发器。第18页,共24页,2022年,5月20日,7点22分,星期一7.3 DDL触发器7.3.1 DDL触发器简介DDL 触发器是SQL Server 2005新增的一种特殊的触发器,它在响应数据定义语言 (DDL) 语句时触发。一般有以下几种情况可以使用DDL 触发器:数据库里的库架构或数据表结构很重要,不允许被修改。防止数据库或数据表被误

14、操作删除。在修改某个数据表结构的同时在修改另一个数据表的结构。要记录对数据库结构操作的事件。第19页,共24页,2022年,5月20日,7点22分,星期一7.3.2 设计DDL触发器建立DDL触发器的语法代码如下:CREATE TRIGGER trigger_name ON ALL SERVER | DATABASE WITH ,.n FOR | AFTER event_type | event_group ,.n AS sql_statement ; .n | EXTERNAL NAME ; := ENCRYPTION EXECUTE AS Clause :=第20页,共24页,2022年,

15、5月20日,7点22分,星期一7.3.2 设计DDL触发器trigger_name :触发器的名称。每个 trigger_name 必须遵循标识符规则,但 trigger_name 不能以 # 或 # 开头。ALL SERVER :将 DDL 触发器的作用域应用于当前服务器。如果指定了此参数,则只要当前服务器中的任何位置上出现 event_type 或 event_group,就会激发该触发器。DATABASE :将 DDL 触发器的作用域应用于当前数据库。如果指定了此参数,则只要当前数据库中出现 event_type 或 event_group,就会激发该触发器 WITH ENCRYPTIO

16、N :对 CREATE TRIGGER 语句的文本进行加密。使用 WITH ENCRYPTION 可以防止将触发器作为 SQL Server 复制的一部分进行发布。不能为 CLR 触发器指定 WITH ENCRYPTION。 第21页,共24页,2022年,5月20日,7点22分,星期一EXECUTE AS :指定用于执行该触发器的安全上下文。允许您控制 SQL Server 实例用于验证被触发器引用的任意数据库对象的权限的用户帐户。event_type :执行之后将导致激发 DDL 触发器的 Transact-SQL 语言事件的名称。用于激发 DDL 触发器的 DDL 事件中列出了在 DDL

17、 触发器中可用的事件。event_group :预定义的 Transact-SQL 语言事件分组的名称。执行任何属于 event_group 的 Transact-SQL 语言事件之后,都将激发 DDL 触发器。用于激发 DDL 触发器的事件组中列出了在 DDL 触发器中可用的事件组。 sql_statement :触发条件和操作。触发器条件指定其他标准,用于确定尝试的 DML 或 DDL 语句是否导致执行触发器操作。7.3.2 设计DDL触发器第22页,共24页,2022年,5月20日,7点22分,星期一7.3.3 查看与修改DDL触发器在【查询编辑器】里可以输入SQL代码对DDL触发器进行修改。创建DDL触发器CREATE TRIGGER (Transact-SQL)删除DDL触发器DROP TRIGGER (Transact-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论