SQLServer 触发器(DML)

SQLServer 触发器(DML)

  1. 定义:与表事件相关的特殊的存储过程
  2. 调用方式:由事件来触发,当对一个表进行操做时就会激活对应触发器的执行(insert、update、delete)
  3. 做用:用于增强数据的完整性约束和业务规则等
  4. 注意:触发器不能执行 EXCUTE 语句的调用

触发器的分类:

1. insert 写入数据时触发
 2. delete 删除数据时触发 
 3. update(delete+insert) 修改表数据时触发

触发器对应虚表介绍

1. inserted 临时保存即将被插入的数据
 2. deleted 临时保存即将被删除的数据

触发器的工做原理

1. INSERT 触发器
     1). 执行insert插入语句,在表中插入数据行
     2). 触发insert触发器,向inserted虚表中写入新行的备份数据
     3). 执行触发器内的流程,此处可作数据校验,容许插入,拒绝插入等操做
 2. DELETE 触发器
     1). 执行delete删除语句,删除表中数据行
     2). 触发delete触发器,向deleted虚表中写入即将被删除行的备份数据
     3). 执行触发器内的流程,此处可作数据保护,拒绝删除数据
 3. UPDATE 触发器
     1). 执行update更新语句,更新表中数据行
     2). 触发update触发器,向deleted虚表中写入即将被删除的数据,向inserted虚表中写入即将插入的新数据
     3). 执行触发器内的流程,此处可作数据校验,容许或拒绝更新操做

触发器的建立语法

CREATE TRIGGER trigger_name -- 触发器名称
     ON table_name -- 表名
    [WITH ENCRYPTION] -- 加密触发器
    FOR | AFTER | INSTEAD OF [DELETE, INSERT, UPDATE] -- 触发器的类型
 AS 
      TRANSACTION-SQL语句

注:for 、 after 、 instead of 的区别

1. for 和 after 做用相似 都属于数据表后触发器,此触发器一张表能够拥有多个,不支持从虚表中读取text、ntext、image字段的值,该触发器执行时会先执行实际操做(insert、update、delete)的Transaction语句再执行触发器内部定义的Transaction语句如针对同一操做有多个触发器则按照触发器定义顺序前后执行
 2. instead of 属于数据表前触发器,此触发器一张表能够拥有多个,支持从虚表中读取text、ntext、image字段的数据读取,该触发器被触发时只执行触发器内部定义的Transaction语句并不执行实际操做(insert、update、delete)的Transaction语句