跳至内容

触发器

触发器是一种特殊的存储过程,它被分配给某个特定的表,自动调用。当表数据被插入、更新或删除时执行预定义动作,是确保数据完整性和一致性的基本有效方法。

功能与特点

触发器的作用:

  • 禁止无效的修改。
  • 级联修改相关表格(对相关表进行级联更新和删除)。
  • 执行较为复杂的约束操作。

本质与特点:

  • 是特殊的存储过程,以事件作为触发机制,不与用户交互。
  • 不接受用户参数,也不返回用户参数,存储在表上。
  • 可实现跨越相关表的级联修改。
  • 能强制比 CHECK 约束更复杂的数据完整性,可以引用其他表中的列。

按触发事件分类:INSERTUPDATEDELETE

管理触发器

创建(一次只能针对一个动作):

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 表。
最后更新于