触发器(trigger)是 SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对一个表进行操作(insert,delete,update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。触发器可以从 DBA_TRIGGERS,USER_TRIGGERS 数据字典中查到。
[infobox title=” 触发器优点 ”]
1. 触发器是自动的。当对表中的数据做了任何修改之后立即被激活。
2. 触发器可以通过数据库中的相关表进行层迭修改。
3. 触发器可以强制限制。这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其他表中的列。
[/infobox]
[warningbox title=”DML 触发器 ”]
DML 触发器是一些附加在特定表或视图上的操作代码,当数据库服务器中发生数据操作语言事件时执行这些操作。SqlServer 中的 DML 触发器有三种:
- insert 触发器: 向表中插入数据时被触发;
- delete 触发器:从表中删除数据时被触发;
- update 触发器:修改表中数据时被触发。
[/warningbox]
[dangerbox title=” 工作原理 ”]
触发器触发时:
- 系统自动在内存中创建 deleted 表或 inserted 表;
- 只读,不允许修改,触发器执行完成后,自动删除。
inserted 表:
- 临时保存了插入或更新后的记录行;
- 可以从 inserted 表中检查插入的数据是否满足业务需求;
- 如果不满足,则向用户发送报告错误消息,并回滚插入操作。
deleted 表:
- 临时保存了删除或更新前的记录行;
- 可以从 deleted 表中检查被删除的数据是否满足业务需求;
- 如果不满足,则向用户报告错误消息,并回滚插入操作。
[/dangerbox]
| 触发行为 / 临时表 | inserted 表 | deleted 表 |
| 插入 insert | 存放新增的记录 | 无 |
| 修改 update | 修改后的记录 | 修改前的记录 |
| 删除 delete | 无 | 被删除的记录 |
基本语法
CREATE TRIGGER trigger_name -- 触发器名称
ON table_name -- 触发器所在的表名
[WITH ENCRYPTION] -- 表示加密触发器定义的 sql 文本
FOR | AFTER | INSTEAD OF [DELETE, INSERT, UPDATE] -- 触发触发器的操作
AS
T-SQL 语句
GO
原文地址 这里
正文完
发表至: Sql Server
2019-08-16