触发器
触发器是一种特殊的存储过程,它被分配给某个特定的表,自动调用。当表数据被插入、更新或删除时执行预定义动作,是确保数据完整性和一致性的基本有效方法。
功能与特点
触发器的作用:
- 禁止无效的修改。
- 级联修改相关表格(对相关表进行级联更新和删除)。
- 执行较为复杂的约束操作。
本质与特点:
- 是特殊的存储过程,以事件作为触发机制,不与用户交互。
- 不接受用户参数,也不返回用户参数,存储在表上。
- 可实现跨越相关表的级联修改。
- 能强制比 CHECK 约束更复杂的数据完整性,可以引用其他表中的列。
按触发事件分类:INSERT、UPDATE、DELETE。
管理触发器
创建(一次只能针对一个动作):
USE 数据库名
GO
CREATE TRIGGER 触发器名 -- 命名建议:t_表_动作
ON 表名
FOR INSERT | DELETE | UPDATE
AS
触发器要执行的操作
GO修改:
USE 数据库名
GO
ALTER TRIGGER 触发器名
ON 表名
FOR DELETE | INSERT | UPDATE
AS
触发器要执行的操作
GO启用、禁用与删除:
DISABLE TRIGGER 触发器名 -- 禁用
ENABLE TRIGGER 触发器名 -- 启用
DROP TRIGGER 触发器名 -- 删除工作原理
触发器执行时会用到两张特殊的逻辑表:
| 逻辑表 | 存放内容 |
|---|---|
inserted | 由 INSERT 或 UPDATE 导致要加入触发表的所有新行。其中的行总是与触发表中的新行相同 |
deleted | 由 DELETE 或 UPDATE 导致要从触发表删除的所有旧行。deleted 表与触发表不会有相同的行 |
工作方式:
- 插入数据:INSERT 触发器触发,新记录同时插入到触发表和
inserted表。 - 删除数据:DELETE 触发器触发,被删除的记录存入
deleted表。 - 修改数据:相当于"先删除旧记录、再插入新记录"——原始记录放入
deleted表,修改后的记录插入inserted表。
最后更新于