SqlServer触发器Tigger使用及示例

2020/03/13 SqlServer

触发器的作用

触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂参照完整性和数据的一致性,它能够对数据库中的相关表进行级联修改,提高比CHECK约束更复杂的的数据完整性,并自定义错误消息。触发器的主要作用主要有以下接个方面:

  1. 强制数据库间的引用完整性
  2. 级联修改数据库中所有相关的表,自动触发其它与之相关的操作
  3. 跟踪变化,撤销或回滚违法操作,防止非法修改数据
  4. 返回自定义的错误消息,约束无法返回信息,而触发器可以
  5. 触发器可以调用更多的存储过程

触发器的分类

SqlServer包括三种常规类型的触发器:DML触发器、DDL触发器和登录触发器。

  1. DML(数据操作语言,Data Manipulation Language)触发器
    • DML触发器是一些附加在特定表或视图上的操作代码,当数据库服务器中发生数据操作语言事件时执行这些操作。SqlServer中的DML触发器有三种:

      1. insert触发器:向表中插入数据时被触发;
      2. delete触发器:从表中删除数据时被触发;
      3. update触发器:修改表中数据时被触发。
    • 当遇到下列情形时,应考虑使用DML触发器:

      1. 通过数据库中的相关表实现级联更改
      2. 防止恶意或者错误的insert、update和delete操作,并强制执行check约束定义的限制更为复杂的其他限制。
      3. 评估数据修改前后表的状态,并根据该差异才去措施。
    • 2020-03-13

  2. DDL(数据定义语言,Data Definition Language)触发器

    • DDL触发器是当服务器或者数据库中发生数据定义语言(主要是以create,drop,alter开头的语句)事件时被激活使用,使用DDL触发器可以防止对数据架构进行的某些更改或记录数据中的更改或事件操作。
  3. 登录触发器

    • 登录触发器将为响应 LOGIN 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。因此,来自触发器内部且通常将到达用户的所有消息(例如错误消息和来自 PRINT 语句的消息)会传送到 SQL Server 错误日志。如果身份验证失败,将不激发登录触发器。

触发器优点:

  1. 强化约束:强制复杂业务的规则和要求,能实现比check语句更为复杂的约束。
  2. 跟踪变化:触发器可以侦测数据库内的操作,从而禁止数据库中未经许可的更新和变化。
  3. 级联运行:侦测数据库内的操作时,可自动地级联影响整个数据库的各项内容。
  4. 嵌套调用:触发器可以调用一个或多个存储过程。触发器最多可以嵌套32层。

触发器缺点:

  1. 可移植性差。
  2. 占用服务器资源,给服务器造成压力。
  3. 执行速度主要取决于数据库服务器的性能与触发器代码的复杂程度。
  4. 嵌套调用一旦出现问题,排错困难,而且数据容易造成不一致,后期维护不方便。

触发器使用建议:

  1. 尽量避免在触发器中执行耗时操作,因为触发器会与SQL语句认为在同一事务中,事务不结束,就无法释放锁。
  2. 避免在触发器中做复杂操作,影响触发器性能的因素比较多(Eg:产品版本,所使用的架构等),要想编写高效的触发器考虑因素比较多,编写高性能触发器还是很难的。
  3. 触发器编写时注意多行触发时的处理。
正在加载今日诗词....

Table of Contents