MySQL入门教程-触发器

9.触发器

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

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

创建语法解析
 CREATE
     [DEFINER = user]
     TRIGGER trigger_name
     trigger_time trigger_event
     ON 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 insert
 on grade for each row
    begin
          select '插入成功' into @abc;
      end
      
       select @abc;    -- 显示 null
      
      insert into grade(name) values('测试触发器');   --插入数据
      select @abc;    -- 显示  插入成功

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于表格太大了jupyter无法单次处理的问题

记录下自己的心路历程…耗时耗精力 我用的数据库单个表格就很大,一个表格有30多G,jupyter无法处理这么大的表格,会直接把电脑的进程全部结束掉,结束掉要是能运行成功倒也行啊,然鹅…给我报错说处理不了,罢工…

Rust之构建命令行程序(二):读取文件

开发环境 Windows 10Rust 1.74.1 VS Code 1.85.1 项目工程 这次创建了新的工程minigrep. 读取文件 现在,我们将添加读取file_path参数中指定的文件的功能。首先,我们需要一个样本文件来测试它:我们将使用一个包含少量文本的文件,多行包含一…

技能分析:这就是人们写在简历上的内容

您希望您的技能部分听起来像其他人一样吗?另一方面,您是否想遗漏一项顶级技能,因为许多其他简历也列出了它?在脱颖而出和涵盖雇主寻求的所有技能之间找到平衡可能是一个挑战。 优秀的简历技能部分会考虑到每个雇主所寻求的特质。…

08.哲说建造者模式(Builder Pattern)

“The odds that we’re in ‘base reality’ is one in billions.” —— Elon Musk 这段话出自马斯克在2016年的一次演讲,“人类活在真实世界的几率,可能不到十亿分之一”。此言一出,可谓一石激起千层浪。有人嘲讽马斯克是“语不惊人死不休…

GBASE南大通用-GBase 8s数据库日志模式及切换

一、 GBase 8s数据库共有以下 4 种日志模式:无日志模式、缓冲日志模式、无缓冲日志模式、ANSI 模式。详细介绍如下: 1、无日志模式(Non logging): 采用无日志模式时,所有 DML 操作都不会被记录到日志中&…

LVS负载均衡配置虚拟引起微服务注册混乱

线上小程序突然报错,查看网关日志,访问下游微服务A时大量报错: 1)检查微服务是否未注册。登录eureka页面,发现三个节点均正常注册 三个微服务节点地址分别为:13.9.1.91:8080,13.9.1.92:8080和1…

ssm504基于web的经典电影推荐网站的设计与实现论文

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装经典电影推荐网站软件来发挥其高效地信息处理的作用&#x…

ROS【一】(ROS的安装(ubuntu20.04))

ROS的安装 ROS的安装 ROS的安装[TOC](ROS的安装) 前言一、更新镜像源1.进入下载地址2.选择自己的系统类型3.选择自己的系统版本 二、ROS安装1.配置公钥2.添加ros源2.安装ros(注意ubuntu版本和ros版本要对应) 三、配置Ros1.设置环境变量2.安装依赖 四、测试Ros1.先重启2.启动Ros…

PiflowX大数据流水线系统

PiflowX大数据流水线系统。支持分布式计算引擎flink和spark。以所见即所得的方式,实现大数据采集、处理、存储与分析流程化配置、运行与智能监控。 PiflowX基于Piflow(PiFlow: 混合型科学大数据流水线系统,包含丰富的处理器组件,…

Flink(十一)【状态管理】

Flink 状态管理 我们一直称 Flink 为运行在数据流上的有状态计算框架和处理引擎。在之前的章节中也已经多次提到了“状态”(state),不论是简单聚合、窗口聚合,还是处理函数的应用,都会有状态的身影出现。状态就如同事务…

HackTheBox - Medium - Linux - Interface

Interface Interface 是一种中等难度的 Linux 机器,具有“DomPDF”API 端点,该端点通过将“CSS”注入处理后的数据而容易受到远程命令执行的影响。“DomPDF”可以被诱骗在其字体缓存中存储带有“PHP”文件扩展名的恶意字体,然后可以通过从其…

如何获取永久头像地址(非临时)微信小程序

先亮结果: 小程序端: 服务器端: 详细代码: 博文仅针对这一个功能,其它的比如wxml和wxss设置,或者微信昵称的获取就不多介绍了。 找了很久也没有找到真实的图片链接地址的获取方式。。。如果有大佬知道如…

竞赛保研 基于机器视觉的12306验证码识别

文章目录 0 简介1 数据收集2 识别过程3 网络构建4 数据读取5 模型训练6 加入Dropout层7 数据增强8 迁移学习9 结果9 最后 0 简介 🔥 优质竞赛项目系列,今天要分享的是 基于机器视觉的12306验证码识别 该项目较为新颖,适合作为竞赛课题方向…

发布自己的npm包

前提条件:已经申请好了npm账号 npm的注册地址: npm注册地址, 按照上面的描述注册就可以,本文赘述具体的注册过程 1. 登陆npm 如果使用了镜像,需要切换镜像 npm config set registry https://registry.npmjs.org/ 控制台使用命令, 输入用户名和密码以及邮箱,然后按回…

VSCODE 修改Test模式下的的java jvm堆内存大小

在settings.json中添加如下语句 "java.test.config": {"vmArgs": ["-Xmx12G"]},

pycharm找回误删的文件和目录

昨天不知道做了什么鬼操作,可能是运行了几个git命令,将项目里面的几个文件删除了,有点懵。 我知道pycharm可以找回文件的历史修改记录,但是对于删除的文件能否恢复,一直没试过。 找到删除文件的目录,点击右…

【C语言】数据结构——带头双链表实例探究

💗个人主页💗 ⭐个人专栏——数据结构学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读:1. 双链表结构特征2. 实现双向循环链表2.1 定义结构体2.2 创造节点2.3 双向链表初始化2.4 双向链表打印2…

【Unity动画系统】Animator有限状态机参数详解

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

攻防技术1-网络攻击(HCIP)

目录 一、网络攻击方式分类 1、被动攻击: 2、主动攻击: 3、中间人攻击: 二、网络攻击报文类型分类: 1、流量型攻击 2、单包攻击 三、流量型攻击防范技术 1、DNS Request Flood攻击 攻击原理 DNS交互过程 2、TCP类报文…