您好,欢迎访问三七文档
高等学校大学计算机基础教育改革与实践系列教材SQLServer2008基础教程SQLServer2008FundamentalsTutorialsSQLServer2008基础教程SQLServer2008FundamentalsTutorials目录2高等教育出版社第10章触发器10.l触发器概述10.2触发器的类型10.3触发器的工作原理10.4创建与管理触发器10.5触发器的使用10.6基于视图的INSTEADOF触发器SQLServer2008基础教程SQLServer2008FundamentalsTutorials目录3高等教育出版社10.1触发器概述10.1.1触发器的特点10.1.2触发器的作用SQLServer2008基础教程SQLServer2008FundamentalsTutorials触发器的特点4高等教育出版社SQLServer允许为INSERT、UPDATE、DELETE创建触发器,当对指定表实施UPDATE、INSERT或DELETE的一种或多种数据操作时,触发器生效,从而触发一个或一系列T-SQL语句。触发器可以完成存储过程能完成的功能,但又具有其显著的特点:(1)与表紧密相连,可以看作表定义的一部分。(2)不能通过名称被直接调用,更不允许修改参数,而是当用户对表中的数据进行修改时自动执行。(3)可以用于SQLServer约束、默认值和规则的完整性检查,实施更为复杂的数据完整性约束。SQLServer2008基础教程SQLServer2008FundamentalsTutorials触发器的作用5高等教育出版社触发器的主要作用是实现由主键和外键无法实现的、复杂的参照完整性与数据的一致性•安全性,可以基于数据库的值授予用户操作数据库的某种权利;•审计,可以跟踪用户对数据库的操作。•实现复杂的数据完整性规则。•实现复杂的、非标准的数据库相关完整性规则。•同步实时地复制表中的数据。•自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理。SQLServer2008基础教程SQLServer2008FundamentalsTutorials10.2触发器的类型触发器按作用的类型可分为DML触发器和DDL触发器两大类,按被激活的时机又可分为AFTER触发器和INSTEADOF触发器。•DML触发器•DDL触发器•AFTER触发器•INSTEADOF触发器SQLServer2008基础教程SQLServer2008FundamentalsTutorials目录7高等教育出版社10.3触发器的工作原理10.3.1inserted表和deleted表10.3.2AFTER触发器的工作原理10.3.3INSTEADOF触发器的工作原理SQLServer2008基础教程SQLServer2008FundamentalsTutorialsinserted表和deleted表8高等教育出版社插入表(inserted)和删除表(deleted)是由SQLServer自动创建和管理的逻辑表。用户对这两个表只有读取的权限,而没有修改的权限。这两个表的结构与触发器所在数据表的结构完全一致,当触发器的工作完成之后,这两个表就会从内存中删除。查询这两个临时的驻留内存的表可以检测某些修改操作所产生的效果,如使用SELECT语句来检查INSERT和UPDATE语句执行的插入操作是否成功,触发器是否被这些语句触发等。插入表(inserted)里存放的是INSERT和UPDATE语句所影响数据行的副本;删除表(deldeted)用于存储DELETE和UPDATE语句所影响的行的副本。SQLServer2008基础教程SQLServer2008FundamentalsTutorialsAFTER触发器的工作原理9高等教育出版社AFTER触发器是在数据行更变完成之后才激活执行的。以删除记录为例,AFTER触发器的工作过程为:(1)当SQLServer接收到一个要执行删除操作的SQL语句时,SQLServer先将要删除的记录存放在删除表里;(2)把数据表里的数据行删除;(3)激活AFTER触发器,执行AFTER触发器里的SQL语句;(4)触发器执行完毕之后,删除内存中的删除表,退出整个操作。SQLServer2008基础教程SQLServer2008FundamentalsTutorialsINSTEADOF触发器的工作原理10高等教育出版社INSTEADOF触发器与AFTER触发器不同,AFTER触发器是在INSERT、UPDATE和DELETE操作完成后才激活的,而INSTEADOF触发器,是在这些操作进行之前就激活了,并且不再去执行原来的SQL操作,而去运行触发器本身的SQL语句。SQLServer2008基础教程SQLServer2008FundamentalsTutorials目录11高等教育出版社10.4创建与管理触发器10.4.1使用T-SQL语句创建触发器10.4.2使用模板创建触发器10.4.3更改和删除触发器SQLServer2008基础教程SQLServer2008FundamentalsTutorials使用T-SQL语句创建触发器12高等教育出版社在INSERT、UPDATE、DELETE语句上创建DML触发器的语法格式为:CREATETRIGGER触发器名称ON{表名|视图名}{FOR|AFTER|INSTEADOF}{[INSERT][,][UPDATE][,][DELETE]}AS{SQL语句[;][,...n]}SQLServer2008基础教程SQLServer2008FundamentalsTutorials使用T-SQL语句创建触发器13高等教育出版社在CREATE、ALTER、DROP、GRANT、DENY、REVOKE等语句上创建DDL触发器的语法格式如下:CREATETRIGGER触发器名ON{ALLSERVER|DATABASE}{FOR|AFTER}{事件类型|事件分组名}[,...n]AS{SQL语句[;]}SQLServer2008基础教程SQLServer2008FundamentalsTutorials使用模板创建触发器选定要建立触发器的某个表,选择【触发器】,右键菜单。使用模板的另一种方法是在模板资源管理器打开“Trigger”文件夹。选择【新建触发器】命令,显示代码编辑器,修改其中的参数值,编写代码后执行即可创建触发器SQLServer2008基础教程SQLServer2008FundamentalsTutorials创建和调用自定义函数15高等教育出版社使用CREATEFUNCTION创建自定义函数删除触发器DROPTRIGGER触发器名[ON{ALLSERVER|DATABASE}]修改和删除触发器也可以分别使用模板资源管理器中的“AlterT-SQLTrigger”和“DropTrigger”模板来完成。SQLServer2008基础教程SQLServer2008FundamentalsTutorials目录16高等教育出版社10.5触发器的使用10.5.1INSERT触发器的使用10.5.2DELETE触发器的使用10.4.3UPDATE触发器的使用SQLServer2008基础教程SQLServer2008FundamentalsTutorialsINSERT触发器的使用例10-1创建一个INSERT触发器,在向Stu_Course表插入一条记录后修改该生的总学分TotalCredit字段值。CREATETRIGGER[Test_Tri_Credit_INSERT]ON[dbo].[Stu_Course]FORINSERTASBEGINDECLARE@Stu_IDchar(12),@TotalCreditintSELECT@Stu_ID=Stu_IDFROMinsertedSELECT@TotalCredit=SUM(Credit)FROMStu_CourseWHEREStu_ID=@Stu_IDUPDATEStudentSETTotalCredit=@TotalCreditWHEREStu_ID=@Stu_IDENDSQLServer2008基础教程SQLServer2008FundamentalsTutorialsINSERT触发器的使用向Stu_Course插入一条数据前后Student表中TotalCredit中值的变化情况。向Stu_Course插入一条数据:INSERTINTOSTU_COURSE(Stu_ID,Course_ID,Term,Score,Credit)VALUES('200611012902','4','200701',95,3)SQLServer2008基础教程SQLServer2008FundamentalsTutorialsDELETE触发器的使用例10-2创建一个DELETE触发器,当从Stu_Course表中删除一条学生选课记录后更新该生的总学分TotalCredit字段值。CREATETRIGGER[Test_Tri_Credit_DELETE]ON[dbo].[Stu_Course]FORDELETEASBEGINDECLARE@Stu_IDchar(12),@TotalCreditintSELECT@Stu_ID=Stu_IDFROMdeletedSELECT@TotalCredit=SUM(Credit)FROMStu_CourseWHEREStu_ID=@Stu_IDUPDATEStudentSETTotalCredit=@TotalCreditWHEREStu_ID=@Stu_IDENDSQLServer2008基础教程SQLServer2008FundamentalsTutorialsDELETE触发器的使用从Stu_Course删除数据后Student表中TotalCredit中值的变化情况。DELETESTU_COURSEWHEREStu_ID='200611012901'ANDCourse_ID='4'SQLServer2008基础教程SQLServer2008FundamentalsTutorialsUPDATE触发器的使用例10-3创建一个UPDATE触发器,在修改Stu_Course中学生课程所得学分后,更新该生的总学分TotalCredit字段值。CREATETRIGGER[Test_Tri_Credit_UPDATE]ON[dbo].[Stu_Course]FORUPDATEASBEGINDECLARE@Stu_IDchar(12),@TotalCreditintSELECT@Stu_ID=Stu_IDFROMinsertedSELECT@TotalCredit=SUM(Credit)FROMStu_CourseWHEREStu_ID=@Stu_IDUPDATEStudentSETTotalCredit=@TotalCreditWHEREStu_ID=@Stu_IDENDSQLServer2008基础教程SQLServer2008FundamentalsTutorialsDELETE触发器的使用修改学号为“'200611012901'”学生课程“1”的学分为3:UPDATESTU_COURSESETCredit=3WHEREStu_ID='200611012901'ANDCourse_ID='1'修改Stu_Course表Credit值后Student表中TotalCredit中值的变化情况。SQLServer2008基础教程SQLServer2008FundamentalsTutorials基于视图的INSTEADOF触发器执行INSTEADOF触发器可以替代原始的触发动作。INSTEADOF触发器扩展了视图更新的类型,可用于更新那些没有办法通过正常方式更新的视图。在testdb数据库中建立一个视图Test_View_Stu_Course,查询学生选课情况。CREATEVIEW
本文标题:第10章触发器.
链接地址:https://www.777doc.com/doc-2153035 .html