内容正文:
触发器操作
第九章
01
触发器概述
触发器概述
01
触发器基本知识
触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效,触发器被调用时自动执行INSERT、UPDATE、DELETE 语句和SELECT 语句,实现表间的数据完整性和复杂的业务规则。
触发器的功能:
①强化约束:触发器能够实现比 CHECK语句更为复杂的约束。
②跟踪变化:触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。
触发器概述
01
触发器基本知识
③级联运行:触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的相关内容。例如,某个表上的触发器中包含对另外一个表的数据操作(如插入、更新、删除),而该操作又导致该表上触发器被触发。
④存储过程的调用:为了响应数据库更新,触发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS(数据库管理系统)本身之外进行操作。
触发器概述
01
触发器类型
DDL触发器
DDL触发器是一种特殊的触发器,当服务器或数据库中发生数据定义语言(DDL)事件时将调用DDL触发器。DDL触发器可以用于数据库中执行管理任务,如审核及规范数据库操作。
像常规触发器一样,DDL触发器将激发存储过程以响应事件,但与DML触发器不同的是,它们不会为响应针对表或视图的INSERT、UPDATE或 DELETE语句而激发。相反,它们会为响应多种数据定义语言(DDL)语句而激发,这些语句主要是以CREATE、ALTER和 DROP开头的语句。
触发器概述
01
触发器类型
DML触发器
DML触发器是当数据库服务器中发生数据操作语言事件时要执行的操作。DML事件包括对表或视图发出的插入、修改及删除操作。DML触发器用于在数据被修改时强制执行业务规则,以及扩展SQL Server约束、默认值和规则的完整性检查逻辑。
DML触发器可以查询其他表,还可以包含复杂的T-SQL 语句,将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到错误〈如磁盘空间不足),则整个事务自动回滚。
触发器概述
01
inserted表和deleted表
每个触发器有两个特殊的表:inserted表和 deleted表。这两个表都是逻辑表,并且这两个表是由系统管理的。inserted表和 deleted 表存储在内存中,而不是存储在数据库中,因此不允许用户直接对其进行修改。inserted表和 deleted表在结构上与该触发器作用的表相同。这两个表是动态驻留在内存中的,当触发器工作完成,这两个表也就被删除了。这两个表主要保存因用户操作而被影响到的原数据值或新数据值。这两个表是只读的,即用户不能向这两个表写入内容,但可以在触发器执行过程中引用这两个表中的数据。
触发器概述
01
inserted表和deleted表
deleted 表用于存储DELETE 和 UPDATE语句所影响的行的副本。在执行DELETE或UPDATE语句时,行从触发器表中删除,并存放到deleted表中。deleted表和触发器表通常没有相同的行。
inserted表用于存储INSERT和UPDATE语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到inserted 表和触发器表中。inserted表中的行是触发器表中新行的副本。
触发器概述
01
inserted表和deleted表
(1)INSERT触发器。对一个定义了INSERT类型触发器的表来说,一旦对该表执行了INSERT 操作,那么对于向该表插入的所有行来说,都有一个相应的副本存放到inserted 表中。inserted表就是用来存储向原表中插入的内容的。
(2)DELETE触发器。对一个定义了DELETE类型触发器的表来说,一旦对该表执行了删除操作,则把所有的删除行都存放至删除表中。这样做的目的是:一旦触发器遇到了强迫它中止的语句被执行,删除的那些行可以从deleted表中得以恢复。
触发器概述
01
UPDATE触发器
修改操作包括两部分:先将更新的内容去掉,然后将新值插入。因此,对一个定义了UPDATE类型触发器的表来说,当报告会UPDATE 操作时,在deleted表中存放了原有值,然后在 inserted表中存放新值。
02
使用SSMS管理触发器
使用SSMS管理触发器
02
创建触发器
【任务2-1】为WebShop数据库的Users表中创建一个在添加记录后显示提示信息的触发器tr_notify,并添加一条用户记录( 'trigger','trigger' '普通', trigger')验证触发器的执行。
(1)启动SQL Server Management Studio,在“对象资源管理器”中依次展开【数据库】节点、【WebShop】节点和表节点。
(2)展开【db0.Users】表,右击【触发器】,在弹出的快捷菜单中选择【新建触发器】选项,如图9-5所示。
使用SSMS管理触发器
02
创建触发器
(4)在右边打开的查询窗口中会显示“触发器”模板,输入触发器的文本后执行创建触发器语句。语句成功执行后,则创建好触发器。
触发器tr_notify的脚本如下:
使用SSMS管理触发器
02
创建触发器
(4)使用INSERT语句向Users表中添加一条记录,验证触发器的功能。
该语句执行后,消息框中的显示结果如图9-6所示。
使用SSMS管理触发器
02
禁用、修改和删除触发器
【任务2-2】禁用触发器tr_notify.
(1)启动SQL Server Management Studio,在“对象资源管理器”中依次展开【数据库】节点、【 WebShop】节点、表节点。
(2)右击【tr_notify】,在弹出的快捷菜单中选择【禁用】选项,如图9-7所示。
使用SSMS管理触发器
02
禁用、修改和删除触发器
(3)打开“禁用触发器”对话框,单击【关闭】按钮,如图9-8所示,即可禁用选定的触发器,被禁用的触发器的图标会变成 ,请读者注意分辨。
$$