MySQL入门教程-触发器

9.触发器

什么是触发器 触发器(trigger):监视某种情况,并进行某种操作,它的执行并不是程序调用,也不是手工启动,而是由事件来触发,例如:对一张表进行操作(插入,更新,删除)时,就会触发执行事先编辑好的若干条SQL语句。

触发器的特点与作用 触发器里面的sql语句是一个事务,具有原子性,要么全部执行,要么全部不执行。

创建语法解析
 CREATE[DEFINER = user]TRIGGER trigger_nametrigger_time trigger_eventON tbl_name FOR EACH ROW[trigger_order]trigger_body​
 trigger_time: { BEFORE | AFTER }

只触发器触发的时间节点,与紧随其后的 trigger_event: { INSERT | UPDATE | DELETE } 触发操作组合,表示在某个操作执行之前,或之后,需要调用触发器的逻辑

 trigger_order: { FOLLOWS | PRECEDES } other_trigger_name

指这个触发器在触发的时候,与其他的触发器的联动效果。如,我们当前创建的 T1 在触发之前,需要先使用另一个已有的触发器 T2,那么这段的声明就是 PRECEDES T2;我们日常操作中基本不会有联动其他触发器的场景,因此这一段直接可以 省略

 trigger_body

触发器的主体部分。如果有多个操作,即一个 sql 无法完成,那么需要使用 begin... end 语句块将多个操作的 sql 包裹起来

注意项

一、触发器只允许在原始表上创建,即不能在临时表和视图上创建

二、触发器只能绑定到当前 DB 的表上。如果尝试在 DB1 中为 DB2.tab_name 创建触发器时,控制台会报错:**[Err] 1435 - Trigger in wrong schema**

三、触发器的主体部分,如果因多个 sql 操作需要使用 **begin... end** 语句块包裹,那么,记得在 **begin** 之后重命名 mysql 的语句分隔符,在 **end** 之前使用自己重命名的结束符作为结尾!!!

因为 mysql 默认都是以分号结尾,如果我们不重命名语句分隔符,那么 begin end 中只有第一条 sql 生效,剩下的都会忽略,从而执行的结果出乎我们的预期

删除触发器

 DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name

[if exists] 是可选的,表示会删除指定的并且存在的触发器;要是不存在,也不会报错

[schema_name.] 触发器所在的 DB 库,如果不指定,就会删除当前库下的这个触发器

查看触发器

我们最习惯的写法就是,第一步先删除目标触发器,第二步就是创建自己需要的触发器,sql 如下:

 drop trigger if exists myTrigger;create trigger myTrigger......

但是,如果我们上来就这么操作,或许会不小心删除已经在运行的同名触发器!!

因此,在触发器创建之前,我们需要确认命名是否被占用,有两个方法:

一、查看当前 DB 中的全部触发器

 show TRIGGERS;

img

二、从系统内置 DB 的 **triggers** 表中查询全部触发器

 SELECT *from information_schema.`TRIGGERS`

img

我们可以通过 where 增加对字段 trigger_name 的条件过滤

一个完整的创建触发器示例:

 ​create trigger  tri_abc after inserton grade for each rowbeginselect '插入成功' into @abc;endselect @abc;    -- 显示 nullinsert into grade(name) values('测试触发器');   --插入数据select @abc;    -- 显示  插入成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/585232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨进程通信 macOS XPC 创建实例

一:简介 XPC 是 macOS 里苹果官方比较推荐和安全的的进程间通信机制。 集成流程简单,但是比较绕。 主要需要集成 XPC Server 这个模块,这个模块最终会被 apple 的根进程 launchd 管理和以独立进程的方法唤起和关闭, 我们主app 进…

JNPF开发平台--初体验

这一两年低代码的概念很流行,我也在网上了解体验了一番。 目前低代码主要分为两种,第一种是与云平台绑定的低代码,在云平台上开发,直接发布到云平台;第二种是低代码框架,低代码项目,这种比较流行…

C# 使用ZXing.Net生成二维码和条码

写在前面 条码生成是一个经常需要处理的功能,本文介绍一个条码处理类库,ZXing用Java实现的多种格式的一维二维条码图像处理库,而ZXing.Net是其.Net版本的实现。 在WinForm下使用该类库需要从NuGet安装两个组件: ZXing.Net ZXing…

当钉钉宜搭有销售单据或客户审批时,自动同步到畅捷通T+Cloud,赋能企业部门之间的业务流程自动化

1 场景描述 随着数字化转型,对于大规模的企业来说,都会选择低代码系统来搭建内部流程来提高公司的管理效率,例如使用钉钉宜搭作为企业的数据库,用来存储客户、供应商、单据等数据。也会使用畅捷通TCloud作为ERP系统解决管理财务、…

Github 2023-12-30 开源项目日报 Top10

根据Github Trendings的统计,今日(2023-12-30统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目4JavaScript项目2C项目1Python项目1Java项目1HTML项目1Dart项目1非开发语言项目1 令人惊叹的 …

【51单片机系列】DS1302时钟模块扩展实验之与EEPROM结合使用只进行一次初始化工作

本文是关于时钟芯片DS1302的扩展实验。 文章目录 一、实验分析二、proteus仿真原理图三、软件设计及结果 本实验实现的目的:利用AT24C02掉电不丢失的功能,存储数据用来辨别DS1302时钟是否已经初始化,如果初始化就不执行DS1302初始化函数。 一…

ansible_角色的使用

本章主要介绍ansible中角色的使用 了解什么是角色独立地写一个角色使用角色系统自带角色地使用 1.了解角色 正常情况下,配置一个服务如 apache时,要做一系列的操作:安装、拷贝、启动服务等。如果要在不同的机器上重复配置此服务,需要重新执…

新品出击 | 软网关BLIoTLink免费发布

新品出击|软网关BLIoTLink免费发布 BLIoTLink是一款免费的物联网协议转换软件,可以部署在任何基于Linux OS的系统(Linux、Debian、Ubuntu、FreeRTOS、RT-Thread)中,使用灵活,可以实现数据的采集以及接入网络平台。 BL…

ssm基于JavaEE的智能实时疫情监管服务平台的设计与实现+jsp论文

摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。本次开发一套智能实时疫情监管服务平台有管…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《面向平稳氢气需求的综合制氢系统鲁棒优化配置方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主的专栏栏目《论文与完整程序》 这个标题涉及到针对平稳氢气需求的综合制氢系统鲁棒优化配置方法。让我们逐步解读这个标题的关键要素: 面向平稳氢气需求: 这部分指…

k8s之kudeadm

kubeadm来快速的搭建一个k8s的集群: 二进制搭建适合大集群,50台以上主机 kubeadm更适合中小企业的业务集群 master:192.168.233.91 docker kubelet lubeadm kubectl flannel node1:192.168.233.92 docker kubelet lubeadm kubectl flannel…

Gin 源码深度解析及实现

介绍 什么是 gin ? 一个轻量级高性能 HTTP Web 框架。 Introduction | Gin Web Framework (gin-gonic.com) Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API,但性能比 Martini 快 40 倍。 为什么使用 gin ? In…

TP-LINK 路由器忘记密码 - 恢复出厂设置

TP-LINK 路由器忘记密码 - 恢复出厂设置 1. 恢复出厂设置2. 创建管理员密码3. 上网设置4. 无线设置5. TP-LINK ID6. 网络状态References 1. 恢复出厂设置 在设备通电的情况下,按住路由器背面的 Reset 按钮直到所有指示灯同时亮起后松开。 2. 创建管理员密码 3. 上网…

uni-appcss语法

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

Zookeeper之手写一个分布式锁

前言 我之前写了一篇快速上手ZK的文章:https://blog.csdn.net/qq_38974073/article/details/135293106 本篇最要是进一步加深学习ZK,算是一次简单的实践,巩固学习成果。 设计一个分布式锁 对锁的基本要求 可重入:允许同一个应…

跟小德学C++之配置文件(形式)

嗨,大家好,我是出生在达纳苏斯的一名德鲁伊,我是要立志成为海贼王,啊不,是立志成为科学家的德鲁伊。最近,我发现我们所处的世界是一个虚拟的世界,并由此开始,我展开了对我们这个世界…

命令模式-举例

开关和电灯之间并不存在直接耦合关系,在命令模式中,发送者与接收者之间引入了新的命令对象,将发送者的请求封装在命令对象中,再通过命令对象来调用接收者的方法。 命令模式的主要缺点如下: 使用命令模式可能会导致某…

Android MVVM 写法

前言 Model:负责数据逻辑 View:负责视图逻辑 ViewModel:负责业务逻辑 持有关系: 1、ViewModel 持有 View 2、ViewModel 持有 Model 3、Model 持有 ViewModel 辅助工具:DataBinding 执行流程:View &g…

视频监控EasyCVR如何通过设置sei接口,实现在webrtc视频流中添加画框和文字?

安防视频监控系统基于视频综合管理平台EasyCVR视频系统,采用了开放式的网络结构,可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,具备权限管…

传奇私服教程,新手小白速速下载!

传奇私服教程,新手小白速速下载! 第二十课-封玩家账号登陆-封玩家机器码登陆.zip 第十九课-快速搭建FTP服务器教程配套工具.zip 第十八课-绿盟GOM1108引擎登陆器配置防劫持列表教... 第十七课-最新访问网站自动弹出加群教程.zip 修复沙城捐献不了或者捐献…