SQL Server 2008数据库应用技术 教学课件 ppt 作者 张素青 孙杰 第9章

上传人:E**** 文档编号:89426211 上传时间:2019-05-25 格式:PPT 页数:34 大小:1.13MB
返回 下载 相关 举报
SQL Server 2008数据库应用技术 教学课件 ppt 作者  张素青 孙杰 第9章_第1页
第1页 / 共34页
SQL Server 2008数据库应用技术 教学课件 ppt 作者  张素青 孙杰 第9章_第2页
第2页 / 共34页
SQL Server 2008数据库应用技术 教学课件 ppt 作者  张素青 孙杰 第9章_第3页
第3页 / 共34页
SQL Server 2008数据库应用技术 教学课件 ppt 作者  张素青 孙杰 第9章_第4页
第4页 / 共34页
SQL Server 2008数据库应用技术 教学课件 ppt 作者  张素青 孙杰 第9章_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《SQL Server 2008数据库应用技术 教学课件 ppt 作者 张素青 孙杰 第9章》由会员分享,可在线阅读,更多相关《SQL Server 2008数据库应用技术 教学课件 ppt 作者 张素青 孙杰 第9章(34页珍藏版)》请在金锄头文库上搜索。

1、第9章 触 发 器,9.1 触发器概述,9.1.1 触发器的概念 触发器是一种特殊类型的存储过程,当在指定表中使用UPDATE、INSERT 或 DELETE中的一种或多种数据修改命令对数据进行修改时,触发器就会执行。触发器可以查询其他表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求。触发器还有助于强制引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。,9.1.2 触发器的类型与优点,1.触发器的类型 触发器可以分为AFTER触发器和INSTEAD OF触发器。 2. 使用触发器的优点 强制比CHECK约束更复杂的数据完整性。 使用自定义的错误提示信

2、息。 触发器可以通过数据库中的相关表进行级联更改。 比较数据库修改前后数据的状态。 维护规范化数据。,9.2 创建和应用触发器,CREATE TRIGGER语句语法格式如下: CREATE TRIGGER trigger_name ON table | view WITH ENCRYPTION FOR | AFTER | INSTEAD OF DELETE ,INSERT ,UPDATE NOT FOR REPLICATION AS IF UPDATE ( column ) AND | OR UPDATE ( column ) .n | IF ( COLUMNS_UPDATED ( ) bit

3、wise_operator updated_bitmask ) comparison_operator column_bitmask .n sql_statement .n ,9.2.1 INSERT触发器,INSERT触发器通常被用来验证被触发器监控的字段中的数据是否满足要求的标准,以确保数据完整性。这种触发器是在向指定的表中插入记录时被自动执行的。创建的INSERT触发器可以分为AFTER和INSTEAD OF两种不同类型的触发器,AFTER类型触发器是在系统执行到INSERT语句时被触发,在INSERT语句执行完毕后再去执行触发器的相关操作;而INSTEAD OF类型触发器是在系统执行到

4、INSERT语句时被触发,但在INSERT语句执行前即执行触发器相关操作,而该INSERT语句则不再执行。,例9-1,在“学生选课”数据库中的“学生”表上创建一个名为xuesheng_tri1的AFTER类型触发器,当用户向“学生”表中添加一条记录时,提示“已成功向学生表中添加一条记录!”,例9-1,触发器创建后,用户向“学生”表中插入数据时,该触发器将被执行,而且是数据先被插入到表中,然后再执行触发器。,例9-2,在“学生选课”数据库中的“学生”表上创建一个名为xuesheng_tri2的INSTEAD OF类型触发器,当用户向“学生”表中添加一条记录时,提示“您未被授权执行插入操作!”同时

5、阻止用户向“学生”表中添加记录。对应的SQL语句如下: USE 学生选课 GO CREATE TRIGGER xuesheng_tri2 ON 学生 INSTEAD OF INSERT AS PRINT 您未被授权执行插入操作! GO,例9-2,触发器创建成功后,用户向学生表中插入数据时,该触发器将被执行,其结果是用户看到相应提示,但INSERT语句则没有执行。,9.2.2 UPDATE触发器,在定义有UPDATE触发器的表上执行UPDATE语句时,将触发UPDATE触发器。用户可以通过使用该触发器来提示或者限制用户进行更新操作,用户也可以在UPDATE触发器中通过定义IF UPDATE(co

6、lumn name)语句来实现当用户对表中特定的列更新时操作被阻止,从而来保护特定列的信息。如果用户需要实现多个特定列中的任意一列被更新时操作被阻止,可以在触发器定义中通过使用多个IF UPDATE(column name)语句在多个特定列上来分别实现。,例9-3,在“学生选课”数据库中的“学生”表上创建一个名为xuesheng_tri3的触发器,该触发器将被UPDATE操作激活,该触发器将不允许用户修改“学生”表的“班级”列。对应的SQL语句如下: USE 学生选课 GO CREATE TRIGGER xuesheng_tri3 ON 学生 AFTER UPDATE AS IF UPDATE

7、(班级) BEGIN PRINT 禁止修改学生所在班级 ROLLBACK END GO,例9-3,例9-3,例9-4,在“学生选课”数据库中的“学生”表上创建一个名为xuesheng_tri4的触发器,该触发器将被UPDATE操作激活,该触发器将不允许用户对“学生”表进行任何更新。对应的SQL语句如下: USE 学生选课 GO CREATE TRIGGER xuesheng_tri4 ON 学生 INSTEAD OF UPDATE AS PRINT 您未被授权对表进行更新! GO,例9-4,9.2.3 DELETE触发器,在定义有DELETE触发器的表上执行DELETE语句时,将触发DELET

8、E触发器。 【例9-5】在“学生选课”数据库中的“学生”表上创建一个名为xuesheng_tri5的触发器,该触发器将对“学生”表中删除记录的操作给出不允许执行删除操作信息提示,并取消当前的删除操作。,例9-5,USE 学生选课 GO CREATE TRIGGER xuesheng_tri5 ON 学生 AFTER DELETE AS BEGIN RAISERROR(对不起,您不能执行删除操作,10,1) ROLLBACK TRANSACTION END GO,例9-5,创建建好触发器后,尝试在学生表上执行DELETE操作:,例9-6,在“学生选课”数据库中的“学生”表上创建一个名为xuesh

9、eng_tri6的触发器,该触发器将被DELETE操作激活,该触发器将不允许用户对“学生”表进行任何删除。对应的SQL语句如下: USE 学生选课 GO CREATE TRIGGER xuesheng_tri6 ON 学生 INSTEAD OF DELETE AS PRINT 您未被授权对表删除操作! GO,例9-6,建好触发器后,在“学生”表上执行DELETE操作,9.2.4 INSERTED表和DELETED表,触发器中可以使用两种特殊的表:DELETED表和INSERTED 表。 DELETED表用于存储DELETE和UPDATE语句所影响的行的副本。 INSERTED表用于存储INSE

10、RT和UPDATE语句所影响的行的副本。 在定义触发器时,可以为引发触发器的操作恰当使用 INSERTED和DELETED表。,INSERTED表和DELETED表,例9-7,在学生表上创建xuesheng_tri7触发器,该触发器在学生表执行INSERT操作时被触发,其作用是,将被新添加到学生表中学生的“学号”和“姓名”自动添加到学生_籍贯表中。对应的SQL语句如下: USE 学生选课 GO CREATE TRIGGER xhesheng_tri7 ON 学生 FOR INSERT AS BEGIN DECLARE n1 char(8),n2 char(10) SELECT n1=INSER

11、TED.学号,n2=INSERTED.姓名 FROM INSERTED INSERT INTO 学生_籍贯(学号,姓名) VALUES(n1,n2) PRINT(学生信息已相应添加至学生_籍贯表) END GO,例9-7,触发器创建完成后,向学生表中添加一条测试记录:,例9-8,在学生表上创建xuesheng_tri8触发器,该触发器被DELETE操作所触发,实现当用户删除“学生”表中某一位学生记录的同时,系统自动在“学生_籍贯”表中找到相应学生,并将其删除。对应的SQL语句如下: USE 学生选课 GO CREATE TRIGGER xhesheng_tri8 ON 学生 FOR DELET

12、E AS BEGIN DECLARE n1 char(8) SELECT n1=DELETED.学号 FROM DELETED DELETE FROM 学生_籍贯 WHERE 学号=n1 PRINT(已删除学生_籍贯表中的相应学生) END,例9-8,触发器创建好后,在学生表中删除一条记录:,例9-9,在“学生”表上创建xuesheng_tri9触发器,该触发器被UPDATE操作所触发,实现当用户更新“学生”表中某一位学生的姓名时,系统自动在“学生_籍贯”表中找到相应学生,并将其对应修改。对应的SQL语句如下: USE 学生选课 GO CREATE TRIGGER xhesheng_tri9

13、ON 学生 FOR UPDATE AS BEGIN DECLARE n1 char(8),n2 char(10) SELECT n1=DELETED.学号 FROM DELETED SELECT n2=INSERTED.姓名 FROM INSERTED UPDATE FROM 学生_籍贯 SET 姓名=n2 WHERE 学号=n1 PRINT(已修改学生_籍贯表中的相应学生的姓名) END,例9-9,在触发器创建完后,在“学生”表中修改一名学生的姓名:,9.3 管理触发器,9.3.1 查看触发器的定义 1.使用系统存储过程 2.使用系统表 3.在“对象资源管理器中”查看触发器,例9-10,使用

14、系统存储过程查看触发器信息。,例9-11,使用系统表sysobjects查看数据库学生选课数据库上存在的所有触发器相关信息。,9.3.2 修改触发器,1.使用sp_rename命令修改触发器的名字。 2.使用SQL Server Management Studio查询分析器窗口中修改触发器定义。 3.通过ALTER TRIGGER命令修改触发器的定义文本。 4.禁止和启用触发器,例9-13,修改“学生选课”数据库中“学生”表上建立的触发器xuesheng_tri3,使得在用户执行删除、添加、修改操作时,系统均自动给出错误提示,并撤销用户的操作。对应的SQL语句如下: USE 学生选课 GO A

15、LTER TRIGGER xuesheng_tri3 ON 学生 FOR DELETE,INSERT,UPDATE AS BEGIN RAISERROR(对不起,您不能执行操作,10,1) ROLLBACK TRANSACTION END GO,9.3.3 删除触发器,(1)使用DROP TRIGGER删除指定的触发器,具体语法格式如下: DROP TRIGGER trigger ,.n (2)删除触发器所在的表时,该表上所有的触发器将被一并删除。 (3)在SQL Server Management Studio中进入“对象资源管理器”面板,找到相应的触发器并用鼠标右键单击,在弹出的菜单中,选择“删除”命令即可直接删除触发器。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号