SQL SERVER(41)创建触发器

本文介绍了SQL SERVER中触发器的工作原理和语法结构,特别是DML触发器的创建过程。通过实例展示了如何创建一个用于记录数据变更的日志触发器,并通过INSERT和DELETE操作验证触发器的功能。

目录

1.触发器工作原理

2.触发器语法结构

CREATE TRIGGER (Transact-SQL)

(1)数据操纵语言(DMI)触发器语法。

(2)数据定义语言(DDL)触发器语法结构。

(3)登录触发器语法结构。

3.使用T-SQL创建DML触发器

(1)设计ATriStudent表

(2) 设计ATri_Log日志表

(3)创建触发器

(4)验证触发器


1.触发器工作原理

   触发器的原理涉及两张虚拟的表,这两张虚拟的表分别是INSERTED表和DELETED表。

  • INSERT操作的触发器。当增加数据时,会在数据表和INSERTED表中同时放入数据。利用INSERTED表,可以得到已经插入的数据;可以利用该数据库进行业务对比操作。
  • DELETE操作的触发器。当从数据表中删除数据时,数据首先被放到DELETED表中。该表是一张存放了已经删除的数据的虚拟表。在触发器中可以调用该表中的数据。
  • UPDATE操作的触发器。该类型触发器和其他两种不一样,当对触发器所在的表执行UPDATE语句时,原数据会被转移到DELETED表中,而修改后的数据则被插入到INSERTED表中。最后触发器检查这两个表的数据,并更新数据表。

2.触发器语法结构

CREATE TRIGGER (Transact-SQL)

https://docs.microsoft.com/zh-cn/sql/t-sql/statements/create-trigger-transact-sql?view=sql-server-ver15

(1)数据操纵语言(DMI)触发器语法。

CREATE [ OR ALTER ] TRIGGER [ schema_name . ]trigger_name   
ON { table | view }   
[ WITH <dml_trigger_option> [ ,...n ] ]  
{ FOR | AFTER | INSTEAD OF }   
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }   
[ WITH APPEND ]  
[ NOT FOR REPLICATION ]   
AS { sql_statement  [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [ ; ] > }  
  
<dml_trigger_option> ::=  
    [ ENCRYPTION ]  
    [ EXECUTE AS Clause ]  
  
<method_specifier> ::=  
    assembly_name.class_name.method_name
  • CREATE TRIGGER项:表示创建触发器的关键词。
  • schema_name项:表示触发器所属的架构名称。在SQL Server中触发器作用域是以架构为单位的。
  • trigger项:触发器的名称。
  • ON{ tablelview l项:触发器所作用的表或视图。DML类型触发器不能作用在局部或全局临时表上。
  • FOR I AFTER项:AFTER表示触发器被激发的时机。它在SQL所有的操作都完成,并且约束检查完成后被激发。默认是AFTER。
  • INSTEAD OF项:表示替换类型的触发器。对每个INSERT、UPDATE或DELETE语句只能定义一个INSTEAD OF触发器。
  • 【INSERT】【UPDATE】【DELETE】项:激发触发器的操作,这里可以选取任意的组合。
  • WITH APPEND项:指定添加一个已有类型的触发器。但如果显式声明了AFTER类型触发器,或触发器类型是INSTEAD OF时,则不能使用该项。
  • NOT FOR REPLICATION项:当复制代理修改涉及触发器的表时,不应执行触发器。
  • sql_statement项:可以足确定触发器具体操作的判断条件和操作。
  • EXTERNAL NAME assembly_name.class_name.method_name[;]项:针对CLR触发器,指定程序集与触发器绑定的方法。
  • ENCRYPTION项:表示对创建触发器语句进行模糊处理。
  • EXECUTE AS项:指定用于执行该触发器的安全上下文。

(2)数据定义语言(DDL)触发器语法结构。

CREATE [ OR ALTER ] TRIGGER trigger_name   
ON { ALL S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ngbshzhn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值