《关系数据库基础触发器精选PPT.ppt》由会员分享,可在线阅读,更多相关《关系数据库基础触发器精选PPT.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、关系数据库基础触发关系数据库基础触发器器第1页,此课件共24页哦主要内容 明确了触发器的基本概念、用途,类型以及工明确了触发器的基本概念、用途,类型以及工作原理作原理了解了解DMLDML触发器触发器DDLDDL触发器的使用触发器的使用 第2页,此课件共24页哦7.1 7.1 触发器简介触发器简介 7.1.1 7.1.1 触发器概念触发器概念触发器是在对表进行插入(INSERT)、更新(UPDATE)或删除(DELETE)操作时自动执行的存储过程,它是一种特殊类型的存储过程。触发器这种特殊类型的存储过程,是在基表被修改时自动执行的内嵌过程。触发器是独立存储在数据库中的独立对象。触发器是现代数据库
2、管理系统用于响应数据变化的一种机制。触发器是实现数据维护规则的有效机制。第3页,此课件共24页哦 7.1.2 7.1.2 触发器用途触发器用途 触发器的用途有:1.比较不同版本的数据。2.读取其他数据库的表中的数据。3.在数据库中所有的相关表中级联所作的修改或删除。4.回滚无效的修改。5.强制实现比由CHECK约束提供的限制更为复杂的限制。6.执行本地和远程存储过程。第4页,此课件共24页哦7.1.3 7.1.3 触发器类型触发器类型在SQL SERVER 2005中,触发器分为两大类:DML触发器:DML触发器是当数据库服务器中发生数据操作语言事件时执行的存储过程。DML触发器又分为两大类:
3、AFTER 触发器和INSTEAD OF触发器。DDL触发器:DDL触发器是在响应数据定义语言事件时执行的存储过程。第5页,此课件共24页哦7.1.4 7.1.4 触发器工作原理触发器工作原理在SQL SERVER 2005中三种类型的“动作”可以激活DML触发器,即INSERT、DELETE以及UPDATE。After触发器在操作完成后再被激活执行触发器里的SQL语句 Instead Of触发器是在对记录的操作进行之前就被激活,执行触发器中的SQL语句,而不再执行原来的SQL操作 DDL触发器是在响应数据定义语言(DDL)语句时触发,一般用于在数据库中执行管理任务。第6页,此课件共24页哦
4、7.2 DML触发器的使用1.DML触发器是由DML语句触发的。2.DML触发器的基本要点:触发时机:指定触发器的出发时间。触发事件:引起触发器被触发的事件。条件谓词:当触发器中包含多个触发事件的组合时,为了分别针对不同的事件进行不同的处理,需要使用Oracle提供的条件谓词。3.INSERTING 当触发事件是INSERT时,为真。4.UPDATING(COLUMNX):当触发事件是UPDATE时,如果修改了column_x列,为真。5.DELETING:当触发时间是DELETE时,取值为真。第7页,此课件共24页哦7.2.1 After7.2.1 After触发器工作原理触发器工作原理AF
5、TER 触发器是这记录改变完之后,才会被激活执行,且只能在表上定义。它主要用于记录变更后的处理或检查,一旦发现错误可用Rollback Transaction语句回滚本次操作。当使用After Table修改一个表的结构以后,会使该表上的触发器变得无效。要使触发器重新发挥作用,就需要重新编译各个触发器。After触发器触发器只能建在数据表上。第8页,此课件共24页哦 7.2.2 Instead Of7.2.2 Instead Of触发器工作原理触发器工作原理Instead Of触发器用于取代原来的操作,在记录变更之前发生,它并不去执行原来的插入、更新、删除操作,而去执行触发器本身所定义的操作。
6、Instead Of触发器是定义在复杂视图上的触发器。第9页,此课件共24页哦7.2.3 DML7.2.3 DML触发器注意事项触发器注意事项注意事项 如下:After触发器只能用于数据表中,Instead Of触发器可以用于数据表中和视图中,但两种触发器都不可以建立在临时表上。一个数据表可以有多个触发器,但一个触发器只能对应一个表。在同一个数据表中,对每个操作而言可以建立许多个After触发器,但Instead Of触发器针对每个操作只能建立一个。如果针对某个操作既设置了After触发器又设置了Instead Of触发器,则Instead Of触发器一定会被激活,After触发器就不一定了。
7、第10页,此课件共24页哦7.2.4 7.2.4 设计设计AfterAfter触发器触发器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_sta
8、tement.n第11页,此课件共24页哦7.2.4 7.2.4 设计设计AfterAfter触发器触发器参数trigger_name:是触发器的名称。Table|view:是在其上执行触发器的表或视图,有时称为触发器表或触发器视图。WITHENCRYPTION加密:syscomments表中包含CreateTRIGGER语句文本的条目。AFTER:指定触发器只有在触发SQL语句中指定的所有操作都已成功执行后才激发。INSTEADOF:指定执行触发器而不是执行触发SQL语句,从而替代触发语句的操作。第12页,此课件共24页哦7.2.4 7.2.4 设计设计AfterAfter触发器触发器Del
9、ete,Insert,Update:是指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。WITHAPPEND:指定应该添加现有类型的其它触发器。NOTFORREPLICATION:表示当复制进程更改触发器所涉及的表时,不应执行该触发器。AS:是触发器要执行的操作。sql_statement:是触发器的条件和操作。触发器条件指定其它准则,以确定Delete、Insert或Update语句是否导致执行触发器操作。第13页,此课件共24页哦7.2.5 7.2.5 设计设计Instead Of Instead Of 触发器触发器Instead Of 触发器在工作时,SQL Server服务器
10、接到执行SQL语句请求以后,先建立临时的INSERT表和DELETE表,然后就激发Instead Of触发器,至于那个SQL语句是如何执行就不管了。把执行权交给了Instead Of 触发器,由它完成之后的操作。第14页,此课件共24页哦7.2.6 7.2.6 修改修改DMLDML触发器触发器1.使用SQL Server Management Studio修改触发器内容2.使用Transact-SQL语句修改触发器内容 可以使用系统存储过程sp_rename 命令修改触发器的名字。其语法格式为:Sp_rename oldname,newname例如修改前面创建的学生_INSERT触发器的名称为
11、学生2_INSERT的语句为:Sp_rename学生_INSERT,学生2_INSERT第15页,此课件共24页哦7.2.7 7.2.7 删除删除DMLDML触发器触发器1.使用Server Management Studio删除触发器1)在Server Management Studio中展开指定的服务器和数据库,这里选中【教务管理】数据库。2)选择要创建触发器的表(如选择“学生”表),展开数据表,双击数据表结点下的【触发器】项,可以查看到已经存在的触发器3)在要进行删除的触发器上右击,在弹出的快捷菜单中选择【删除】命令。4)在弹出的删除对象对话框中显示了当前要删除的触发器相关信息,如果确认
12、删除,则单击确定按钮,系统将删除触发器。第16页,此课件共24页哦7.2.7 7.2.7 删除删除DMLDML触发器触发器2.使用系统存储命令删除触发器用系统命令DROP TRIGGER 删除指定的触发器,其语法形式如下:DROP TRIGGER Trigger name例如删除触发器学生_INSERT的命令为:DROP TRIGGER 学生_INSERT第17页,此课件共24页哦7.2.8 7.2.8 禁用与启动禁用与启动DMLDML触发器触发器禁用触发器与删除触发器不同,禁用触发器时,仍会为数据表定义该触发器,只是在执行Delete语句、Insert语句或Update语句,除非重新启动触发
13、器,否则不会执行触发器中的操作。在Server Management Studio中禁用与启动触发器,也不需要先查到触发器列表。在触发器列表里,右击其中一个触发器,在弹出的快捷菜单中选择【禁用】选项,即可禁用该触发器。第18页,此课件共24页哦7.3 DDL触发器7.3.1 DDL7.3.1 DDL触发器简介触发器简介DDL 触发器是SQL Server 2005新增的一种特殊的触发器,它在响应数据定义语言(DDL)语句时触发。一般有以下几种情况可以使用DDL 触发器:数据库里的库架构或数据表结构很重要,不允许被修改。防止数据库或数据表被误操作删除。在修改某个数据表结构的同时在修改另一个数据表
14、的结构。要记录对数据库结构操作的事件。第19页,此课件共24页哦7.3.2 7.3.2 设计设计DDLDDL触发器触发器建立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 :=assembly_name.class_name.method_name第20页,此课件共24页哦7.3.2 7.3
15、.2 设计设计DDLDDL触发器触发器trigger_name:触发器的名称。每个 trigger_name 必须遵循标识符规则,但 trigger_name 不能以#或#开头。ALL SERVER:将 DDL 触发器的作用域应用于当前服务器。如果指定了此参数,则只要当前服务器中的任何位置上出现 event_type 或 event_group,就会激发该触发器。DATABASE:将 DDL 触发器的作用域应用于当前数据库。如果指定了此参数,则只要当前数据库中出现 event_type 或 event_group,就会激发该触发器 WITH ENCRYPTION:对 CREATE TRIGGE
16、R 语句的文本进行加密。使用 WITH ENCRYPTION 可以防止将触发器作为 SQL Server 复制的一部分进行发布。不能为 CLR 触发器指定 WITH ENCRYPTION。第21页,此课件共24页哦EXECUTEAS:指定用于执行该触发器的安全上下文。允许您控制SQLServer实例用于验证被触发器引用的任意数据库对象的权限的用户帐户。event_type:执行之后将导致激发DDL触发器的Transact-SQL语言事件的名称。用于激发DDL触发器的DDL事件中列出了在DDL触发器中可用的事件。event_group:预定义的Transact-SQL语言事件分组的名称。执行任何
17、属于event_group的Transact-SQL语言事件之后,都将激发DDL触发器。用于激发DDL触发器的事件组中列出了在DDL触发器中可用的事件组。sql_statement:触发条件和操作。触发器条件指定其他标准,用于确定尝试的DML或DDL语句是否导致执行触发器操作。7.3.2 7.3.2 设计设计DDLDDL触发器触发器第22页,此课件共24页哦7.3.3 查看与修改DDL触发器在【查询编辑器】里可以输入SQL代码对DDL触发器进行修改。创建DDL触发器CREATE TRIGGER(Transact-SQL)删除DDL触发器DROP TRIGGER(Transact-SQL)修改DDL触发器ALTER TRIGGER(Transact-SQL)重命名DDL触发器SP_RENAME TRIGGER(Transact-SQL)第23页,此课件共24页哦7.3.3 查看与修改DDL触发器禁用DDL触发器 DISABLE TRIGGER(Transact-SQL)启用DDL触发器 ENABLE TRIGGER(Transact-SQL)删除DDL触发器 DROP TRIGGER(Transact-SQL)第24页,此课件共24页哦