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

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 游标的定义和使用

相关文章:

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

文章目录 概念常见操作事件调度器操作查看事件创建事件删除事件启动与关闭事件 精选示例构造实时数据定时统计数据 总结参考资料 概念 Mysql 事件是一种在特定时间点自动执行的数据库操作,也可以称呼为定时任务,它可以自动执行更新数据、插入数据、删除…...

Apache Doris 2.0.2 安装步骤 Centos8

Linux 操作系统版本需求 Linux 系统版本当前系统版本CentOS7.1 及以上CentOS8Ubuntu16.04 及以上- 软件需求 软件版本当前版本Java1.81.8.0_391GCC4.8.2 及以上gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) 1、查看操作系统版本 方法 1:使用命令行 打开终端或…...

Java学习苦旅(二十五)——哈希表

本篇博客将详细讲解哈希表。 文章目录 哈希表概念冲突概念避免冲突哈希函数设计常见哈希函数 负载因子调节解决冲突闭散列开散列(哈希桶) 和java类集的关系 结尾 哈希表 概念 顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关…...

性能分析与调优: Linux 实现 CPU剖析与火焰图

目录 一、实验 1.环境 2.CPU 剖析 3.CPU火焰图 一、实验 1.环境 (1)主机 表1-1 主机 主机架构组件IP备注prometheus 监测 系统 prometheus、node_exporter 192.168.204.18grafana监测GUIgrafana192.168.204.19agent 监测 主机 node_exporter192…...

leetcode动态规划问题总结 Python

目录 一、基础理论 二、例题 1. 青蛙跳台阶 2. 解密数字 3. 最长不含重复字符的子字符串 4. 连续子数组的最大和 5. 最长递增子序列 6. 最长回文字符串 7. 机器人路径条数 8. 礼物的最大价值 一、基础理论 动态规划其实是一种空间换时间的基于历史数据的递推算法&…...

strtok函数的介绍

_str指被分解的字符串 delim指分隔符字符串 返回类型是指针 strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符…...

CF1909_C. Heavy Intervals题解

CF1909_C. Heavy Intervals题解 题目传送门(Problem - C - CodeforcesCodeforces. Programming competitions and contests, programming communityhttps://codeforces.com/contest/1909/problem/C)。 题目翻译如下:(图片来源&a…...

【Python机器学习】理论知识:决策树

决策树是广泛用于分类和回归任务的模型,本质上是从一层层if/else问题中进行学习,并得出结论。这些问题类似于“是不是”中可能问到的问题。 决策树的每个结点代表一个问题或一个包含答案的终结点(叶结点)。树的边奖问题的答案与将…...

天软特色因子看板 (2024.01 第2期)

该因子看板跟踪天软特色因子A04001(当日趋势强度),该因子为反映股价走势趋势强弱,用以反映股价走势趋势强弱,abs(值)越接近1,趋势 性越强,符号代表涨跌方向 今日为该因子跟踪第2期,跟踪其在SH000905 (中证5…...

java智慧医院互联网智慧3D导诊系统源码,经由智慧导诊系统多维度计算,准确推荐科室

什么是智慧导诊系统? 简单地说,智慧导诊系统是一种利用人工智能技术,为医生提供帮助的系统。它可以通过分析患者的症状和病史为医生提供疾病诊断和治疗方案的建议。 系统介绍: 医院智慧导诊系统是在医院中使用的引导患者自助就诊挂号&…...

WiFi7: MLD寻址

原文:MLD使用MLD MAC address唯一的标识本MLD。 MLD下的STA(s)使用与之不同的MAC address。 NOTE MLD MAC address可以和其下的某个STA的MAC address相同或者不同于任一MAC Address。 原文:对于individually addressed 帧。以下规则适用: Address 2(TA)设置为STA的MAC Add…...

laravel-admin之 浏览器自动填充密码(如果需要渲染数据库密码的话,首先确认数据库密码是否可以逆向解密)

参考 https://blog.51cto.com/u_10401840/5180106 为什么浏览器端保存的密码一直自动写入到$form->password 解决办法 2、在页面进入的时候,默认表单的type值为text;推荐指数:2颗星 5、设置表单的readonly属性;推荐指数:4颗…...

jquery图形验证码

效果展示 js图形随机验证码&#xff08;表单验证&#xff09; html代码片段 <form class"formwrap"><div class"item"><input type"text" id"code_input" value"" placeholder"请输入验证码"/>…...

dp专题10 目标和

本题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路&#xff1a; 根据这道题&#xff0c;可以通过暴力的方法进行取 号或者 - 号 两个操作&#xff0c;通过当刚好得到 target 的时候 答案 1&#xff0c;但是通过长度是 20 &#xff0c;操…...

详解 docker 镜像制作的两种方式

概要 制作Docker镜像一般有2种方法&#xff1a; 通过Dockerfile&#xff0c;完成镜像的创建使用仓库中已有的镜像&#xff0c;安装自己使用的软件环境后完成新镜像创建 docker 常用命令 docker build: 用于构建 Docker 镜像。该命令可以从 Dockerfile 构建镜像&#xff0c;…...

selenium元素单击不稳定解决方法

selenium自动化测试过程中&#xff0c;经常会发现某一元素单击&#xff0c;很不稳定&#xff0c;有时候执行了点击没有反映。 以下总结两种解决方法&#xff1a;都是通过js注入的方式去点击。 1.F12查一看&#xff0c;要点击的按钮&#xff0c;或连接&#xff0c;有没有οncl…...

vue3中vite使用sass

引用&#xff1a;https://blog.csdn.net/weiliang_66/article/details/132469597 npm install sass -d配置vite.config.js: css: {preprocessorOptions: {scss: {additionalData:import "/assets/styles/main.scss";}}}创建对应的 main.sass...

centos 8.0 安装sysbench 1.0.17

序号步骤说明执行命令执行结果备注1 下载并解压sysbench-1.0.17.zip sysbench-1.0.17.zip2安装依赖文件 yum install automake libtool -y yum install /usr/include/libpq-fe.h 3安装sysbench cd sysbench-1.0.17 ./autogen.sh ./configure \ --prefix/sysbench \ --with-pgsq…...

LabVIEW开发分布式光纤油气管道泄漏检测及预警系统

LabVIEW开发分布式光纤油气管道泄漏检测及预警系统 随着油气工业的发展&#xff0c;管道泄漏成为一个严峻的安全问题。本文介绍了一种基于LabVIEW的分布式光纤油气管道泄漏检测及预警系统的设计思路和组成结构。系统包括硬件和软件两部分&#xff0c;其中硬件部分详细阐述了分…...

Go后端开发 -- Go Modules

Go后端开发 – Go Modules 文章目录 Go后端开发 -- Go Modules一、什么是Go Modules?二、GOPATH的工作模式1.GOPATH模式2.GOPATH模式的弊端 三、Go Modules模式创建项目1.go mod命令2.go mod环境变量3.使用Go Modules初始化项目4.修改模块的版本依赖关系 四、Go Modules下impo…...

基于det_keypoint_unite的ROS功能包(jetson部署)

文章目录 硬件软件FastDeploy编译CMakeLists.txt头文件源代码硬件 Jetson AGX Orin 64GB 软件 gcc/g++ >= 5.4(推荐8.2)cmake >= 3.10.0jetpack >= 4.6.1opencv=4.2.0FastDeploy编译 git clone https://github.com/PaddlePaddle/FastDeploy.git cd FastDeploy mkdi…...

TS 36.211 V12.0.0-下行(8)-调制和上变频

本文的内容主要涉及TS 36.211&#xff0c;版本是C00&#xff0c;也就是V12.0.0。...

基于SSM酒店后台管理系统【源码】【最详细运行文档】

基于SSM酒店后台管理系统【源码】【最详细运行文档】 功能简介技术描述运行准备♝项目运行访问项目 演示图✅源码获取 &#x1f4a1; 「分享」 大家好&#xff0c;最近几年在酒店后台管理系统非常流行&#xff0c;无论是上课的项目或者是一些毕设都会以酒店后台管理系统举例说…...

利用Python实现每日新闻早报推送

本文将介绍如何使用Python编写简单的逻辑&#xff0c;通过调用API接口实现每日新闻推送功能。 步骤&#xff1a; 导入所需的库&#xff1a; 在代码的开头&#xff0c;我们需要导入所需的库。通常&#xff0c;我们会使用requests库来发送HTTP请求&#xff0c;以获取新闻数据。 …...

图像分割-Grabcut法

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 本文的C#版本请访问&#xff1a;图像分割-Grabcut法(C#)-CSDN博客 GrabCut是一种基于图像分割的技术&#xff0c;它可以用于将图像…...

性能测试浅谈

早期的性能测试更关注后端服务的处理能力。 一个用户去访问一个页面的请求过程&#xff0c;如上图。 数据传输时间 当你从浏览器输入网址&#xff0c;敲下回车&#xff0c;开始... 真实的用户场景请不要忽视数据传输时间&#xff0c;想想你给远方的朋友写信&#xff0c;信件需…...

媒体运营常用的ChatGPT通用提示词模板

媒体平台选择&#xff1a;如何选择合适的媒体平台&#xff0c;确保内容的有效传播&#xff1f; 内容策划与创作&#xff1a;如何策划和创作高质量的内容&#xff0c;吸引和留住目标受众&#xff1f; 内容发布与推广&#xff1a;如何有效地发布和推广内容&#xff0c;提高内容…...

Java学习苦旅(二十一)——泛型

本篇博客将详细讲解Java中的泛型。 文章目录 泛型的定义语法示例 泛型类语法示例类型边界语法示例 类型擦除通配符语法示例上界语法示例 下界语法示例 裸类型泛型方法语法示例 泛型的限制结尾 泛型的定义 语法 class 泛型类名称<类型形参列表> {//这里可以使用类型参数…...

具备闭环思维的测试才更充分

测试工作的终极目标是为了保障产品的质量。如果用同一个维度衡量测试人员的业务水平&#xff0c;简单粗暴一些&#xff1a;那就是针对同一款产品&#xff0c;哪个测试人员发现的bug多&#xff0c;哪个测试人员的测试理论与实践水平相对来说还是高一些。 前两天组长在群里分析了…...

flask web学习之模板(一)

文章目录 一、模板基本用法1.1 定界符1.2 模板语法1.3 渲染模板 二、模板辅助工具2.1 上下文2.2 全局对象2.3 过滤器2.4 测试器2.5 模板环境对象 在动态web程序中&#xff0c;视图函数返回的HTML数据往往需要根据相应的变量&#xff08;比如查询参数&#xff09;动态生成。当HT…...

郑州网站建设讯息/北京网站优化步

导读&#xff1a;使用 nccm 让你的终端连接 SSH 会话更快、更稳、更轻松。                       本文字数&#xff1a;2699&#xff0c;阅读时长大约&#xff1a;3分钟https://linux.cn/article-12632-1.html作者&#xff1a;Kenneth Aaron译者&#xff1a;Meng …...

做门户网站开发的技术/交换链接营销案例

有做.net的程序员和朋友曾经问过我&#xff0c;关于vs2005和vs2008、vs2008和vs2010、vs2005和vs2010项目互转的问 题&#xff0c;那么关于这个问题有两层含义&#xff1a;一种是通过高版本的编译器打开低版本的项目&#xff0c;进行升级&#xff1b;一种是通过修改Soultion文件…...

成年男女做羞羞视频网站/宁波seo推广推荐

什么是Zookeeper Zookeeper是一个分布式开源框架&#xff0c;分布式协调工具&#xff0c;是java编写的开源框架&#xff0c;提供了协调分布式应用的基本服务&#xff0c;它向外部应用暴露一组通用服务——分布式同步&#xff08;Distributed Synchronization&#xff09;、命名…...

网站建设阝搜金手指下拉罒/百度竞价排名

视频教程详细信息 名称 Best of Fluent 2012&#xff1a;可维护的JavaScript 描述 注意&#xff1a;要查看高清版本&#xff0c;请访问&#xff1a;http://youtu.be/nZihjH6_Qnsrnrn Nicholas Zakas在其Fluent Conference 2012演讲中的视频维护性JavaScript解决了作为大型团…...

网站运营心得/百度如何推广广告

今天重点说一下jmeter如何利用自身的代理服务器录制脚本1&#xff1a;工作台下创建代理服务器2&#xff1a;配置代理&#xff0c;选择录制控制器3&#xff1a;在Requests FIltering下添加排除模式&#xff0c;配置正则表达式。否则会录制出很多凌乱的请求。.*\.XXX.*|.*\.XXX.*…...

南宁网站制作/太原seo建站

介绍权限管理&#xff0c;修改的基本思路 权限管理6大步 菜单可见和不可见&#xff1a; 1、不同角色看不同菜单的&#xff0c;表设计思路&#xff1b; 2、不同角色看不同菜单的&#xff0c;表修改思路&#xff1b; 资源可访问和不可访问&#xff1a; 3、shiro&#xff0c;登录…...