SQL-触发器(trigger)的详解以及代码演示
一、触发器的概念
触发器是一种特殊的存储过程,但是触发器不存在输入和输出参数,所以不能被显式的去调用,而是与特定的表相关联,当表中的数据发生变化时,触发器被激活并执行其定义的SQL代码。触发器可以是行级触发器(针对每一行数据变化)或语句级触发器(针对整个SQL语句的变化),行级触发器允许对每一行单独处理,而语句级触发器则在整个操作完成后执行一次。
触发器的功能
- 强化约束:触发器能够实现比CHECK语句更为复杂的约束。它可以很方便地引用其他表的列,进行逻辑上的检查。
- 跟踪变化:触发器可以检测数据库内的操作,从而禁止数据库中未经许可的更新和变化,以确保输入表中的数据的有效性。
- 级联运行:触发器可以检测数据库内的操作,并自动地级联影响整个数据库的不同表的各项内容。
- 调用存储过程:为了响应数据库更新,可以调用一个或多个触发器。
二、触发器种类及分类
触发器主要分为DML触发器和DDL触发器两种。
-
DML触发器:用户通过数据操作语句DML(对表或视图的INSERT、DELETE、UPDATE)编辑数据,则执行DML触发器。DML触发器可以在记录变更前(INSTEAD OF)或记录变更后(AFTER)被触发。
- AFTER触发器:在记录已经被修改完,事务已提交后被触发执行。主要用于记录变更后的处理或检查。(比如在订单系统中,当订单金额超过某个阈值时,需要进行额外的校验,如检查客户的信用额度。就可以在订单表被插入或更新时,检查订单金额是否超过阈值,并进行相应的校验操作。)
- INSTEAD OF触发器:不去执行其定义的操作(INSERT、UPDATE、DELETE),而是交给触发器执行。触发器检查操作是否正确,若正确则执行操作。这类触发器用来取代原本的操作,在记录变更之前被触发。(比如插入一条问卷数据后,执行你的逻辑业务,比如对根据问卷数据中的答案统计出反馈指标插入到反馈表中)
-
DDL触发器:为了响应各种数据定义语言DDL(如CREATE、ALTER、DROP)事件而激发。DDL触发器可以用于在数据库执行管理任务。
三、触发器语法(T-SQL)
1. 创建DML触发器
CREATE TRIGGER 触发器名称
ON { table | view }
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] | [ UPDATE ] | [ DELETE ] }
AS
SQL语句
举例:
AFTER触发器:修改student表数据后,查询修改后的数据。
CREATE TRIGGER trig_student_After
ON student
FOR UPDATE
AS
PRINT 'THE TRIGGER IS AFTER'
SELECT * FROM student
2. 创建DDL触发器
CREATE TRIGGER 触发器名称
ON { ALL SERVER | DATABASE }
{ FOR | AFTER }
{ 事件类型 | 事件组 }
AS
SQL语句
举例:创建数据库后输出提示信息。
CREATE TRIGGER trig_create
ON ALL SERVER
AFTER CREATE_DATABASE
AS
PRINT '创建数据库'
3. 修改触发器
修改DML或DDL触发器时,可以将CREATE关键字修改为ALTER。
ALTER TRIGGER 触发器名称
ON { table | view | ALL SERVER | DATABASE }
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] | [ UPDATE ] | [ DELETE ] | 事件类型 | 事件组 }
AS
SQL语句
4. 删除触发器
DROP TRIGGER 触发器名称
5.使用系统存储过程查看触发器
-
sp_helptrigger
sp_helptrigger存储过程用于返回与指定表或视图关联的触发器的信息。EXEC sp_helptrigger 'your_table_or_view_name'; -
sp_helptext
sp_helptext存储过程用于返回指定数据库对象的定义文本,包括触发器、存储过程、视图等。EXEC sp_helptext 'your_trigger_name';这将返回指定触发器的定义文本,包括触发器的CREATE语句。
-
sys.triggers 和 sys.trigger_events
虽然这些不是存储过程,但它们是系统视图,提供了关于触发器及其事件的详细信息。你可以查询这些视图来获取触发器的各种属性。
SELECT t.name AS TriggerName, t.parent_id AS ParentObjectID, OBJECT_NAME(t.parent_id) AS ParentObjectName, te.type_desc AS TriggerType, te.event_type_desc AS EventType FROM sys.triggers t INNER JOIN sys.trigger_events te ON t.object_id = te.object_id;这个查询将返回触发器的名称、父对象(表或视图)的名称、触发器的类型(如AFTER、INSTEAD OF)以及触发事件(如INSERT、UPDATE、DELETE)。
-
sys.sql_modules
sys.sql_modules视图包含数据库中所有用户定义对象(如触发器、存储过程、函数等)的SQL定义。你可以通过查询这个视图来获取触发器的完整定义。SELECT m.definition AS TriggerDefinition, o.name AS TriggerName FROM sys.sql_modules m INNER JOIN sys.objects o ON m.object_id = o.object_id WHERE o.type = 'TR' -- 'TR' 表示触发器 AND o.name = 'your_trigger_name'; -- 可选,用于指定触发器名称这个查询将返回指定触发器的完整定义文本。如果不指定触发器名称,它将返回所有触发器的定义。
-
INFORMATION_SCHEMA.TRIGGERS
INFORMATION_SCHEMA.TRIGGERS视图提供了关于数据库中触发器的标准信息。然而,它可能不包含触发器的完整定义或某些特定于SQL Server的属性。SELECT TRIGGER_NAME, EVENT_MANIPULATION, EVENT_OBJECT_TABLE, ACTION_STATEMENT_TYPE, ACTION_TIMING FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA = 'your_schema_name'; -- 可选,用于指定架构名称这个查询将返回触发器的名称、触发事件类型、触发对象表名、动作语句类型以及动作时机(如BEFORE或AFTER,但注意SQL Server中通常是AFTER或INSTEAD OF)。
6.禁用触发器
- DDL
/** 禁用 */ DISABLE TARRGER DDL_TRG_NAME ON DATABASE GO/** 启用 */ ENABLE TARRGER DDL_TRG_NAME ON DATABASE GO
- DML
/** 禁用 **/ ALTER TABLE TableNanme DISABLE TRIGGER DML_TRG_NAME GO/** 启用 **/ ALTER TABLE TableNanme ENABLE TRIGGER DML_TRG_NAME
相关文章:
SQL-触发器(trigger)的详解以及代码演示
一、触发器的概念 触发器是一种特殊的存储过程,但是触发器不存在输入和输出参数,所以不能被显式的去调用,而是与特定的表相关联,当表中的数据发生变化时,触发器被激活并执行其定义的SQL代码。触发器可以是行级触发器&…...
【devops】x-ui 实现一键安装 x-ray 打造高速国际冲浪 | xray管理平台
一、部署X-UI篇 1、Github 地址&说明 github地址如下: https://github.com/FranzKafkaYu/x-ui?tabreadme-ov-file 2、一键部署 2.1、更新并安装curl #Ubuntu、Deibian系统 apt update && apt upgrade -y apt install curl -y #CentOS7 系统 yum…...
Linux系统编程——进程标识、进程创建
一、进程标识(pid) 每个进程都有一个非负整数形式的唯一编号,即 PID。PID 在任何时刻都是唯一的,但是可以重用,当进程终止并被回收以后,其 PID 就可以为其它进程所用。进程的 PID 由系统内核根据延迟重用算…...
【超级福利】openMind开源实习来袭,奖励高达万元,解锁你的AI实践新篇章!
亲爱的小伙伴们,是不是梦想着能在真实的项目中大展拳脚,却又苦于找不到合适的舞台?别担心,OpenI启智社区携手openMind Library工具链,为你量身打造了一场开源实习盛宴,保证让你的学习不再无聊,技…...
React JSX 使用条件语句渲染UI的两种写法
只针对函数组件 1. 第一种写法: function App({ id }) {return id1? <h1>hello</h1> : <h1>world</h1>; } 或者: function App({ id }) {return (<h1>{id1 && "hello" || id2 && "wo…...
谷歌-BERT-第四步:模型部署
1 需求 需求1:基于gradio实现大模型的WEB UI交互界面 2 接口 3 示例 import gradio as gr from transformers import *classifier pipeline("text-classification", model"./model", tokenizer"./model")gr.Interface.from_pipel…...
猫咪化身蒲公英,浮毛满屋乱飞,有哪些宠物空气净化器值得购买?
不掉毛的猫咪究竟是谁在养? 当初去朋友家玩,被猫咪捕获芳心,没多久自己也领养了一只。没想到啊,这就意味着要和猫毛纠缠一辈子了。平时白天上班不在家,它就在一边跑动一边掉毛,回到家我都能推断它的行动路…...
端到端的开源OCR模型:GOT-OCR-2.0,支持场景文本、文档、乐谱、图表、数学公式等内容识别!
今天给大家分享一个端到端的开源 OCR 模型,号称 OCR 2.0! 支持场景文本、文档、乐谱、图表、数学公式等内容识别,拿到了 BLEU 0.972 高分。 从给出的演示图来看,一些非常复杂的数学公式都能正确的识别,颇为强大。模型…...
自注意力机制self-attention中QKV矩阵的含义
自注意力机制(Self-Attention)是Transformer模型的核心组件,其中Q、K、V矩阵分别代表查询(Query)、键(Key)、值(Value)。它们的作用和含义可以通过信息匹配过程来理解。在…...
【前端】Bootstrap:栅格系统 (Grid System)
Bootstrap的栅格系统是该框架的核心部分之一,能够让开发者轻松创建响应式网页布局,适配各种屏幕尺寸和设备。栅格系统通过将页面划分为12列的布局结构,开发者可以根据内容的重要性和设计需求灵活控制元素的宽度和排列。 在这篇文章中&#x…...
一文读懂,SSL证书怎么验签安装使用?
SSL证书目前已经有越来越多的企业网站开始使用,安装SSL证书后,原有的http协议将会变成安全性更好的https加密协议,这对保护用户的信息安全,保障企业及用户的利益起着重要作用。 一张SSL证书的获取,需要经历不少环节&a…...
Mysql(八) --- 视图
文章目录 前言1.什么是视图?2.创建视图3. 使用视图4. 修改数据4.1.注意事项 5. 删除视图6.视图的优点 前言 前面我们学习了索引,这次我们来学习视图 1.什么是视图? 视图是一个虚拟的表,它是基于一个或多个基本表或其他视图的查询…...
SQL注入原理、类型、危害与防御
SQL注入的原理概念 SQL注入是一种常见的网络攻击技术,攻击者通过在Web应用程序的输入字段中注入恶意构造的SQL代码,以欺骗后端数据库执行非预期的SQL命令。这种攻击可以导致数据泄露、权限提升、数据篡改甚至系统瘫痪。SQL注入可以分为多种类型…...
第2讲 数据库系统的结构抽象与演变
基本内容 数据库系统的标准结构?数据模型?数据库系统的演变与发展?重难点 一组概念的区分:三级模式两层映像,物理独立性和逻辑独立性一组概念的区分:数据→模式→数据模型几种数据模型的差异:网状/层次模型→关系模型→数据模型数据库系统的标准结构 (1)数据库系统的分…...
Git创建开发分支命名规则
git checkout -b feature/branchname 和 git checkout -b branchname 这两条命令的主要区别在于新分支的命名。 主要区别 分支命名: git checkout -b feature/branchname:新分支的名字是 feature/branchname,表示该分支属于一个特性开发&…...
【纯前端excel导出】vue2纯前端导出excel,使用xlsx插件,修改样式、合并单元格
一、使用第三方插件 1、安装 npm install xlsx-js-style 2、引入 import xlsx from xlsx-js-style xlsx插件是基础的导出,不可以修改样式,直接xlsx-style插件式修改样式的,所以这里直接用二者合体插件即可 二、页面使用 1、数据源 [{"…...
如何在极速浏览器中实现谷歌浏览器的扩展功能
在当今数字化时代,浏览器扩展功能极大地增强了我们的在线体验。尤其是谷歌浏览器,以其丰富的扩展生态而闻名。但是,如果你想在极速浏览器中使用这些谷歌浏览器的扩展功能,该怎么办呢?本文将为你详细解析如何实现这一目…...
Web安全 - 跨站点请求伪造CSRF(Cross Site Request Forgery)
文章目录 OWASP 2023 TOP 10CSRF 导图CSRF的基本概念CSRF的工作原理常见CSRF攻击模式CSRF防御策略补充建议应用场景实战防御策略选择1. CSRF Token(首选)2. SameSite Cookie属性3. 验证Referer和Origin4. 多因素认证 实现方案CSRF Token实现SameSite Coo…...
C++游戏开发完整学习路径
C游戏开发完整学习路径 引言 随着游戏行业的迅速发展,C作为主要的游戏开发语言,因其高效性和灵活性,依然受到广泛欢迎。C不仅在大型游戏开发中被广泛使用,而且在游戏引擎的构建、性能优化和复杂算法的实现中也扮演着关键角色。本…...
vue3之 shallowRef、markRaw
shallowRef 用于创建一个浅层响应式引用,只对顶层属性进行响应式处理。 markRaw 用于标记一个对象,使其完全跳过 Vue 的响应式系统。 这两者都可以用于优化性能,避免不必要的响应式开销,特别是在处理大型对象或第三方库对象时。 …...
GTE-Pro物流应用:运单文本的智能处理
GTE-Pro物流应用:运单文本的智能处理 1. 物流行业的文本处理挑战 每天,物流公司都要处理海量的运单文本和客服对话。这些文本数据里藏着宝贵的信息,但传统的关键词匹配方法往往力不从心。 想象一下这样的场景:一个运单上写着&q…...
运维实战:思科NAT配置全解析与典型场景应用
1. 为什么企业网络离不开NAT技术 想象一下你公司的内网有200台电脑,但ISP只分配了5个公网IP地址——这就是NAT技术大显身手的场景。作为网络工程师,我处理过太多类似案例,最夸张的一个客户用1个公网IP支撑了整个500人办公区的上网需求。 NA…...
AI系统-20AI芯片ISP视觉系统介绍
人有五感:眼睛、耳朵、鼻子、舌头和皮肤。 这些器官中的专门细胞和组织会接收原始刺激,并将其转化为神经系统可以使用的信号。 神经将信号传递到大脑,大脑将其解释为影像(视觉)、声音(听觉)、气…...
OpCore-Simplify高效配置实战指南:智能适配黑苹果硬件的开源工具
OpCore-Simplify高效配置实战指南:智能适配黑苹果硬件的开源工具 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 当你面对繁杂的黑苹果EFI…...
Nunchaku-flux-1-dev极限测试:生成超高清与超大宽幅图像的效果边界
Nunchaku-flux-1-dev极限测试:生成超高清与超大宽幅图像的效果边界 最近在尝试一些新的图像生成模型,发现Nunchaku-flux-1-dev这个版本在社区里讨论度挺高,尤其是关于它处理高分辨率图像的能力。很多人都在问,这个模型到底能生成…...
STM32光敏电阻传感器实战:从硬件接线到代码调试全流程(附避坑指南)
STM32光敏电阻传感器实战:从硬件接线到代码调试全流程(附避坑指南) 在智能家居和环境监测项目中,光照强度检测是一个基础但关键的功能模块。光敏电阻因其成本低廉、使用简单,成为许多开发者的首选传感器。本文将带你从…...
如何通过Mem Reduct实现系统内存智能优化?专业用户的实战指南
如何通过Mem Reduct实现系统内存智能优化?专业用户的实战指南 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct …...
Numpy第十章 统计相关
一.次序统计1.计算最小值 numpy.amin()函数功能:返回数组或沿指定轴的最小值。函数:numpy.amin(a[, axisNone, outNone, keepdimsnp._NoValue,alnp._NoValue, wherenp._NoValue])参数:a:输入数组。axis&…...
互联网产品创新:基于Qwen3-ASR-0.6B的在线教育实时字幕解决方案
互联网产品创新:基于Qwen3-ASR-0.6B的在线教育实时字幕解决方案 1. 引言 想象一下,你正在上一节重要的在线直播课,老师讲得飞快,有些专业术语没听清,或者因为网络波动声音断断续续。又或者,你身处一个嘈杂…...
Qwen3-VL-4B Pro行业案例:法律合同截图关键条款提取与语义摘要生成
Qwen3-VL-4B Pro行业案例:法律合同截图关键条款提取与语义摘要生成 1. 项目核心能力与应用场景 想象一下,你是一名法务人员或商务经理,每天需要审阅大量来自邮件、聊天记录或扫描件的合同截图。这些截图里包含了付款条款、违约责任、保密协…...
