当前位置:网站首页 > 技术博客 > 正文

sql触发器的触发方式



触发器:即当发生某一事件时,如果满足给定条件,则执行相应的动作。

在这里插入图片描述

触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。

触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。

此外触发器是逻辑电路的基本单元电路,具有记忆功能,可用于二进制数据储存,记忆信息等。

------来源于百度百科

可在写入数据表前,强制检验或转换数据。
触发器发生错误时,异动的结果会被撤销。
部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。
可依照特定的情况,替换异动的指令 (INSTEAD OF)。

触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制用比CHECK约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。

触发器功能强大,轻松可靠地实现许多复杂的功能,为什么又要慎用呢。触发器本身没有过错,但由于我们的滥用会造成数据库及应用程序的维护困难。在数据库操作中,我们可以通过关系、触发器、存储过程、应用程序等来实现数据操作…… 同时规则、约束、缺省值也是保证数据完整性的重要保障。如果我们对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程度。

触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约束。
SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。
这两个表由系统来维护,它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行 完成后,与该触发器相关的这两个表也被删除。
  Deleted表存放由于执行Delete或Update语句而要从表中删除的所有行。
  Inserted表存放由于执行Insert或Update语句而要向表中插入的所有行。

SQL Server2000提供了两种触发器:Instead of 和After 触发器。这两种触发器的差别在于他们被激活的不同:
  Instead of触发器用于替代引起触发器执行的T-SQL语句。除表之外,Instead of 触发器也可以用于视图,用来扩展视图可以支持的更新操作。
  After触发器在一个Insert,Update或Deleted语句之后执行,进行约束检查等动作都在After触发器被激活之前发生。After触发器只能用于表。
  一个表或视图的每一个修改动作(insert,update和delete)都可以有一个instead of 触发器,一个表的每个修改动作都可以有多个After触发器。

 

删除触发器:

 
 

– 查看单个触发器

 
 

注:(不同数据库支持不同的类型触发器,有些还支持before类型触发器,像SQL server 就不支持before触发器

2)after 触发器(也叫“FOR”触发器)则会在触发 insert、update 或是delete 动作之后执行。触发事件分为三类:UPDATE、DELETE和INSERT。

另外,定义触发器时,系统都都会自动生成两张表INSERTED和DELETED,我们是可以直接用的,如下:
DML 触发器有两个特殊的表:插入表(instered)和删除表(deleted),这两张表是逻辑表。这两个表是建立在数据库服务器的内存中,而且两张表的都是只读的。这两张表的结构和触发器所在的数据表的结构是一样的。当触发器完成工作后,这两张表就会被删除。Inserted 表的数据是插入或是修改后的数据,而 deleted 表的数据是更新前的或是已删除的数据。

在这里插入图片描述

也可以用百度网盘了:链接:https://pan.baidu.com/s/1gtlSrhQSBAd1rblrmU3JiA 提取码:q79b

 
 
 
 
 
 
 

在触发器语句中用两个特殊的表一个是deleted表和inserted。它们是通过触发器操作自动创建驻留在内存中的临时表。

描述:

Deleted表用于存储 DELETE和 UPDATE语句所影响的行的副本。在执行DELETE或 UPDATE语句时,行从触发器表中删除,并传输到 deleted表中。Deleted表和触发器表通常没有相同的行。

Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。

综上可以总结一下:

触发器的操作deleted表和inserted表的数据变化插入操作(Insert)Inserted表有数据,Deleted表无数据删除操作(Delete)Inserted表无数据,Deleted表有数据更新操作(Update)Inserted表有数据(新数据),Deleted表有数据(旧数据)

实践:

举个例子如果现在有两张表,一个是课程表T_course,还有一个学生表T_student。课程表中的课程和学生是一对多的关系。如下图中的关系。

在这里插入图片描述

从图中可以看出课程表T_course和学生表T_student有主外键的关系,也就是说当我删除课程表中的某个课程时,必须先要删除上这门课的所有学生。这就可以利用触发器来实现:其中就要通过deleted表来查询要删除的课程号。


                            

  • 上一篇: linux cpu压力测试工具
  • 下一篇: js 节流防抖
  • 版权声明


    相关文章:

  • linux cpu压力测试工具2025-03-24 16:01:02
  • 微信定位精灵官方版2025-03-24 16:01:02
  • fft的理解2025-03-24 16:01:02
  • 三态门有何作用2025-03-24 16:01:02
  • 各地dns查询2025-03-24 16:01:02
  • js 节流防抖2025-03-24 16:01:02
  • 归并排序 菜鸟教程2025-03-24 16:01:02
  • i2c总线协议2025-03-24 16:01:02
  • linux 添加组成员2025-03-24 16:01:02
  • linuxphp环境搭建2025-03-24 16:01:02