欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL SERVER触发器详解

程序员文章站 2024-03-27 09:31:40
触发器是一种特殊的存储过程,触发器主要是通过事件进行触发而被自动调用执行,而存储过程必须通过存储过程的名称被调用。一、触发器的定义触发器是在对表进行插入、更新或删除操作时自动执行的特殊存储过程。触发器...

触发器是一种特殊的存储过程,触发器主要是通过事件进行触发而被自动调用执行,而存储过程必须通过存储过程的名称被调用。

一、触发器的定义

触发器是在对表进行插入、更新或删除操作时自动执行的特殊存储过程。触发器通常用于强制业务规则,触发器是一种高级约束,可以定义比check约束更为复杂的约束:可以执行复杂的sql语句(if/while/case),可以引用其他表中的列。触发器定义在特定的表上,与表相关,自动触发执行,不能直接调用,是一个事务(可回滚)。

二、触发器分类

sql server中触发器可以分为两类:dml触发器和ddl触发器,dml触发器针对表,ddl触发器会影响多种数据定义语言语句而触发,这些语句有create、alter、drop语句。

dml触发器分为:

1、after触发器(之后触发)

  • a、insert触发器
  • b、update触发器
  • c、delete触发器

2、instead of触发器(之前触发)

after触发器要求只有执行某一操作(insert、update、delete)之后触发器才能被触发,且只能定义在表上。而instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身,其优先级高于触发语句的执行。

触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)

这两张表是逻辑表也是虚表,触发器触发时系统自动在内存中创建这两张表,不会存储在数据库中。这两张表都是只读的,不允许修改。这两张表的结果总是与被触发器应用的表的结构相同。当触发器完成工作后,这两张表就会被删除。inserted表临时保存了插入或更新后的记录行,可以从inserted表中检查插入的数据是否满足业务需求,如果不满足,则向用户报告错误消息,并回滚插入操作。deleted表临时保存了删除或更新前的记录行,可以从deleted表中检查被删除的数据是否满足业务需求,如果不满足,则向用户报告错误消息,并回滚删除操作。update数据的时候是先删除表记录,然后插入一条记录,在inserted和deleted表就都有update后的数据记录了。

  inserted表和deleted表存放的信息:

修改操作

inserted表

deleted表

增加(insert)记录

存放新增的记录

删除(delete)记录

存放被删除的记录

修改(update)记录

存放更新后的记录

存放更新前的记录

三、创建触发器

语法:

with encryption表示加密触发器定义的sql文本

delete, insert, update指定触发器的类型

1、创建insert类型的触发器

插入触发器

插入数据

SQL SERVER触发器详解

查询数据

SQL SERVER触发器详解

2、delete触发器

删除mystudentinfo表中的数据,插入备份表

删除前查询mystudentinfo表数据

SQL SERVER触发器详解

删除id=9的数据

SQL SERVER触发器详解

查询备份表数据

SQL SERVER触发器详解

3、update触发器

把张三更新为"张三测试"

SQL SERVER触发器详解

update更新列级触发器

SQL SERVER触发器详解

更新id列

SQL SERVER触发器详解

4、instead of触发器

instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身的内容,其优先级高于定义的sql语句的执行

语法:

创建instead of触发器

测试1,插入不存在的班级id

SQL SERVER触发器详解

测试2,插入存在的班级id

SQL SERVER触发器详解

ddl触发器

测试删除表

SQL SERVER触发器详解

测试修改表结构

SQL SERVER触发器详解

禁用dml触发器

启用dml触发器

禁用ddl触发器

启用ddl触发器

到此这篇关于sql server触发器详解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。