第10章_触发器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第10章 触发器
10.1.3 触发器的分类
AFTER触发器 又称后触发器(After Trigger) 触发器:又称后触发器 触发器 又称后触发器( ) –这种类型的触发器将在数据变动(UPDATE、 INSERT和DELETE操作)完成后才被触发。 –指定 AFTER 与指定 FOR 相同。 – AFTER触发器只能在表上定义。 –在同一个数据表中可以创建多个AFTER触发器。 – Server2000默认的为AFTER触发器。
第10章 触发器
10.2 创建触发器
创建触发器前应考虑下列问题: 创建触发器前应考虑下列问题: CREATE TRIGGER 语句必须是批处理中的第一个语句。 创建触发器的权限默认分配给表的所有者,且不能将该 权限转给其他用户。 触发器为数据库对象,其名称必须遵循标识符的命名规 则。 虽然触发器可以引用当前数据库以外的对象,但只能在 当前数据库中创建触发器。
第10章 触发器
trigger_name:是触发器的名称 。 Table | view:是在其上执行触发器的表或视图 。 AFTER:指定触发器只有在触发 SQL 语句中指定的所 有操作都已成功执行后才激发。如果仅指定 FOR 关键 字,则 AFTER 是默认设置。 INSTEAD OF:指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。 AS:是触发器要执行的操作。 sql_statement:是触发器的条件和操作。 IF UPDATE (column):测试在指定的列上进行的 INSERT 或 UPDATE 操作,不能用于 DELETE 操作 。
CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS [ { IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ] [ ...n ] }] sql_statement [ ...n ] } }
第10章 触发器
10.3.3 删除触发器
1.使用企业管理器删除触发器 使用企业管理器删除触发器 2.使用Transact-SQL语句删除触发器 2.使用Transact-SQL语句删除触发器 使用Transact DROP USE salesTRIGGER { trigger } [ ,...n ] trigger:是要删除的触发器名称。 IF EXISTS (SELECT name FROM sysobjects WHERE name = 'TR_insertOrderDetails' AND type = 'TR') DROP TRIGGER TR_insertOrderDetails GO
第10章 触发器
2.使用Transact-SQL语句修改触发器的正文 使用Transact-SQL语句修改触发器的正文 Transact ALTER TRIGGER trigger_name 3.使用系统存储过程修改触发器的名称 sp_rename old_name,new_name , 例如: 例如: USE sales GO sp_rename TR_insertOrderDetails, R_OrderDetails_Insert GO
第10章 触发器
例10-3 创建一个AFTER触发器,要求实现以下功能:在 Order表上创建一个删除类型的触发器TR_deleteOrder, 当在Order表中删除某个订单的记录时,自动删除 OrderDetails表中与此订单编号对应的记录。
CREATE TRIGGER TR_deleteOrder ON [dbo].[Orders] FOR DELETE AS declare @OrderID int select @OrderID=OrderID from Deleted Print '开始查找并删除表OrderDetails中的相关记录...' Delete from OrderDetails Where OrderID=@OrderID Print '删除表OrderDetails中的相关记录条数为'+str(@@rowcount)+'条'
第10章 触发器
(2)查看触发器的相关性 ) 1)展开服务器组,然后展开服务器。 2)展开“数据库”文件夹,展开触发器所属的数据库, 然后单击“表”文件夹。 3)在详细信息窗格中,右击触发器所属的表,指向“所 有任务”菜单,然后单击“显示相关性”命令。 4)在“对象”中,单击要查看其相关性的触发器。
第10章 触发器
CREATE TRIGGER TR_insertOrderDetails ON [dbo].[OrderDetails] FOR INSERT OrderDetails表上创建一个插入类型的触发器 AS BEGIN TR_insertOrderDetails,当在OrderDetails表中插入记录 declare @orderid int,@pid char(6),@quantity int 时,自动计算产品的总价格,并将销售员信息和总价 declare @price money 格更新到销售员业绩表TotalSales表中。 declare @sid char(3)
第10章 触发器
deleted 表和 inserted 表 deleted 表用于存储 DELETE 和 UPDATE 语句所影 响的行的备份。在执行 DELETE 或 UPDATE 语句时, 行从基本表中删除,并转移到 deleted 表中。 deleted 表和基本表通常没有相同的行。 inserted 表用于存储 INSERT 和 UPDATE 语句所影响 的行的备份。在一个插入或更新事务处理中,新建行 被同时添加到 inserted 表和基本表中。inserted表 中的行是基本表中新行的备份。
第10章 触发器
虽然不能在临时表或系统表上创建触发器,但是触发 器可以引用临时表。 在含有用 DELETE 或 UPDATE 操作定义的外键的表中, 不能定义 INSTEAD OF DELETE和 INSTEAD OF UPDATE 触发器。 虽然 TRUNCATE TABLE 语句类似于没有 WHERE 子 句(用于删除行)的 DELETE 语句,但它并不会引发 DELETE 触发器,因为 TRUNCATE TABLE 语句没有 记录。 WRITETEXT 语句不会引发 INSERT 或 UPDATE 触发 器。
第10章 触发器
10.3 管理触发器
10.3.1 查看触发器
1.使用企业管理器查看触发器信息 . (1)查看触发器定义信息。 )查看触发器定义信息。 1)展开服务器组,然后展开服务器。 2)展开“数据库”文件夹,展开含触发器的表所属的数 据库,然后单击“表”文件夹。 3)在详细信息窗格中,右击触发器所在的表,指向“所 有任务”菜单,然后单击“管理触发器”命令
第10章 触发器
小结: 小结:
– 本章主要介绍了触发器的基本概念、优点和分类, 以及如何创建、查看、修改、删除触发器。要了解 表中记录的插入、修改、删除过程中SQL Server 2000 自动创建和管理的两个特殊表: deleted 表 和 inserted 表
第10章 触发器
图10-1 “触发器属性”对话框
第10章 触发器
(6)单击“应用”按钮,在名称下拉列表中出现新创建 的TR_UpdateSalers触发器的名称,单击“确定”按钮, 即可关闭该对话框,成功创建触发器。如图10-2所示。
图10-2 “触发器属性”对话框
第10章 触发器
10.2.2 使用 使用Transact-SQL语句创建触发器 语句创建触发器
பைடு நூலகம் 第10章 触发器
10.1.2 触发器的优点
1.触发器是自动执行的,当用户对表中的数据作了任何 修改(比如手工输入或者应用程序采取的操作)之后 立即被激活。 2.触发器可以通过数据库中的相关表进行层叠更改,实 现多个表之间数据的一致性和完整性。 3.触发器可以强制限制,这些限制比用CHECK约束所定 义的更复杂。
例10-2 创建一个AFTER触发器,要求实现以下功能:在
select @orderid=Orderid,@pid=productid,@quantity=quantity from inserted select @price=price from products where productid=@pid select @sid=saleid from orders where orderid=@orderid if exists(select * from totalsales where saleid=@sid) update totalsales set total=total+@quantity*@price where saleid=@sid else insert into totalsales values(@sid,@quantity*@price) END
第10章 触发器
2.使用系统存储过程查看触发器
sp_help sp_helptext sp_depends sp_helptrigger
第10章 触发器
10.3.2 修改触发器
1.使用企业管理器修改触发器的正文 – 在详细信息窗格中,右击将在其上创建触发器的表, 指向“所有任务”菜单,然后单击“管理触发器”命 令。在“名称”中框中选择触发器的名称。 – 在“文本”框中更改触发器的文本。用 CTRL+TAB 键来缩进触发器的文本。 若要检查语法,单击“检查语法”命令。 –单击“确定”按钮,即可关闭该对话框,成功修改触 发器。
第10章 触发器
INSTEAD OF触发器: 触发器: 触发器 又称前触发器( 又称前触发器(Inserted Of Trigger) )
– INSTEAD OF触发器在数据变动以前被触发,并取代 变动数据的操作(UPDATE、INSERT和DELETE操 作),而去执行触发器定义的操作。 – INSTEAD OF触发器可以在表或视图上定义。 – 在表或视图上,每个UPDATE、INSERT和DELETE 语句最多可以定义一个INSTEAD OF触发器。
(1)展开服务器组,然后展开服务器。这里选中sales数据库。 (2)展开“数据库”文件夹,展开含触发器的表所属的数据库, 然后单击“表”节点。 (3)右击将在其上创建触发器的表,这里选中Salers表,弹出 快捷菜单,选择“所有任务”菜单,然后单击“管理触发器” 命令。出现“触发器属性”对话框,如图10-1所示。 (4)在“名称”中,单击 “新建”。 (5)在“文本”框中输入触发器的文本。用 CTRL+TAB 键来 缩进触发器的文本。
第10章 触发器
第10章 触发器 10章
学习要点: 学习要点:
–创建触发器 –修改触发器 –删除触发器等内容
10.1 概述 10.3 管理触发器
10.2 创建触发器
第10章 触发器
10.1 概述
10.1.1 触发器的概念
–触发器(trigger)是一种特殊的存储过程,它不同于一 般的存储过程。一般的存储过程通过存储过程名称被直 接调用,而触发器主要是通过事件进行触发而被执行。 –触发器是一个功能强大的工具,与表紧密连接,可以看 作是表格定义的一部分。当用户修改(INSERT、 UPDATE或DELETE)指定表或视图中的数据时,该表 中的相应的触发器就会自动执行。 –触发器基于一个表创建,但可以操作多个表。触发器常 用来实现复杂的商业规则。
第10章 触发器
创建触发器时需指定: 创建触发器时需指定: 触发器名称。 在其上定义触发器的表。 触发器将何时激发。 激活触发器的数据修改语句。有效选项为 INSERT、 UPDATE 或 DELETE。多个数据修改语句可激活同一 个触发器。 执行触发操作的编程语句。
第10章 触发器
10.2.1 使用 使用SQL-Server企业管理器创建触发器 企业管理器创建触发器