21. Mysql 事件或定时任务,解放双手,轻松实现自动化

文章目录

    • 概念
    • 常见操作
      • 事件调度器操作
      • 查看事件
      • 创建事件
      • 删除事件
      • 启动与关闭事件
    • 精选示例
      • 构造实时数据
      • 定时统计数据
    • 总结
    • 参考资料

概念

Mysql 事件是一种在特定时间点自动执行的数据库操作,也可以称呼为定时任务,它可以自动执行更新数据、插入数据、删除数据等操作,无需人工干预。

优势:

  • 自动化:可以定期执行重复性的任务,无需手动干预。
  • 灵活性:可以根据需求定制事件,灵活控制任务的执行时间和频率。
  • 提高效率:可以在非高峰时段执行耗时任务,减少对数据库性能的影响。

常见的应用场景有定时备份数据库,清理和统计数据。

常见操作

事件调度器操作

查看事件调度器是否开启:ON 表示已开启。

show variables like '%event_scheduler%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+

开启和关闭事件调度器:

# 开启事件调度器
set global event_scheduler = ON;
# 关闭事件调度器
set global event_scheduler = OFF;

更改配置文件:进入 my.ini 文件修改,重启 Mysql 服务器,永久生效。

# 事件调度器启动状态
event_scheduler = on

查看事件

使用 show 或者 select 语句查看当前数据库中所有的事件。

show events;
select * from information_schema.events;

创建事件

使用 create event 语句创建一个事件,

基本语法:

create[definer = user]event[if not exists]event_nameon schedule schedule_body[on completion [not] preserve][enable | disable | disable on slave][comment 'comment']do event_body;
  • definer:可选,用于定义事件执行时检查权限的用户。
  • if not exists:可选,一般都加上,用于判断要创建的事件是否存在。
  • event_name:定义指定的事件名,是用来唯一标识事件的名称。在同一个数据库中,事件名称必须是唯一的。
  • on schedule schedule_body:schedule_body 用于定义执行的时间和时间间隔。
  • on completion [not] preserve:可选,指定事件是否循环执行,默认为一次执行,即 not preserve。
  • enable | disable | disable on slave:可选,指定事件的一种属性,enable 表示启动,disable 表示关闭或者下线,disable on slave 表示从属性上禁用,默认启动
  • comment ‘comment’:可选,添加事件的注释。
  • do event_body:必选,event_body 用于指定事件启动时所要执行的代码,可以是任何有效的sql 语句、存储过程或者一个计划执行的事件。如果包含多条语句,可以使用 begin … end 复合结构。

schedule_body 语法:

at timestamp [+ interval interval] ...| every interval[starts timestamp [+ interval interval] ...][ends timestamp [+ interval interval] ...]
  • at timestamp:用于一次性活动,指定事件仅在 timestamp 给出的日期和时间执行一次,时间戳必须同时包含日期和时间,或者必须是解析为日期时间值的表达式,如果日期已过,则会出现警告。
# 相当于“三周两天后”。此类子句的每个部分必须以+ interval。
at current_timestamp + interval 3 week + interval 2 day

interval 语法:

interval:quantity {year | quarter | month | day | hour | minute |week | second | year_month | day_hour | day_minute |day_second | hour_minute | hour_second | minute_second}
  • every interval:每隔一段时间执行事件,指定时间区间内每隔多长时间发生一次,interval 其值由一个数值和单位(quantity)组成,如 4 week 表示 4 周,’1:10’ HOUR_MINUTE 表示1小时10分钟。
  • starts timestamp:指定事件的开始时间,timestamp 为时间戳,日期时间值表达式。
  • ends timestamp:指定事件的结束时间,timestamp 为时间戳,日期时间值表达式。

常见时间调度:

# 每30分钟执行一次
on schedule every 30 minute
# 从 2024-01-03 18:00:00 开始,每1小时执行一次
on schedule every 1 hourstarts '2024-01-03 18:00:00'
# 从现在起30分钟后开始,四周后结束,这段期间内每12小时执行一次
on schedule every 12 hour starts current_timestamp + interval 30 minute ends current_timestamp + interval 4 week

删除事件

使用 drop event 语句删除该事件。

drop event [if exists] event_name;

启动与关闭事件

使用 alter event 语句对事件进行修改。

# 启动事件
alter event event_name enable;
# 关闭事件
alter event event_name disable;

精选示例

构造实时数据

需求:每分钟录入关于产品、省份的订单销售数据。

# 表新建
drop table if exists sql_test1.face_sales_data;
create table if not exists sql_test1.face_sales_data
(sales_date date comment '销售日期',order_code varchar(255) comment '订单编码',user_code varchar(255) comment '客户编号',product_name varchar(255) comment '产品名称',sales_province varchar(255) comment '销售省份',sales_number int comment '销量',create_time datetime default current_timestamp comment '创建时间',update_time datetime default current_timestamp on update current_timestamp comment '更新时间'
);
# 创建事件任务,多条语句用 begin ... end; 包住。
drop event if exists face_sales_data_task1;
create event if not exists face_sales_data_task1
on schedule every 1 minute
starts '2024-01-03 21:17:00'
on completion preserve enable
do
beginset @user_code = floor(rand()*900000000 + 100000000);-- 随机生成用户编码,set @order_code = md5(floor(rand()*900000000 + 100000000));-- 根据随机用户编码加密成编码set @product_name = ELT(CEILING(RAND() * 8) ,'iPhone 15','iPhone 15 Pro','iPhone 15 Pro Max','Xiaomi 14','Xiaomi 14 Pro','Huawei Mate 60','Huawei Mate 60 Pro','Huawei Mate 60 Pro+');-- 随机从中选择产品set @sales_province = ELT(CEILING(RAND() * 34) ,'河北省','山西省','辽宁省','吉林省','黑龙江省','江苏省','浙江省','安徽省','福建省','江西省','山东省','河南省','湖北省','湖南省','广东省','海南省','四川省','贵州省','云南省','陕西省','甘肃省','青海省','台湾省','内蒙古自治区','广西壮族自治区','西藏自治区','宁夏回族自治区','新疆维吾尔自治区','北京市','上海市','天津市','重庆市','香港特别行政区','澳门特别行政区');set @sales_number = floor(rand()*1000);-- 随机生成销量select @user_code,@order_code,@product_name,@sales_province,@sales_number;-- 查看生成的数据insert into sql_test1.face_sales_data(sales_date, order_code, user_code, product_name, sales_province, sales_number)values (curdate(),@order_code,@user_code,@product_name,@sales_province,@sales_number);-- 数据录入
end;
select * from sql_test1.face_sales_data;

在这里插入图片描述

通过创建事件后,过一段时间再一次查看表,可以发现每条记录 create_time 相差1,说明任务调度设置成功,这样就可以自动模拟实时销售数据啦。

如果要停止录入,可以执行以下代码关闭事件。

alter event face_sales_data_task1 disable;

定时统计数据

除了能模拟实时数据操作数据表外,也可以执行存储过程统计数据。

drop event if exists get_table_info1_task1;
create event if not exists get_table_info1_task1on schedule every 10 minute starts current_timestamp ends current_timestamp + interval 1 weekon completion preserve enabledo call get_table_info1();
# 下线
alter event get_table_info1_task1 disable;

该存储过程来自上一文章:Mysql 游标的定义和使用,在这里我们直接引用他来创建定时任务。

总结

创建事件或定时任务可以解决很多重复性工作,配合着动态 sql 和存储过程能起到实时更新数据功能,不需要人工干预,提高了工作效率,让我们有更多的时间学习和处理其它问题。

参考资料

  • MySQL官方文档
  • MySQL Tutorial 官方文档
  • Mysql 动态SQL
  • Mysql 存储过程,实现动态数据透视
  • Mysql 游标的定义和使用

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

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

相关文章

x-cmd pkg | doggo - 现代化的 DNS 客户端

目录 简介首次用户快速实验指南功能特点类似工具与竞品进一步探索 简介 doggo 是一个由 Karan Sharma 于 2020 年使用 Go 语言开发的 DNS 客户端。它类似于 dig 命令,但旨在以现代化、简洁和可读的格式输出 DNS 查询结果。 首次用户快速实验指南 使用 x doggo 即可…

1.4 day4 IO进程线程

使用两个子进程进行文件拷贝&#xff0c;父进程进行资源回收 #include <myhead.h> int main(int argc, const char *argv[]) {//创建一个文件描述符并以只读的方式打开int fd-1;if((fdopen("./test.bmp",O_RDONLY))-1){perror("open error");return…

IDAPython详细版(二)

六&#xff1a;操作数 可以使用idc.get_openrand_typed(ea,n)得到操作数的类型。ea是地址&#xff0c;n是索引 这里有8种不同类型的操作数类 0_void 如果一个指令木有任何操作数它将返回0 0_reg 如果一个操作数是一个普通的寄存器将返回此类型。这个值在内部表示为1. o_mem …

java: 写入数据到HBase

一、添加依赖 <dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.6.0</version></dependency><dependency><groupId>org.apache.hbase</groupId><art…

Prometheus-Alertmanage钉钉实现告警

获取钉钉的webhook地址 1、注册企业钉钉 a、注册企业钉钉 浏览器打开钉钉注册页面 填入手机号码&#xff0c;填入获取到的验证码&#xff0c;点注册 填入企业资料并注册 注册成功后&#xff0c;扫描二维码下载钉钉&#xff0c;如下图&#xff1a; b、添加机器人 管理后台 因…

Modbus RTU Learn

一、传输方式 采用主从应答方式进行 帧格式 功能码对应寄存器 演示01功能码 返回数据 0F 转换成二进制 02功能码 0F 转换成二进制 03功能码 读两个寄存器 04功能码 返回数据&#xff0c;读两个寄存器 05功能码 06功能码 10功能码 响应报文

在centos上安装WordPress 及创建配置文件无反应的解决方案

一、安装Apache服务 1.直接在命令行中输入以下命令即可,顺便安装编译组件&#xff1a; yum install -y httpd yum install -y httpd-devel2.启动Apache服务和设置Apache自启&#xff1a; 1 systemctl start httpd 2 systemctl enable httpd 3.添加一个测试页面&#xff0c;…

windows安装kafka以及kafka管理工具推荐

windows安装 1.下载地址 下载地址 下载最新版本的.tgz文件解压 2.修改配置 修改config目录下的zookeeper.properties中的dataDir属性 server.properties文件中的log.dir属性 3.启动zookeeper 进入到bin\windows\下的用cmd输入zookeeper-server-start.bat ..\..\config\zo…

5款实用的Win10软件,提高工作效率

​ 大家好&#xff0c;今天我来给大家推荐5款实用的Win10软件&#xff0c;它们可以帮助你提高工作效率&#xff0c;优化系统性能。 1.视频剪辑——DaVinciResolve ​ DaVinciResolve是一款集视频剪辑、调色、特效和音频后期制作于一体的专业软件。它拥有强大的图像处理技术&a…

Minitab 18安装包下载及安装教程

Minitab 18下载链接&#xff1a;https://docs.qq.com/doc/DUnRSaml6UHRpWFdn 1.选中下载好的安装包&#xff0c;鼠标右键解压到”Minitab 18“文件夹 2.选中”f4-mini181-setup.exe“&#xff0c;鼠标右击选择“以管理员身份运行” 3.点击“确定” 4.点击“下一步” 5.勾选我接…

android 分享文件

1.在AndroidManifest.xml 中配置 FileProvider <providerandroid:name"android.support.v4.content.FileProvider"android:authorities"com.example.caliv.ffyy.fileProvider"android:exported"false"android:grantUriPermissions"true…

宝宝的听力发育进程

小宝宝听力发育进程&#xff1a; 在母亲怀孕中晚期&#xff0c;小宝宝就有了听觉&#xff1a;6个月胎儿的听力已经和成年人相当了。 ◆ 出生0-7天的小宝宝会随声音变化产生不同反应&#xff0c;当在宝宝耳边拍巴掌或摇摇铃&#xff0c;宝宝可能会有惊跳反应&#xff0c;或吓哭…

查询json数组

步骤一&#xff1a;创建表格 首先&#xff0c;我们需要创建一个表格来存储包含JSON对象数组的数据。可以使用以下代码创建一个名为 my_table 的表格&#xff1a; CREATE TABLE my_table (id INT PRIMARY KEY AUTO_INCREMENT,json_data JSON ); 上述代码创建了一个包含两个列的…

SCADE—产品级安全关键系统的MBD开发套件

产品概述 随着新能源三电、智能驾驶等新技术的应用&#xff0c;汽车中衍生出很多安全关键零部件&#xff0c;如BMS、VCU、MCU、ADAS等&#xff0c;相应的软件在汽车中的比重越来越大&#xff0c;并且安全性、可靠性要求也越来越高。ANSYS主要针对安全关键零部件的嵌入式产品级软…

stable diffusion 基础教程-提示词之艺术风格用法

展现夕阳 golden hour, (rim lighting):1.2, warm tones, sun flare, soft shadows, vibrant colors, hazy glow, painterly effect, dreamy atmosphere阴影 chiaroscuro, (high contrast):1.2, dramatic shadows, bold highlights, moody atmosphere, captivating inte…

【六大排序详解】终篇 :冒泡排序 与 快速排序

终篇 :冒泡排序 与 快速排序 1 冒泡排序1.1 冒泡排序原理1.2 排序步骤1.3 代码实现 2 快速排序2.1 快速排序原理2.1.1 Hoare版本代码实现 2.1.2 hole版本代码实现 2.1.3 前后指针法代码实现 2.1.4 注意取中位数局部优化 2.1.5 非递归版本非递归原理代码实现 2.2 特性总结 谢谢阅…

室内效果图没有质感?外国大神这6个实用技巧,带你轻松掌握!

为了创作出高级有质感的效果图&#xff0c;我们需要注意构图、颜色、布光等多种因素&#xff0c;以打造出逼真的渲染效果。不过不要担心&#xff01;今天小编带来了国外知名设计师Arch Viz Artist在油管上分享的6个实用小技巧。看完带你轻松提升室内效果图的表现力&#xff01;…

WPS/PPT插件-大珩助手免费功能更新-特殊字符

扩展特殊格式下特殊字符&#xff0c;增加200多个常用特殊字符&#xff0c;可直接点击插入。 PPT大珩助手 1.7.6 1、提供素材库功能&#xff0c;可实现一键保存素材&#xff0c;支持对选中的形状&#xff0c;支持一键替换素材&#xff0c;保留原素材的尺寸和位置&#xff0c;…

RTT打印时间戳

官方的RTT VIEWER没有打印接收时间戳的功能&#xff0c;经过查找后发现可以有以下三种打印时间戳的方法。 第三方的RTT上位机ExtraPutty自己打印 第三方的RTT上位机 码云上有一个RTT_T2的仓库&#xff0c;基于python qt包写的画面&#xff0c;通过pylink来jlink通信。 优点…

Nginx 负载均衡集群 节点健康检查

前言 正常情况下&#xff0c;nginx 做反向代理负载均衡的话&#xff0c;如果后端节点服务器宕掉的话&#xff0c;nginx 默认是不能把这台服务器踢出 upstream 负载集群的&#xff0c;所以还会有请求转发到后端的这台服务器上面&#xff0c;这样势必造成网站访问故障 注&#x…