崔连和_SQLServer课件_第10课-触发器完成稿.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

序想象一只刚被母鹰孵化出来的雏鹰,抖动粘湿的翅膀,想要飞上青天的模样。那是一个多么壮观的场面呀!从一只不会飞行的雏鹰,到翱翔蓝天的巨鹰,这个过程要经过多少磨炼呀!序雏鹰在窝里嗷嗷待哺的等待母亲。雏鹰挥舞弱软的臂膀。母鹰带领小鹰晒太阳。一只小鹰不小心从树窝跌落因而折翼小鹰在母鹰背上享受凌风的速度。小鹰开始飞行。长成巨鹰。学习的过程需要有耐心的培养、爱心的呵护雄心的感染、关心的启发,以及信心的鼓舞。第10章触发器触发器(TRIGGER)是一种特殊的存储过程,它与表紧密相连,基于表而建立,可以视为表的一部分。用户创建触发器后,就能控制与触发器关联的表。当表中的数据发生插入、删除或修改时,触发器自动运行。触发器是只用维持数据应用完整性的记号方法。设置触发器使得多个不同的用户能够在保持数据完整性和一致性的良好环境下进行修改操作。10.1任务一创建DML触发器1.了解触发器2.了解触发器的类型3.掌握触发器的创建方法4.掌握触发器的管理方法12.1任务一安全认证在“OASystem”数据库中的“News”表中有一个“CreateDate”字段,用来记录该条记录被修改的时间。如果每次修改数据后都手工修改这个数据,即耗费时间和精力,还很难准确的记录当时的时间。触发器正好解决了这一问题。当在表“News”中创建了触发器后,一旦该表的数据发生了变化,就自动将当前的系统时间更新到“CreateDate”字段中。简要分析:触发器就是当设定的一个事件发生时去自动执行另一个事件。本次任务比较简单,是一个修改触发器,只要注意分清触发事件和被触发事件即可。实现步骤:(1)要了解触发器的含义,知道触发器是用来做什么。(2)要知道在SQLServer2008的资源管理器中如何创建触发器;(3)创建的触发器如何执行。本任务包括触发器的创建与运行,实现的具体步骤如下。步骤01:启动触发器编辑窗口。在SSMS中依次展开【OASystem】|【表】|【Department】节点,找到【触发器】子节点,右击【触发器】子节点,在弹出的菜单中单击【新建触发器】命令,打开触发器编辑窗口,如图10-1所示。图10-1启动触发器编辑窗口步骤02:编写代码。步骤01完成之后,系统自动在查询编辑器窗口中生成创建触发器的模板代码及注释,这些代码和缩写的功能是架构环境和说明程序。通常不使用系统提供的语句模版,将代码全部删除,然后手动输入创建存储过程语句。CREATETRIGGERNews_trigOnNewsAFTERUPDATEASBEGINIF(COLUMNS_UPDATED()ISNOTNULL)UPDATENewsSETCreateDate=GETDATE()FROMNewsn,insertediWHEREn.ID=i.IDEND编写好后,运行程序,完成触发器的创建步骤03:运行及验证触发器。首先查看“News”表未修改时的原表数据。在查询编辑器窗口中输入如下语句。SELECT*FROMNews打开“News”表,查看其中数据。需要注意的是,此时两条数据的“CreateDate”字段内的值都是2010年的数据。如图10-2所示。注意:此处日期是2010-06-08图10-2未修改的原表数据然后使用数据修改语句,修改“News”表中的数据,将“ID”为“2”的记录中“Author”字段的数值改为“聂东来”,语句如下。UPDATENewsSETAuthor='聂东来'WHEREID='2'根据前面创建的触发器功能,此时该条记录的“CreateDate”字段的数值应该自动发生变化,变为当前的系统日期,那是否如此呢?再次输入数据查询语句,检索“News”表中的数据。select*fromNews执行后,查看已经被修改的表中数据。如图10-3所示。“Author”字段值修改为“聂东来”后,“CreateDate”字段自动修改为当前日期图10-3查看已经被修改的表中数据可以看到,此时“ID”为“2”的记录的“CreateDate”字段中的数值已经自动变为系统日期,证明了触发器的有效性。1.什么是触发器触发器是与数据库和数据表相结合的特殊的存储过程,当数据表有Insert、Update、Delete操作或数据库有Create、Alter、Drop操作的时候,可以激活触发器,并运行其中的T-SQL语句。触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的。2.触发器的作用触发器是针对数据表(库)的特殊的存储过程,当这个表发生了Insert、Update或Delete操作时,会自动激活执行的,可以处理各种复杂的操作。在SQLServer2005和2008版本中,触发器有了更进一步的功能,在数据表(库)发生Create、Alter和Drop操作时,也会自动激活执行。3.触发器的分类触发器分为DML触发器和DDL触发器两种。其中DML触发器又分为After触发器和InsteadOf触发器两种。After触发器是先修改记录后激活的触发器;InsteadOf触发器是“取代”触发器。DDL触发器根据作用范围可以分为作用在数据库的触发器和作用在服务器的触发器两种。After触发器只能用于数据表中,而InsteadOf触发器即可以用在数据表中,也可以用在视图中。4.DML触发器DML触发器有助于数据库在修改数据的时候实施强制性规则,保证数据的完整性,其主要的功能如下。1、可以完成比CHECK更复杂的约束要求。2、拒绝违反引用完整性的数据操作,保证数据准确性。3、比较表修改前后的数据变化,并根据变化采取相应操作。4、级联修改具有关系的表。DML触发器主要针对的操作有三种:UPDATE、INSERT、DELETE。某个表格有了触发器,只要对该表格更新、插入或删除时,就会触动对应的UPDATE、INSERT或DELETE触发器。5.DELETED和INSERTED表系统会自动为触发器创建两个系统临时表:DELETED和INSERTED。触发器运行过程中的所涉及的数据都根据不同的操作类型保存在相应的表中,触发器在运行过程中会在需要的时候调用其中的数据,用户也可以在需要的时候从表中调用数据。每个触发器只能调用对应表中的数据,而两个表也和相应的触发器一起存储与内存中。这两个表虽被称为表,其实并不同于一般的数据库表,他们储存在内存中,而非在磁盘上。两个表的结构类似于定义触发器的表结构。DELETED表会储存因DELETE及UPDATE语句而受影响的行副本。当行因触发器被删除或更新时,被删除或更新的行会传送到DELETED表,触发器和用户即可以使用DELETED表中的数据。INSERTED表会储存被INSERT及UPDATE语句影响的行副本,在插入或更新事务时,新的行会同时被加至触发器表语INSERTED表。由于执行UPDATE语句时,会被视为插入或删除事务,旧的行值会保留一份副本在DELETED表中,而新的行值的副本则保留在触发器表语INSERTED表。INSERTED和DELETED表中的值只限于在触发器中使用。一旦触发器完成就无法再使用6.创建触发器语句创建触发器可以使用CREATETRIGGER语句,其语法格式如下。CREATETRIGGER触发器名ON{表名|视图名}[WITHENCRYPTION]{FOR}{[DELETE][,][INSERT][,][UPDATE]}AS[{IFUPDATE(字段名)…[{AND|OR}UPDATE(字段名)[…N]sql_statement[…N]参数说明:1、WITHENCRYPTION:加密选项,防止触发器作为SQLServer复制的一部分发布。2、[DELETE][,][INSERT][,][UPDATE]:表示指定执行哪些语句时将激活触发器,至少要指定一个选项,若选项多于一个,需用逗号分隔各选项。3、IFUPDATE(字段名):测试在制定的字段上进行的INSERT或UPDATE操作,不能用于DELETE操作。对INSERT操作,测试将返回TRUE值,因为在指定字段上输入了显性值或隐性(NULL)值。若要同时对多个字段进行测试,可使用逻辑运算符链接多个UPDATE(字段名)子句。【操作实例10-1】为“File”表创建触发器本实例需要实现,当在“Users”表中删除某条信息的时候,用数据输出命令提示用户,并显示该条被删除的数据信息。步骤01:触发器的创建。在查询编辑器窗口中输入如下语句。CREATETRIGGERDEL_triONUsersFORDELETEASprint'删除的信息为:'SELECT*FROMdeleted步骤02:触发器验证。为了验证触发器的功能,在查询编辑器窗口中运行如下语句,删除“File”表中的一条数据,触发触发器,会得到如图10-4所示结果。DELETEFROMUsersWHEREUserID='3'图10-4删除触发器验证结果10.2任务二管理DML触发器触发器创建完成后,其后续的管理主要包括修改DML触发器、启用DML触发器、禁停用DML触发器、删除DML触发器,这四项操作组成了管理DML触发器的全部工作,本次任务就是对这四项工作进行解说。这个任务包含了四个小任务,分别对触发器进行了修改、启用、停用、删除操作。其中修改触发器的语法与上个任务中的创建触发器的语法格式基本相同。启用、停用和删除都可以简单地通过SSMS的【对象资源管理器】来实现。一.修改触发器将前面触发器的“只要News表中数据修改就触发”改为“只有Author字段中的数据修改才触发”。步骤01:打开触发器修改窗体。在SSMS中依次展开【OASystem】︱【News】︱【触发器】节点,找到触发器【News_tri】子节点,右击【News_tri】子节点,在弹出的菜单中单击【修改】命令,打开触发器编辑窗体。步骤02:窗体介绍。窗体中的语句基本与创建触发器时的语句相同,只是将“CREATE”命令改为“ALTER”命令,如图10-5所示。用户只要在窗口中根据新的需求对代码可以进行相应修改即可。图10-5修改触发器编辑窗口步骤03:修改DML触发器的代码。根据任务要求,需要修改触发器触发条件,将原来的任意修改触发变为只有“Author”字段的值修改时触发。将原代码中的“IF(COLUMNS_UPDATED()isNotNull)”修改为“IFUPDATE(Author)”,步骤04:验证。触发器修改后通过数据的修改来验证其有效性。可以分别修改“News”表中的“Author”字段和另一个字段来验证本次修改的效果。修改及验证方式与前例相同,在此不再赘述。二.禁用触发器暂时不再需要“News_tri”触发器发挥其作用,但是又不删除它,可以暂时将其禁用。步骤01:禁用DML触发器。在SSMS中依次展开【OASystem】︱【News】︱【触发器】节点,找到触发器【News_tri】子节点,右击【News_tri】子节点,从弹出的菜单中单击【禁用】命令,打开“禁用触发器”对话框。步骤02:“禁用触发器”对话框。该对话框会将禁用的结果及相关信息显示出来,如图10-6所示。单击【关闭】按钮,则“News_tri”触发器被禁用。图10-6禁用触发器窗体三.启用触发器如果需要让已经禁用的触发器重新发挥作用,需要重新启用触发器。步骤01:启用DML触发器。在SSMS中依次展开【OASystem】︱【News】︱【触发器】节点,找到触发器【News_tri】子节点,右击【News_tri】子节点,从弹出的菜单中单击【启用】命令,打开“启用触发器”对话框。步骤02:“启用触发器”对话框。对话框会将启用的结果及相关信息显示出来,如图10-7所示。单击【关闭】按钮,则“News_tri”触发器被启用。图10-7启用DML触发器三.删除触发器如果触发器已经彻底失去作用,可以将其删除。步骤01:删除DML触发器。在SSMS中依次展开【OASystem】︱【News】︱【触发器】节点,找到触发器【News_tri】子节点,右击【

1 / 61
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功