当前位置: 首页 > news >正文

MySQL 9从入门到性能优化-创建触发器

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客

《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com)

MySQL9数据库技术_夏天又到了的博客-CSDN博客

触发器是一个特殊的存储过程,它与普通的存储过程不同的是:存储过程的执行要使用CALL语句来调用,而触发器的执行不需要使用CALL语句来调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MySQL自动调用。例如,当对表fruits进行操作(INSERT、DELETE或UPDATE)时,就会激活它触发器。

触发器不仅可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于满足复杂的业务规则或要求。例如,可以根据客户当前的账户状态,控制是否允许插入新订单。本节将介绍如何创建触发器。

10.1.1  创建只有一个执行语句的触发器

创建只有一个执行语句的触发器的语法如下:

CREATE TRIGGER trigger_name trigger_time trigger_eventON tbl_name FOR EACH ROW trigger_stmt

其中,trigger_name表示触发器名称,用户自行指定;trigger_time表示触发时机,可以指定为before或after;trigger_event表示触发事件,包括INSERT、UPDATE和DELETE;tbl_name表示建立触发器的表名,即在哪张表上建立触发器;trigger_stmt是触发器的执行语句。

【例10.1】创建一个单执行语句的触发器,SQL语句如下:

mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account  FOR EACH ROW SET @sum = @sum + NEW.amount;mysql>SET @sum =0;mysql> INSERT INTO account VALUES(1,1.00), (2,2.00);mysql> SELECT @sum;
+------+
| @sum |
+------+
| 3.00 |
+------+

对于上述语句,首先创建一张表account,表中有两个字段,分别为acct_num(定义为INT类型)和amount(定义成浮点类型);其次,创建一个名为ins_sum的触发器,触发的条件是向数据表account插入数据之前,对新插入的amount字段值进行求和计算。

10.1.2  创建有多个执行语句的触发器

创建有多个执行语句的触发器的语法如下:

CREATE TRIGGER trigger_name trigger_time trigger_eventON tbl_name FOR EACH ROWBEGIN语句执行列表END

其中,trigger_name表示触发器的名称,用户自行指定;trigger_time表示触发时机,可以指定为before或after;trigger_event表示触发事件,包括INSERT、UPDATE和DELETE;tbl_name表示建立触发器的表名,即在哪张表上建立触发器;触发器程序可以使用BEGIN和END作为开始和结束,中间包含多条语句。

【例10.2】创建一个包含多个执行语句的触发器,SQL语句如下:

CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b4 INT DEFAULT 0
);DELIMITER //CREATE TRIGGER testref BEFORE INSERT ON test1FOR EACH ROW 
BEGININSERT INTO test2 SET a2 = NEW.a1;DELETE FROM test3 WHERE a3 = NEW.a1;  UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;END
//DELIMITER ;INSERT INTO test3 (a3) VALUES (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL);INSERT INTO test4 (a4) VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0), (0);

上面的代码创建了一个名为“testref”的触发器。这个触发器的触发条件是在向表test1插入数据前执行触发器的语句,具体执行的代码如下:

mysql> INSERT INTO test1 VALUES (1), (3), (1), (7), (1), (8), (4), (4);

4张表中的数据如下:

mysql> SELECT * FROM test1;
+------+
| a1   |
+------+
|    1 |
|    3 |
|    1 |
|    7 |
|    1 |
|    8 |
|    4 |
|    4 |
+------+
8 rows in set (0.00 sec)mysql> SELECT * FROM test2;
+------+
| a2   |
+------+
|    1 |
|    3 |
|    1 |
|    7 |
|    1 |
|    8 |
|    4 |
|    4 |
+------+
8 rows in set (0.00 sec)mysql> SELECT * FROM test3;
+----+
| a3 |
+----+
|  2 |
|  5 |
|  6 |
|  9 |
| 10 |
+----+
5 rows in set (0.00 sec)mysql> SELECT * FROM test4;
+----+------+
| a4 | b4   |
+----+------+
|  1 |    3 |
|  2 |    0 |
|  3 |    1 |
|  4 |    2 |
|  5 |    0 |
|  6 |    0 |
|  7 |    1 |
|  8 |    1 |
|  9 |    0 |
| 10 |    0 |
+----+------+
10 rows in set (0.00 sec)

执行结果显示,在向表test1插入记录的时候,表test2、表test3、表test4都发生了变化。从这个例子中可以看到,表test1中的INSERT操作触发了触发器,向表test2中插入了表test1中的值,删除了表test3中相同的内容,同时更新了表test4中的b4,即与插入的值相同的个数。

相关文章:

MySQL 9从入门到性能优化-创建触发器

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

UE5 第三人称学习之动画 control rig

这个东西和建模软件里有的是一个东西,然后IK就是你动脚,他帮你算出小腿大腿该怎么动,FK就是你自己动了大腿,摆小腿,然后再摆脚 就是给每一根骨骼搞一个控制器,给他一个容易选中和操作更明显的图形作为控制…...

C++之--初见模板初阶

一、泛型编程 为了实现一个通用的函数,在此之前,我们学过函数重载,使用函数重载虽然可以实现,但是有一下几个不好的地方: 1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时&a…...

Nature|用于无线监测颅内信号的植入式柔性超声波传感器(柔性传感/健康监测/植入式电子/水凝胶)

华中科技大学臧剑锋(Jianfeng Zang)、华中科技大学同济医学院附属协和医院姜晓兵(Xiaobing Jiang)和新加坡南洋理工大学陈晓东(Xiaodong Chen)团队,在《Nature》上发布了一篇题为“Injectable ultrasonic sensor for wireless monitoring of intracranial signals”的论…...

【和AI的《趣味》聊天】01 AI:你找茬是吧(

我: 以下哪个选项是中文? A.Chinese B.英文 AI: 我: 这不对吧,我说的是那个选项的语言是中文 AI: 非常抱歉,我之前的回答有误。您问的是哪个选项的语言是中文,那么答案应该是…...

“发放父作业单”是“过数”用例里面的内容吗

刘京城 2020-4-14 23:01 。。。。(注:这是一个人的昵称,不是省略号) 首先,执行者是同一个,那么思考焦点要关注“过数”用例是不是“发放父作业单”用例的一个步骤,和行为操作的频率无关,而是和责任有关&am…...

Linux补基础之:网络配置

目录 一、检查主机与虚拟机是否能正常通信 二、网络的连接模式 桥接模式 流程 特点 NAT模式 流程 特点 仅主机 流程 特点 三、修改静态IP 四、可能遇到的问题 防火墙 DNS 五、主机名更改 六、登录服务器 实际的大数据管理中,会有由很多服务器构成的…...

【flink】之kafka到kafka

一、概述 本文档旨在介绍如何使用Apache Flink从Kafka接收数据流,并将处理后的数据写入到另一个Kafka Topic中。Apache Flink是一个开源的流处理框架,能够处理无界和有界数据流,并且支持高吞吐量和低延迟的数据处理。通过Flink与Kafka的集成…...

微信小程序时间弹窗——年月日时分

需求 1、默认当前时间2、选择时间弹窗限制最大值、最小值3、每次弹起更新最大值为当前时间&#xff0c;默认值为上次选中时间4、 minDate: new Date(2023, 10, 1).getTime(),也可以传入时间字符串new Date(2023-10-1 12:22).getTime() html <view class"flex bb ptb…...

杂货 | 每日资讯 | 2024.11.1

注意&#xff1a;以下内容皆为AI总结 2024年11月1日&#xff0c;人工智能&#xff08;AI&#xff09;领域发生了多项重要事件&#xff0c;标志着技术发展的新阶段。本文将详细探讨以下三大事件&#xff1a; OpenAI为ChatGPT新增搜索功能IEEE发布《2025年及以后的技术影响》报…...

Genmoai-smol:专为单 GPU 优化的开源 AI 视频生成模型,低显存生成高质量视频

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…...

RHCE8

一、防火墙 防火墙&#xff1a;防火墙是位于内部网和外部网之间的屏障&#xff0c;它按照系统管理员预先定义好的规则来控制数据包的进出。防火墙又可以分为硬件防火墙与软件防火墙。 硬件防火墙是由厂商设计好的主机硬件&#xff0c;这台硬件防火墙的操作系统主要以提供数据…...

长短期记忆网络(LSTM)如何在连续的时间步骤中处理信息

长短期记忆网络&#xff08;LSTM&#xff09;如何在连续的时间步骤中处理信息 长短期记忆网络&#xff08;LSTM&#xff09;是一种高级的循环神经网络&#xff08;RNN&#xff09;&#xff0c;设计用来解决传统RNN在处理长时间序列数据时遇到的梯度消失或爆炸问题。LSTM通过其…...

MySQL基础(三)

一. 插入内容insert tips&#xff1a; &#xff08;一&#xff09;SQL中 表示 字符串&#xff0c;可以用 也可以用 " C/C、Java中&#xff0c; 表示字符&#xff0c;" 表示字符串SQL/Python/JS&#xff0c;没有字符类型&#xff0c;只有字符串&#xff0c; 和 &qu…...

浏览器八股

面试系列文章 万字总结我在寒冬里的面试准备经历前端铜九铁十面试必备八股文——【HTML&CSS】前端铜九铁十面试必备八股文——【JavaScript】前端铜九铁十面试必备八股文——【Vue】前端铜九铁十面试必备八股文——【浏览器】前端铜九铁十面试必备八股文——【网络相关】前…...

华为机试HJ18 识别有效的IP地址和掩码并进行分类统计

首先看一下题 描述 请解析IP地址和对应的掩码&#xff0c;进行分类识别。要求按照A/B/C/D/E类地址归类&#xff0c;不合法的地址和掩码单独归类。 所有的IP地址划分为 A,B,C,D,E五类 A类地址从1.0.0.0到126.255.255.255; B类地址从128.0.0.0到191.255.255.255; C类地址从192.0.…...

计算机网络——TCP拥塞控制原理

吞吐量 端口有16位...

ubuntu-开机黑屏问题快速解决方法

开机黑屏一般是由于显卡驱动出现问题导致。 快速解决方法&#xff1a; 通过ubuntu高级选项->recovery模式->resume->按esc即可进入recovery模式&#xff0c;进去后重装显卡驱动&#xff0c;重启即可解决。附加问题&#xff1a;ubuntu的默认显示管理器是gdm3,如果重…...

DNS服务器

正反解析 [rootlocalhost ~]# systemctl stop firewalld #关防火墙 [rootlocalhost ~]# setenforce 0 #关闭selinux [rootlocalhost ~]# mount /dev/sr0 /mnt #挂载 mount: /mnt: WARNING: source write-protected, mounted read-only. [rootlocalhost ~]# yum …...

【C++笔记】string类使用详解

前言 各位读者朋友们大家好&#xff01;上期我们讲完了C的模板初阶&#xff0c;这一期我们开启STL的学习。STL是C的数据结构和算法库&#xff0c;是我们学习C的很重要的一部分内容&#xff0c;在以后的工作中也很重要。现在我们开始讲解。 目录 前言一. 为什么学习string类1.…...

视频均衡驱动器,最大支持1920x1080@60(1080P60)的信号

GMM613是一款无需配置、上电即用的视频均衡驱动器&#xff0c;功能对标德州仪器&#xff08;TI&#xff09;的LMH0344和Semtech的GS2994。该芯片作为均衡器使用&#xff0c;能够补偿信号在长距离同轴线缆传输过程中的损耗&#xff0c;恢复信号质量&#xff0c;从而延长SDI信号的…...

独立开发者如何利用Taotoken的多模型能力构建低成本AI应用原型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何利用Taotoken的多模型能力构建低成本AI应用原型 对于资源有限的独立开发者或初创团队而言&#xff0c;在应用开发初…...

构建智能家居自动化桥梁:基于Webhook与事件驱动的跨平台集成实战

1. 项目概述与核心价值最近在折腾智能家居和自动化流程&#xff0c;发现很多朋友都卡在了一个看似简单却非常关键的环节上&#xff1a;如何让不同的智能设备或软件服务之间“说上话”。比如&#xff0c;你希望家里的智能音箱在收到指令后&#xff0c;不仅能控制灯光&#xff0c…...

数学科研效率提升300%,NotebookLM辅助建模全流程解析,含独家提示词矩阵与误差校验协议

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM数学研究辅助的范式革命 传统数学研究长期依赖纸笔推演、孤立文献查阅与手工公式验证&#xff0c;而NotebookLM通过其独特的“语义锚点双文档协同推理”机制&#xff0c;重构了从问题建模到定…...

2026最新!录音软件哪个最好用?4款亲测免费实用神器,避坑省钱真香!

做内容的要整理访谈&#xff0c;职场要记会议纪要&#xff0c;学生要转课堂录音&#xff0c;做调研的要整理访谈录音——不同人群需求不一样&#xff0c;但核心诉求都是&#xff1a;准、快、不瞎收钱。我花了一周亲测4款热门录音转写工具&#xff0c;直接给结论&#xff1a;听脑…...

【LeetCode刷题日记】112.递归中的「减法思维」:一题带你打通二叉树路径求和的任督二脉

&#x1f525;个人主页&#xff1a;北极的代码&#xff08;欢迎来访&#xff09; &#x1f3ac;作者简介&#xff1a;java后端学习者 ❄️个人专栏&#xff1a;苍穹外卖日记&#xff0c;SSM框架深入&#xff0c;JavaWeb ✨命运的结局尽可永在&#xff0c;不屈的挑战却不可须臾或…...

深入浅出:STM32 USB BOS描述符与WCID配置详解(以WinUSB免驱为例)

STM32 USB BOS描述符与WCID配置实战解析&#xff1a;从协议到代码实现 在嵌入式开发领域&#xff0c;USB设备与主机系统的无缝对接一直是开发者关注的重点。传统USB设备在Windows平台上通常需要安装专用驱动程序&#xff0c;这不仅增加了用户使用门槛&#xff0c;也提高了开发维…...

告别卡顿!手把手教你配置UE5+Cesium子关卡,打造流畅的大型开放世界

告别卡顿&#xff01;UE5Cesium子关卡实战&#xff1a;打造流畅的大型开放世界 当你在UE5中构建一个横跨多个城市的开放世界时&#xff0c;是否遇到过这样的场景&#xff1a;镜头拉到高空俯瞰时帧率骤降&#xff0c;或者角色在城市间快速移动时出现明显的加载卡顿&#xff1f;这…...

为ClaudeCode配置Taotoken作为稳定可靠的API供应商

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为ClaudeCode配置Taotoken作为稳定可靠的API供应商 Claude Code 是一款广受开发者欢迎的编程助手工具&#xff0c;它依赖于后端的大…...

基于英创ARM9嵌入式主板实现双CAN接口的硬件设计与Linux驱动配置实战

1. 项目概述&#xff1a;为什么需要双CAN接口&#xff1f; 在工业自动化、汽车电子、新能源设备这些领域里&#xff0c;CAN总线就像设备之间的“神经系统”&#xff0c;负责传递各种控制指令和状态数据。一个CAN接口是基础&#xff0c;但当你需要同时连接两个独立的CAN网络&…...