• 7触发器


    一、触发器介绍

      触发器:是一种实施复杂的、完整性约束的特殊存储过程,它在SQL Server进行某张特定的表修改时由SQL Server自动执行,一般用于加强数据库的某些使用规则。

    触发器有两张存放在内存中由系统维护的逻辑临时特殊表:查处表(inserted)和删除表(deleted),SQL Server为每个触发器都创建。

        inserted表:存放insert或update语句执行所影响的副本。即用于插入或更新表的新行值,在插入或更新表的同时,也将期副本存入insert表中。

        deleted表:存放delete或update语句执行所影响的副本。当执行一条delete语句是,从表中删除的每一行都包含在删除触发器内的delete表中。

       !注:inserted和updated表只能由创建它们的触发器使用。两张表的范围仅限于该触发器

    插入/删除表的功能

    激活触发器的动作

    Inserted

    Deleted

    Insert

    存放要插入的记录

     

    Update

    存放要更新的记录

    存放更新前的旧记录

    Delete

     

    存放要删除的旧记录

      after触发器:在触发事件后才触发执行的触发器,即先执行insert、update、delete等语句后才执行的触发器。此类触发器只适用于数据表,不适用于视图。在不指定的情况下,这是默认的触发器。

      instead of触发器:在触发事件之前执行的触发器,即先执行instead of触发器,再执行insert、update、delete语句,适用于数据表,也适用于视图。

    二、创建触发器前需要注意的事项:

      1.create trigger语句必须是批处理中的第一条语句,且只能用于一张表或视图。

      2.创建触发器的权限默认分配给表的所有者,且不能将权限转让给其他用户。  

      3.触发器只能在当前的数据库中创建,触发器可以引用当前数据库的外部对象。

      4.不能在临时表或系统表上创建触发器,但触发器可以引用临时表。

       创建触发器需要指定的内容

      1.名称

      2.定义触发器表

      3.触发器在什么时候被触发

      4.激活触发器的数据修改语句,有效选项为insert、update或delete。多条数据修改语句可激活同一个触发器。例如:触发器可以由insert或update语句激活。

    三、创建触发器

      语法格式:

    create trigger trigger_name
          on {table_name | view_name}
     [with encryption]
        for{after | instead of} {[delete] [,] [insert] [,] [update]}
      as
    sql_statement(sql语句)

     其中各个参数的含义如下:

      trigger_name:触发起的名称,在数据库中必须唯一。

      table_name | view_name:在其执行上的触发器的表或视图的名称。

      with encryption:加密syscomments表中包含create trigger语句文本的条目。可防止触发器作为SQL Server复制的一部分发布。

      {[delete] [,] [insert] [,] [update]}:指定在表或视图上执行哪些数据修改语句时降级或触发器的关键字。必须至少指定一个选项。在触发器定义中允许使用以人意顺序组合的这些关键字。如果指定多个,需用逗号隔开。

      as:是触发器要执行的操作。

      sql_statement:指定触发器执行的sql语句,是触发器的条件和操作。

    !!注触发器不能建在临时表上,一个触发器只能作用在一张表上。从事务的角度来看,触发器与触发它的语句(如insert语句)作为同一个事务的一部分来执行。

        insert触发器:当向表中插入数据时触发,自动执行触发器中定义的sql语句,只在inserted表中保存所插入的行,而deleted表中无数据。

        delete触发器:当删除表中记录时触发,自动执行触发器中定义的sql语句,只在deleted表中保存被删除的旧行,而inserted表中无数据。

        update触发器:当更新表中某列或多列时触发,自动执行触发器中定义的sql语句。可以将它理解为delete操作和insert操作的结果,所以在inserted表中存放更新后的新行值,而deleted表中存放更新前的旧行值。

    四、instead of触发器的使用

      instead of触发器的使用范围,instead of触发器可以同时在数据表和视图中使用,在以下几种情况下,建议使用inserted of触发器:

        1.数据库里的数据禁止修改

        2.有可能要修改回滚的sql语句

        3.在视图中使用触发器

        4.用自己的方式去修改数据

    五、触发器的优缺点

      优点:

        1.触发器可以强制比用check约束定义的约束更为复杂的约束。与check约束不同,触发器可以引用其它表中的列。

        2、触发器也可以评估数据修改前后的表状态,并根据其差异采取对策

          触发器的主要作用:实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。

      缺点:

        如果对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程度。

  • 相关阅读:
    linux系统分析工具续-SystemTap和火焰图(Flame Graph)
    如何使用strace+pstack利器分析程序性能
    MySQL数据类型-decimal详解
    服务器端数据合法性验证:签名sign和口令token原理
    linux系统下php通过php_oci8扩展连接oracle数据库 Nginx
    redis开启远程访问
    cURL函数库错误码说明之PHP curl_errno函数
    权限控制相关模块
    otool
    路由器
  • 原文地址:https://www.cnblogs.com/chef5-3/p/3415979.html
Copyright © 2020-2023  润新知