第8章DataBase触发器.ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相应的操作。 (4)比较表修改前后数据之间的差别,并根据差别采取
相应的操作。
触发器类型:
可以分为:AFTER触发器和INSTEAD OF触发器两种。 AFTER触发器: 这种触发器将在数据变动(insert,update,delete操作)完 成以后才触发。对变动的数据进行检查,如果发现错误, 则拒绝或回滚变动的数据。 INSTEAD OF触发器: 这种触发器将在数据变动以前被触发。并取代变动数 据 的操作(insert,update,delete操作),转而去执行触发器定 义的操作。 在建立触发器时,还必须指定触发操作: insert、 update、delete操作,至少指定一种,也可指定多种。
8.4 触发器
8.4.1 触发器 概述
触发器是一种特殊类型的存储过程,它在INSERT、UPDATE、 DELETE语句对指定的表或视图进行修改时自动被执行。 一个表可以有多个触发器。 使用触发器的限制: (1) CREATE TRIGGER 必须是批处理中的第一条语句,并且 只能应用到一个表中。 (2) 触发器只能在当前的数据库中创建,但触发器可以引用当 前数据库的外部对象。 (3)触发器不应引用系统表。 (4) 在同一CREATE TRIGGER语句中,可以为多种操作(如 INSERT 和 UPDATE)定义相同的触发器操作。
WHERE name = 'reminder' AND type = 'TR') DROP TRIGGER reminder GO CREATE TRIGGER reminder ON STUDENT FOR INSERT, UPDATE AS PRINT ‘更新成功完成!’ --或RAISERROR ('更新成功完成!', 16, 10) GO 此时,执行如下语句: INSERT STUDENT (SNO,SNAME) VALUES('95088','刘华')
8.4.3 触发器中使用的特殊表
1.基本概念 在触发器执行的时候,会产生两个临时表: inserted 表和 deleted表,其结构和触发器所在的表结构相同。可利用这两个 临时表测试触发器执行的效果,不能直接对表中的数据进行更 改。 inserted表 :用于存储INSERT和UPDATE语句所影响的行的 副本。当向表中添加数据时,新的记录被同时添加到触发器表 和inserted表中。 inserted表中的行是触发器表中新行的副本。 deleted表:用于存储DELETE和UPDATE语句所影响的行的 副本。在执行DELETE 或UPDATE 语句时,行从触发器表中删 除,并存放到deleted逻辑表中。 deleted表和触发器表通常没 有相同的行。
INSERT INTO STUDENT SNO,SNAME VALUES(‘951001’,’王洪’) 执行结果为:
【例2】创建一个触发器,如果在学生表中添加或更改数据, 则将向客户端显示一条信息。
/*使用带有提示消息的触发器*/ USE 魏菊丽20086666 IF EXISTS (SELECT name FROM sysobjects
(5) 一个表的外键在 DELETF DELETE、INSTEAD OF UPDATE 触发器。
(6) 触发器中不允许包含以下 T-SQL 语句: CREATE DATABASE 、ALTER DATABASE 、LOAD DATABASE 、RESTORE DATABASE 、DROP DATABASE、 LOAD LOG 、RESTORE LOG 、DISK INIT、DISK RESIZE 和RECONFIGURE (7) CREATE TRIGGER 权限默认授予定义触发器的表所有 者,并且不可转让。 (8)使用触发器可以维护非正规化数据库环境中的记录级数据 的完整性。
8.4.2 利用SQL命令创建触发器
语法格式 CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [UPDATE ] [ , ] [DELETE] } AS sql_statement_block }
AS sql_statement :触发器的条件和操作。
【例1】 :创建一个触发器,在向student表插入、修改 和删除数据时,都会自动显示表中更新的内容。
USE 魏菊丽20086666 GO CREATE TRIGGER TRIXS ON STUDENT FOR INSERT,UPDATE,DELETE AS SELECT * FROM STUDENT GO 此时若执行如下语句:
触发器功能: (1)级联修改数据库中相关的表。 如‘学生表’中需要删除某学生,‘选课表'中与之
相关的记录应作调整:或修改、或删除。 (2)执行比检查约束更为复杂的约束操作。 书写更为复杂的T-SQL语句(引用多个表,使用IF-
ELSE等语句作更为复杂的检查)。 (3)拒绝或回滚违反引用完整性的操作。 检查对数据表的操作,是否违反引用完整性,并选择
各参数含义如下:
trigger_name :是触发器的名称。 table | view:是在其上执行触发器的表或视图,又称为触发器表或触发器 视图。注意:不能在视图上创建AFTER触发器。只有INSTEAD OF触发器才可以
基于视图创建。
WITH ENCRYPTION :加密SYSCOMMENT表中包含CREATE TRIGGER 语句文本的条目,防止触发器作为SQL Server复制的一部分发布。 AFTER:指定触发器为AFTER触发器。 AFTER为默认值。 INSTEAD OF :指定触发器为INSTEAD OF触发器。在表或视图上,每个 INSERT 、UPDATE 、DELETE语句最多可以定义一个INSTEAD OF触发器。 { [ INSERT ] [ , ] [UPDATE ] [ , ] [DELETE] } :指定在表或视图上执行哪 些更新语句时将激活触发器的关键字。必须至少指定一个选项,顺序可任意 组合。
相应的操作。
触发器类型:
可以分为:AFTER触发器和INSTEAD OF触发器两种。 AFTER触发器: 这种触发器将在数据变动(insert,update,delete操作)完 成以后才触发。对变动的数据进行检查,如果发现错误, 则拒绝或回滚变动的数据。 INSTEAD OF触发器: 这种触发器将在数据变动以前被触发。并取代变动数 据 的操作(insert,update,delete操作),转而去执行触发器定 义的操作。 在建立触发器时,还必须指定触发操作: insert、 update、delete操作,至少指定一种,也可指定多种。
8.4 触发器
8.4.1 触发器 概述
触发器是一种特殊类型的存储过程,它在INSERT、UPDATE、 DELETE语句对指定的表或视图进行修改时自动被执行。 一个表可以有多个触发器。 使用触发器的限制: (1) CREATE TRIGGER 必须是批处理中的第一条语句,并且 只能应用到一个表中。 (2) 触发器只能在当前的数据库中创建,但触发器可以引用当 前数据库的外部对象。 (3)触发器不应引用系统表。 (4) 在同一CREATE TRIGGER语句中,可以为多种操作(如 INSERT 和 UPDATE)定义相同的触发器操作。
WHERE name = 'reminder' AND type = 'TR') DROP TRIGGER reminder GO CREATE TRIGGER reminder ON STUDENT FOR INSERT, UPDATE AS PRINT ‘更新成功完成!’ --或RAISERROR ('更新成功完成!', 16, 10) GO 此时,执行如下语句: INSERT STUDENT (SNO,SNAME) VALUES('95088','刘华')
8.4.3 触发器中使用的特殊表
1.基本概念 在触发器执行的时候,会产生两个临时表: inserted 表和 deleted表,其结构和触发器所在的表结构相同。可利用这两个 临时表测试触发器执行的效果,不能直接对表中的数据进行更 改。 inserted表 :用于存储INSERT和UPDATE语句所影响的行的 副本。当向表中添加数据时,新的记录被同时添加到触发器表 和inserted表中。 inserted表中的行是触发器表中新行的副本。 deleted表:用于存储DELETE和UPDATE语句所影响的行的 副本。在执行DELETE 或UPDATE 语句时,行从触发器表中删 除,并存放到deleted逻辑表中。 deleted表和触发器表通常没 有相同的行。
INSERT INTO STUDENT SNO,SNAME VALUES(‘951001’,’王洪’) 执行结果为:
【例2】创建一个触发器,如果在学生表中添加或更改数据, 则将向客户端显示一条信息。
/*使用带有提示消息的触发器*/ USE 魏菊丽20086666 IF EXISTS (SELECT name FROM sysobjects
(5) 一个表的外键在 DELETF DELETE、INSTEAD OF UPDATE 触发器。
(6) 触发器中不允许包含以下 T-SQL 语句: CREATE DATABASE 、ALTER DATABASE 、LOAD DATABASE 、RESTORE DATABASE 、DROP DATABASE、 LOAD LOG 、RESTORE LOG 、DISK INIT、DISK RESIZE 和RECONFIGURE (7) CREATE TRIGGER 权限默认授予定义触发器的表所有 者,并且不可转让。 (8)使用触发器可以维护非正规化数据库环境中的记录级数据 的完整性。
8.4.2 利用SQL命令创建触发器
语法格式 CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [UPDATE ] [ , ] [DELETE] } AS sql_statement_block }
AS sql_statement :触发器的条件和操作。
【例1】 :创建一个触发器,在向student表插入、修改 和删除数据时,都会自动显示表中更新的内容。
USE 魏菊丽20086666 GO CREATE TRIGGER TRIXS ON STUDENT FOR INSERT,UPDATE,DELETE AS SELECT * FROM STUDENT GO 此时若执行如下语句:
触发器功能: (1)级联修改数据库中相关的表。 如‘学生表’中需要删除某学生,‘选课表'中与之
相关的记录应作调整:或修改、或删除。 (2)执行比检查约束更为复杂的约束操作。 书写更为复杂的T-SQL语句(引用多个表,使用IF-
ELSE等语句作更为复杂的检查)。 (3)拒绝或回滚违反引用完整性的操作。 检查对数据表的操作,是否违反引用完整性,并选择
各参数含义如下:
trigger_name :是触发器的名称。 table | view:是在其上执行触发器的表或视图,又称为触发器表或触发器 视图。注意:不能在视图上创建AFTER触发器。只有INSTEAD OF触发器才可以
基于视图创建。
WITH ENCRYPTION :加密SYSCOMMENT表中包含CREATE TRIGGER 语句文本的条目,防止触发器作为SQL Server复制的一部分发布。 AFTER:指定触发器为AFTER触发器。 AFTER为默认值。 INSTEAD OF :指定触发器为INSTEAD OF触发器。在表或视图上,每个 INSERT 、UPDATE 、DELETE语句最多可以定义一个INSTEAD OF触发器。 { [ INSERT ] [ , ] [UPDATE ] [ , ] [DELETE] } :指定在表或视图上执行哪 些更新语句时将激活触发器的关键字。必须至少指定一个选项,顺序可任意 组合。