触发器

触发器:是对表进行插入、更新、或者删除的时候会自动执行的特殊存储过程;通常用于强制业务规则。

触发器是一种高级约束,可以定义比用check约束更为复杂的约束

  •        可执行复杂的SQL语句(if/while/case)
  •         可引用其他表中的列

触发器定义在特定的表或视图上,与表或视图相关且自动触发,不能直接调用,拥有事务的作用(可回滚)。

DML触发器分为after触发器(后置触发器,只能定义在表上)与instead  of触发器(替代触发器,可以定义在表或视图上)

---创建触发器语法-----

    CREATE TRIGGER trigger_name(触发器名称)
    ON table_name(表名)                --要监测的表
    [WITH ENCRYPTION]          --表示加密触发器定义的SQL文本
    [for|instead of]            --触发器类型(视图只能用instead of)
    [DELETE, INSERT, UPDATE]    --要监测的操作
    AS 
        T-SQL语句
    GO

触发器触发时:

  •         系统自动在内存中创建deleted表和inserted表
  •         只能进行读操作,不允许修改
  •          触发器执行完成后,自动删除

after触发器有三类:

  •    insert触发器:当向表中插入数据时,自动执行触发器所定义的SQL语句。  
  1.         临时保存了插入或更新后的记录行
  2.         可以从inserted表中检查插入的数据是否满足业务需求,如果不满足。 则可向用户报告错误信息,并回滚插入操作

 

  •    update触发器:当更新表中某列或多列时发生,自动执行触发器所定义的SQL语句。
  • (对两表进行操作)           

            update触发器的工作原理:

  1.          先从表中删除要更新的行
  2.          把删除的行插入deleted表中
  3.          再向原表中插入新行
  4.          把新行插入inserted表
  5.          检查deleted和inserted表中的数据,确定是否需要回滚 或执行其他操作

 

  •   delete触发器:当删除表中记录时触发,自动执行触发器所定义的SQL语句。
  1.        临时保存了删除或更新前的记录行
  2.        可以从deleted表中检查删除的数据是否满足业务需求,如果不满足。 则可向用户报告错误信息,并回滚删除操作

有时因为表之间的主外键关系,无法进行想要的删除,这个时候就需要使用替代触发器。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值