【MySQL数据库】触发器与事件

server/2025/3/31 20:43:59/

MySQL触发器

trigger,在表的插入insert、更新update、删除delete操作发生时自动执行MySQL语句。

学过Qt的都知道信号槽,一旦发出某个信号,那么就会触发关联的信号槽函数。触发器就类似于这个操作。

创建触发器时需要给出一些信息:

        触发器名

        在操作前还是操作后触发(before/after)

        被什么操作触发(insert/update/delete)

        被哪个表的操作触发

在MySQL中,触发器采用类似存储过程的语法进行定义,包括触发条件、触发事件、以及触发后执行的SQL语句等:

sql">create trigger myTrigger 
[after|before] [insert|update|delete]
on table_name
begin-- coding
end;

每当表table_name进行操作时,在这之前(之后)执行器会自动执行myTrigger触发器内部的coding。不同的操作也有一定的差异:

        insert:可通过new访问被插入的行,before insert可以更新new中的值(即允许更改被插入的值)。

        delete:可通过old访问被删除的行,old中的值是只读的,因为他即将被删除/已经被删除,现在只是临时保存到old中。

        update:old可以访问更新前的值,new访问更新后的值。

Tips:总结得出insert没法访问old、delete没法访问new、update全能访问。

其它操作:

sql">-- 查看触发器
show triggers;
-- 查看指定表的触发器
show triggers like 'table_name';--查看触发器的创建语句
show create trigger trigger_name;-- 删除触发器
drop trigger [if exists] 触发器名;

练习:需求-更新部门,对应部门的员工涨100元工资

sql">-- 第一步:创建触发器
create trigger up_sal  after update on dept
beginupdate emp set sal=sal+100 where emp.deptno=old.deptno;
end;-- 第二步:更新部门
update dept
set dname="newDept" where deptno=20;-- 第三步:查询员工信息,发现涨工资了
select * from emp;

作业:需求-给部门表添加员工数量字段,员工表添加员工时对应部门的员工数量自动加1

第一步:dept表添加一个字段:员工数量

sql">alter table dept
add enum int default 0;

第二步:部门表的员工数量更新为正确值

sql">update dept
set enum = (select count(*) from emp where emp.deptno=dept.deptno);

第三步:创建触发器,员工表添加员工时,对应部门员工数量加一

sql">create trigger refresh_enum after insert on emp
beginupdate deptset enum=enum+1 where deptno=new.deptno;
end;

第四步:员工表添加员工测试一下。(自己来吧)

总结:通过使用触发器,可以在数据库层面实现一些复杂的业务逻辑,确保数据的一致性和完整性。然而,过多的触发器可能会影响数据库性能,因此在设计时需谨慎考虑。


MySQL事件

MySQL事件是一种在数据库中创建、调度和执行计划任务的机制。通过使用事件,用户可以定期执行特定的SQL语句或存储过程,从而自动化数据库管理和维护任务。

MySQL事件机制的主要组成部分包括以下内容:

1. 事件调度器:事件调度器是MySQL中用于管理和执行事件的组件。用户可以通过事件调度器创建新的事件、修改已有的事件、启用或禁用事件,并查看事件执行的状态和日志信息。

2. 事件对象:事件对象是用户定义的一个具体任务或操作,可以是一个SQL语句、存储过程或函数。用户可以在创建事件时指定要执行的具体操作,并设置事件的调度时间和频率。

3. 事件时间表:事件时间表是与事件相关的调度时间和频率的设置。用户可以在创建事件时指定事件的执行时间表,包括事件的开始时间、结束时间、执行间隔等。

通过使用MySQL事件机制,用户可以实现诸如定时备份数据库、定期清理过期数据、定时生成报表等自动化任务,从而提高数据库管理的效率和可靠性。

创建语句:

sql">create event event_name
on schedule _schedule_
do
event_body;

 event_name:事件名称;_schedule_:执行计划;event_body:自动执行的语句。

需求:创建一个定时事件,每1小时执行一次任务,任务为:删除用户表中注册时间早于30天前的用户数据

sql">create event event_clean_expired_data
on schedule every 1 hour
do
delete from users where register_time < now() - interval 30 day;

特别注意:在MySQL中,事件必须处于激活态才能执行。默认情况下,新建的事件不会自动启动事件调度器,需要通过命令开始事件调度器:

sql">set global event_scheduler = on;

触发器与事件的区别

触发器和事件给我的第一感觉就很像,但他们确实是MySQL的两种不同的机制。经过查阅相关资料,总结出了以下几点:

相似之处:

        事件和触发器都是MySQL中的一种数据对象

        它们都是作为一组SQL语句,可以定时或触发执行

        它们都可以自动完成一些常规的事务操作。

不同之处:

        语法结构不同:这点看上面的创建语句就可以知道了

        触发方式不同:

                事件按照预定的时间表自动触发执行

                触发器在特定的数据表上进行增删改等操作时触发执行

        作用范围不同:

                事件是针对整个数据库

                触发器通常只作用于单个表(或者服务器全局、schema级)

        功能上的差异:

                事件可以完成归档、日志记录、调度管理、定期的数据清理、备份、统计等任务;

                触发器没有这些高级功能,触发器通常用来进行验证、约束、自动化处理。


感谢大家!


http://www.ppmy.cn/server/178693.html

相关文章

Hadoop相关面试题

以下是150道Hadoop面试题及其详细回答&#xff0c;涵盖了Hadoop的基础知识、HDFS、MapReduce、YARN、HBase、Hive、Sqoop、Flume、ZooKeeper等多个方面&#xff0c;每道题目都尽量详细且简单易懂&#xff1a; Hadoop基础概念类 1. 什么是Hadoop&#xff1f; Hadoop是一个由Apa…

浅谈ai工程落地 - 蒸馏 vs 剪枝 vs 量化

前言 曾在游戏世界挥洒创意&#xff0c;也曾在前端和后端的浪潮间穿梭&#xff0c;如今&#xff0c;而立的我仰望AI的璀璨星空&#xff0c;心潮澎湃&#xff0c;步履不停&#xff01;愿你我皆乘风破浪&#xff0c;逐梦星辰&#xff01; 一句话总结为什么量化目前完胜 ✅ 蒸馏的…

高并发系统中的限流策略:滑动窗口限流与Redis实现

目录 引言 滑动窗口限流的基本概念 什么是滑动窗口限流&#xff1f; 滑动窗口限流的优点 固定窗口限流与滑动窗口限流的对比 固定窗口限流 滑动窗口限流的优势 基于Redis实现滑动窗口限流 Redis数据结构的选择 滑动窗口限流的实现步骤 基础实现代码 解决原子性问题 …

神聖的綫性代數速成例題16. 正定二次型與正定矩陣、綫性空間知識綜合應用

1. **正定二次型與正定矩陣**&#xff1a; 設 \(f X^TAX\) 是 \(n\) 元二次型&#xff0c;若對於任意的非零向量 \(X(x_1,x_2,\cdots,x_n)^T\)&#xff0c;都有 \(f(X)>0\)&#xff0c;則稱 \(f\) 為正定二次型&#xff0c;對應的實對稱矩陣 \(A\) 稱為正定矩陣。 判定方…

解决 uniapp 开发中权限申请同步告知目的问题| 华为应用商店上架审核问题解决

管控背景 根据《工业和信息化部关于进一步提升移动互联网应用服务能力的通知》加强个人信息保护章节要求合理申请使用权限:在调用终端相册、通讯录、位置等权限时&#xff0c;同步告知用户申请该权限的目的。 管控解析 管控范围:该规则适用于以下敏感权限申请行为--电话、通…

Leetcode 3493. Properties Graph

Leetcode 3493. Properties Graph 1. 解题思路2. 代码实现 题目链接&#xff1a;3493. Properties Graph 1. 解题思路 这一题的话是要考虑最终聚合的簇的个数&#xff0c;因此很明显就是一个并查集的典型题目。因此&#xff0c;我们只需要创建一个并查集&#xff0c;然后两两…

【杂谈】-互联网自由表达与AI驱动网络爬虫的双刃剑效应

互联网自由表达与AI驱动网络爬虫的双刃剑效应 文章目录 互联网自由表达与AI驱动网络爬虫的双刃剑效应1. 网络爬虫&#xff1a;数字世界的无形塑造者2. 开放网络的隐形成本&#xff1a;创新与数字诚信的权衡3. 小创作者的困境与抗争4. 守护开放网络&#xff1a;法律与技术的博弈…

基于springbootIT技术交流和分享平台(042)

摘 要 我国科学技术的不断发展&#xff0c;计算机的应用日渐成熟&#xff0c;其强大的功能给人们留下深刻的印象&#xff0c;它已经应用到了人类社会的各个层次的领域&#xff0c;发挥着重要的不可替换的作用。信息管理作为计算机应用的一部分&#xff0c;使用计算机进行管理&a…