首页 > 其他分享 >十二、触发器

十二、触发器

时间:2023-11-14 10:13:43浏览次数:40  
标签:触发 触发器 数据库 DML 十二 操作 数据

一、什么是触发器?

触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表 事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当 对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整 性约束和业务规则等。

二、触发器分类 

2.1. DML触发器

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

2.1.1 Insert触发器

向表中插入数据时被触发。 Insert 触发器: 在向目标表中插入数据后,会触发该表的Insert 触发器,系统自动在内存中创建inserted表; 如 果不满足判断数据会进行回滚,插入的数据操作会失败。

2.1.2 delete触发器

从表中删除数据时被触发。 Delete 触发器: 在向目标表中删除数据后,会触发该表的Delete 触发器,系统自动在内存中创建deleted表, deleted表存放的是删除的数据。

2.1.3 update触发器

修改表中数据时被触发。 Update 触发器: 在向目标表中更新数据后,会触发该表的Update 触发器,系统自动在内存中创建deleted表和 inserted表,deleted表存放的是更新前的数据,inserted表存放的是更新的数据。   当遇到下列情形时,应考虑使用DML触发器: 1. 通过数据库中的相关表实现级联更改 2. 防止恶意或者错误的insert、update和delete操作,并强制执行check约束定义的限制更为复杂 3. 评估数据修改前后表的状态,并根据该差异才去措施。

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

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

2.3 登录触发器

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

三、触发器优缺点:

1、强化约束:强制符合业务的规则和要求,能实现比check语句更为复杂的约束。 2、跟踪变化:触发器可以侦测数据库内的操作,从而禁止数据库中未经许可的更新和变化。 3、级联运行:侦测数据库内的操作时,可自动地级联影响整个数据库的各项内容。 4、嵌套调用:触发器可以调用一个或多个存储过程。触发器最多可以嵌套32层。 5、可移植性差。 6、占用服务器资源,给服务器造成压力。 7、执行速度主要取决于数据库服务器的性能与触发器代码的复杂程度。 8、嵌套调用一旦出现问题,排错困难,而且数据容易造成不一致,后期维护不方便。

四、使用建议

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

标签:触发,触发器,数据库,DML,十二,操作,数据
From: https://www.cnblogs.com/duyao/p/17830941.html

相关文章

  • 代码随想训练营第三十二天(Python)| 122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃
    122.买卖股票的最佳时机II1、贪心classSolution:defmaxProfit(self,prices:List[int])->int:res=0foriinrange(1,len(prices)):res+=max(prices[i]-prices[i-1],0)returnres2、动态规划classSolution:d......
  • 前端歌谣的刷题之路-第八十二题-新数组
     前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛客网微信公众号前端小歌谣题目......
  • 10个PPT冷门技巧,你都知道几个?@弎十二
    01 取色器外部取色相信对于用过PPT的小伙伴来说,取色器是一个比较熟悉的功能。在颜色填充面板中通过这个功能,常规上是可以吸取画布内所有的颜色的,比如这样:但是,痛点来了:当需要吸取外部的颜色,以往就需要截图插入到PPT当中才能进行取色,一旦需要的颜色多起来,操作就会变得很繁......
  • 实验十二
    在计算机主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调用其他硬件设备和软件的启动方法,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(HardDisk)的读取(read())、操作系统(OS)的载入(load()),如果某一过程发生错误则计算机启动失败。实验要求:1.提交类图;2.......
  • 《Unix/Linux系统编程》教材学习笔记第十二章
    chapter12块设备I/O缓冲区读写普通文件的算法依赖于两个关键操作,即get_block和put_block,这两个操作将磁盘块读写到内存缓冲区中。由于与内存访问相比,磁盘I/O速度较慢,所以不希望在每次执行读写文件操作时都执行磁盘I/O。因此,大多数文件系统使用I/O缓冲来减少进出存储设备的物理I/......
  • 学习笔记10(第十二章)
    一、知识点归纳(一)知识点内容教材学习内容总结(二)苏格拉底挑战1.知识点一2.知识点二二、问题与解决(一)问题(二)解决三、实践过程与代码(一)实践(二)代码......
  • 十二、类加载器和反射
    一、类的加载类的加载当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。加载:就是指将class文件读入内存,并为之创建一个Class对象。任何类被使用时系统都会建立一个Class对象。连接:验证是否有正确的内部结构,并和......
  • Android并发编程高级面试题汇总(含详细解析 十二)
    Android并发编程高级面试题汇总最全最细面试题讲解持续更新中......
  • JavaSE(十二)-Object类
    文章目录1.Object类2.Object类常用方法2.1.equals方法3.==和equals的区别3.1.==3.2.equals()方法的使用4.toString方法5.hashCode()方法1.Object类在JDK中提供一个Object类,它是类层次结构的根类,每个类都直接或间接基础自该类,所有对象(包括数组)都实现了这个类的方法。如果......
  • MySQL的存储函数、MySQL的触发器、MySQL的索引
    MySQL的存储函数概述MySQL存储函数(自定义函数),函数一般用于计算和返回一个值,可以将经常需要使用的计算或功能写成一个函数。存储函数和存储过程一样,都是在数据库中定义一些SQL语句的集合。存储函数与存储过程的区别:存储函数有且只有一个返回值,而存储过程可以有多个返回值,也可以没......