mysql计划事件即定时任务的实现

目录

  • 前言
  • 设置系统参数
  • 创建计划事件
  • 时间间隔举例

前言

在MySQL中,创建一个定时任务(即“计划事件”)通常涉及使用EVENT对象。有些时候使用mysql定时任务做一些批量处理是非常方便的,比如每天零晨记录头天的库存数据,发货超过7天后自动修改订单状态为收货状态并给相应的积分,每天定时批量修复一些数据靠等直接在数据库层就处理了,非常方便。

设置系统参数

要使用mysql定时任务,首先要开启定时任务,通过设置系统参数event_scheduler为ON:

  1. 查看开启情况
SHOW VARIABLES LIKE 'event_scheduler';

在这里插入图片描述
2. 如何开启

    #临时开启(mysql服务重启后就失效了)set global event_scheduler=1;#设置永久生效,在mysql的配置文件中设置(my.ini)[mysqld]event_scheduler = ON

创建计划事件

  1. 创建事件。使用以下SQL语法创建一个事件
	CREATE EVENT my_eventON SCHEDULE EVERY 1 DAY -- 或者使用你需要的时间间隔STARTS CURRENT_TIMESTAMP -- 或者指定开始时间DO BEGIN-- 这里写上你想要执行的SQL语句END;

例如,以下是一个每天定时清空一个名为my_table的表的计划事件示例

	CREATE EVENT flush_my_tableON SCHEDULE EVERY 1 DAYSTARTS CURRENT_TIMESTAMPDO BEGINTRUNCATE TABLE my_table;END;  
  1. 实例
    每隔30分钟更新一下retry_record表数据
# 每隔30分钟执行
CREATE EVENT IF NOT EXISTS event_update_eas_data
on schedule every 30 minute
DO BEGIN
#处理销售出库单
UPDATE eas_retry_record SET req_url = 'http://airportadmin/orderThird/easSaleIssueBill',retry_is_success = 2 WHERE req_url = 'http://airportfile/jindieeas/jySaleIssueBillImport' AND retry_is_success = 0;
DELETE FROM air_eas_record WHERE push_is_success = 0 AND business_type = 0;
#采购入库单
UPDATE eas_retry_record SET req_url = 'http://airportadmin/putorder/pushPutOrderToEas',retry_is_success = 2 WHERE req_url = 'http://airportfile/jindieeas/purInWarehsBillImport' AND retry_is_success = 0;
DELETE FROM air_eas_record WHERE push_is_success = 0 AND business_type = 8;
#其它入库单
UPDATE eas_retry_record SET req_url = 'http://airportadmin/putorder/pushOtherPutOrderToEas',retry_is_success = 2 WHERE req_url = 'http://airportfile/jindieeas/otherInWarehsBillImport' AND retry_is_success = 0;
DELETE FROM air_eas_record WHERE push_is_success = 0 AND business_type = 9;
#其它出库单
UPDATE eas_retry_record SET req_url = 'http://airportadmin/out/pushOtherOutOrderToEas',retry_is_success = 2 WHERE req_url = 'http://airportfile/jindieeas/otherIssueBillImport' AND retry_is_success = 0;
DELETE FROM air_eas_record WHERE push_is_success = 0 AND business_type = 10;
END;

查看计划事件:

SHOW EVENTS

删除计划事件

DROP EVENT IF EXISTS event_update_eas_data;

时间间隔举例

  1. 每天凌晨一点执行定时任务
on schedule every  1 DAY STARTS DATE_ADD(DATE(CURRENT_DATE+1), interval 1 hour)
#或
on schedule EVERY 1 DAY STARTS date_add(date( ADDDATE(curdate(),1)),interval 1 hour) 
  1. 特定的日期特定的时间点执行定时任务
ON SCHEDULE at '2019-10-10 19:14:10'
  1. 每五分钟执行一次定时任务
ON SCHEDULE EVERY 5 MINUTE STARTS CURDATE()
  1. 每小时执行一次定时任务
ON SCHEDULE EVERY 1 HOUR STARTS CURDATE()

at 特定时间执行,every 重复执行

补充:定时器常用案例
周期性

  1. 从现在开始每隔x天执行一次
DROP EVENT IF EXISTS user_event ;    
CREATE EVENT user_event
ON SCHEDULE EVERY 9 DAY STARTS NOW()
DO  call user_procedure();
  1. 每天凌晨1点执行
DROP EVENT IF EXISTS user_event ;    
CREATE EVENT user_event
on schedule EVERY 1 DAY STARTS date_add(date( ADDDATE(curdate(),1)),interval 1 hour)  
DO  call user_procedure();  
  1. 每个月的一号凌晨1 点执行
DROP EVENT IF EXISTS 定时器名称 ;    
CREATE EVENT user_event
ON schedule every 1 month starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day),interval 1 month),interval 1 hour)
DO  call user_procedure(); 
  1. 每个季度一号的凌晨1点执行
DROP EVENT IF EXISTS user_event ;    
CREATE EVENT user_event
ON schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour)
DO  call user_procedure();  
  1. 每年1月1号凌晨1点执行
DROP EVENT IF EXISTS user_event ;    
CREATE EVENT user_event
ON schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour)
DO  call user_procedure();  

周期一次性

  1. 从现在开始每天执行一次,5天后停止执行
DROP EVENT IF EXISTS user_event ;    
CREATE EVENT user_eventON SCHEDULE EVERY 1 DAYENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO  call user_procedure();
  1. 从现在开始5天后开始执行,一个月后停止执行
DROP EVENT IF EXISTS user_event ;    
CREATE EVENT user_eventON SCHEDULE EVERY 1 DAYSTARTS CURRENT_TIMESTAMP + INTERVAL 5 DAYENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
DO  call user_procedure();

一次性

  1. 在未来指定时间点执行一次
DROP EVENT IF EXISTS user_event ;    
CREATE EVENT user_eventON SCHEDULE AT TIMESTAMP '2021-09-24 18:26:00'ON COMPLETION NOT PRESERVE
DO  call user_procedure();

2.在2021-09-24 18:26:00时候执行user_procedure()存储过程一次之后,该定时器被系统清除从现在开始1小时后执行一次

DROP EVENT IF EXISTS user_event ;    
CREATE EVENT user_eventON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOURON COMPLETION NOT PRESERVE
DO  call user_procedure();

开启和关闭指定定时器

alter event user_event on completion preserve enable; -- 开启定时任务
alter event user_event on completion preserve disable; -- 关闭定时任务

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

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

相关文章

南京大学提出用于大模型生成的动态温度采样法,简单有效!

在自然语言处理(NLP)的领域,大语言模型(LLMs)已经在各种下游语言任务中展现出了卓越的性能。这些任务包括但不限于问答、摘要、机器翻译等。LLMs的强大能力在于其生成的文本质量和多样性。为了控制生成过程&#xff0c…

iptables 与 firewalld 防火墙

iptables iptables 是一款基于命令行的防火墙策略管理工具 四种防火墙策略: ACCEPT(允许流量通过) 流量发送方会看到响应超时的提醒,但是流量发送方无法判断流量是被拒绝,还是接收方主机当前不在线 REJECT&#xff08…

VMware创建Ubuntu虚拟机详细教程

下载ISO映像文件 进入官网下载:Download Ubuntu Desktop | Download | Ubuntu 下面是一些其他的下载路径: 中国官网 https://cn.ubuntu.com/ 中科大源 Index of /ubuntu-releases/ (ustc.edu.cn) 阿里云开源镜像站 ubuntu-releases安装包下载_开源镜像…

C语言——内存函数

引言 在之前的两篇文章中,我们学习了字符函数和字符串函数,C语言中还有一类库函数叫做内存函数 我们接下来去学习一下这类函数 内存函数 内存函数的功能和某些字符函数的功能相似,它们是通过访问地址的方式操作对象,可应用于任…

MySQL生产环境常见故障及解决方案汇总

MySQL生产环境常见故障及解决方案汇总 1. MySQL主从同步异常故障1.1. 情景说明1.2. 排查过程1.3. 数据同步2. MySQL慢查询故障1. MySQL主从同步异常故障 1.1. 情景说明 MySQL主库网卡需要更换IP地址,并将原IP地址配置为MySQL集群的VIP地址,上层应用程序其实不需要更改连接My…

docker版Elasticsearch安装,ik分词器安装,用户名密码配置,kibana安装

1、安装es和ik分词器 创建映射目录并赋予权限: mkdir -p /docker_data/elasticsearch/conf mkdir -p /docker_data/elasticsearch/data mkdir -p /docker_data/elasticsearch/plugins chmod -R 777 /docker_data/elasticsearch编写配置文件: vi /dock…

Spring拓展点之SmartLifecycle如何感知容器启动和关闭

Spring为我们提供了拓展点感知容器的启动与关闭,从而使我们可以在容器启动或者关闭之时进行定制的操作。Spring提供了Lifecycle上层接口,这个接口只有两个方法start和stop两个方法,但是这个接口并不是直接提供给开发者做拓展点,而…

1379. 找出克隆二叉树中的相同节点

说在前面 🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。 题目描述 给你两棵二叉树,原始树 original 和克隆树 cloned,以及一个位于原始…

大模型量化技术-AWQ

大模型量化技术-AWQ 在2023年6月,Ji Lin等人发表了论文AWQ:Activation-aware Weight Quantization for LLM Compression and Acceleration。 这篇论文详细介绍了一种激活感知权重量化算法,可以用于压缩任何基于 Transformer 的语言模型,同时只有微小的性能下降。关于 AWQ 算…

Golang和Java的对决:从设计理念到工具链的全面比较

文章目录 使用率排名Golang和Java设计理念语法和类型系统并发处理资源消耗生态系统和工具链 结语 使用率排名 据最新的2024年3月 Tiobe 编程语言排行榜,目前 Golang 的使用率排名为第8呈上升趋势,Java 的使用率排名为第4呈下降趋势 2024年3月2023年3月…

Python搭建编程环境—安装Python3解释器

✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:零基础学Python 💬个人格言:不断的翻越一…

深入浅出,解析什么是网络切片

一、网络切片诞生背景? 网络切片的需求来自于业务对网络提出的差异化要求,要求一张物理网络上对不同的业务进行差异化的保障。 网络切片是5G核心网最重要的技术之一,也是网络即服务的直接体现,网络切片本身就是产品和服务。 二…