触发器

 

触发器:

   它是一种特殊的存储过程
    也具备事务的功能
    它能在多表之间执行特殊的业务规则
触发器是在对表或视图进行插入、更新或删除操作时自动执行的存储过程

触发器通常用于强制业务规则


触发器是一种高级约束,可以定义比用check约束更为复杂的约束
    可执行复杂的SQL语句(if/while/case)
     可引用其他表中的列


触发器定义在特定的表或视图上,与表或视图相关
 自动触发执行
  不能直接调用
是一个事务(可回滚)

触发器类型:

DML触发器:
   after触发器(只能定义在表上  后置触发器)
             insert 触发器:当向表中插入数据时触发,自动执行触发器所定义的SQL语句
             update触发器:当更新表中某列多列时触发,自动执行触发器所定义的SQL语句
             delete触发器:当删除表中记录时触发,自动执行触发器所定义的SQL语句。
    instead OF触发器(可以定义在视图上  替代触发器)

---创建触发器语法-----
    --CREATE TRIGGER trigger_name
    --ON table_name                --要监测的表
    --[WITH ENCRYPTION]
    --[for|instead of]            --触发器类型(视图只能用instead of)
    --[DELETE, INSERT, UPDATE]    --要监测的操作
    --AS
    --    T-SQL语句
    --GO
DDL触发器

临时表:
触发器触发时:
  系统自动在内存中创建deleted表或insterted表
   只读,不允许修改
   触发器执行完成后,自动删除
inserted表:
  临时保存了插入或更新后的记录行
  可以从inserted表中检查插入的数据是否满足业务需求,如果不满足,则向用户报告错误消息,并回滚插入操作
deleted表:
   临时保存了删除或更新前的记录行
   可以从deleted表中检查被删除的数据是否满足业务需求,如果不满足,则向用户报告错误消息,并回滚删除操作


with encryption 表示加密触发器定义的SQL文本
 delete,insert,update指定触发器的类型

update触发器:
先删除表中删除要更新的行
把删除的行的副本插入deleted表中
再向原表中插入新行
把新行的副本插入inserted表
检查deleted和inserted表中的数据,确定是否需要回滚或执行其他操作

列级update触发器除了跟踪数据变化外,还可以检查是否修改了某列的数据

使用update(列)函数检测是否修改了某列

instead of触发器:
有时因为表之间存在主外键关系,我们无法进行想要的删除,这个时候就需要使用替代触发器
先删除外键表里的数据,再删除主键表数据

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值