MySQL定时任务Event详解

文章目录

  • 基本概念
  • 一、Event事件使用权限
  • 二、开启\关闭Event事件
  • 三、Event事件定义格式
  • 四、事件调度使用案例
    • 4.1 准备工作
    • 4.2 创建单次定时执行事件
      • 4.2.1 创建指定时间单次执行事件任务
      • 4.2.2 创建延迟时间单次执行事件任务
      • 4.2.3 创建单次执行事件任务[多SQ执行]
    • 4.3 创建循环定时执行事件
      • 4.3.1 从当前开始每10秒执行一次事件
      • 4.3.2 指定某个时间开始,每隔1分钟执行一次
      • 4.3.3 从当前时间延迟指定时间,每隔5分钟执行一次
      • 4.3.3 每天执行一次,开始时间为明天凌晨1点整


基本概念

MySQL5.1开始,增加了一个十分有用的功能:事件调度器(event scheduler),该功能可以定时单次执行或者多次执行某些任务,比如日志数据的删除、数据统计报告、数据备份等。原来只能通过程序或者Crontab结合脚本做的事情,现在可以使用Event来做。并且MySQL提供的事件调度器可以精确到秒,而操作系统的计划任务比如Cron只能精确到分钟。


一、Event事件使用权限

用户需要要调用某个Event,需要查看用户是否拥有执行Event的权限。Event权限的设置保存在mysql.user表和mysql.db表中的event_priv字段。N表示没有执行权限,Y表示拥有执行Event的权限。如果您对MySQL的权限管理还不是很清楚,您可以参考文章:Mysql用户权限分配详解


二、开启\关闭Event事件

查询Event事件功能是否开启,ON则表示开启,OFF表示未开启。

SELECT @@event_scheduler; -- 方法一
SHOW VARIABLES LIKE '%event_scheduler%'; -- 方法二

在这里插入图片描述
关闭Event事件功能可以使用以下指令:

SET GLOBAL event_scheduler = 1; -- 方法一
SET GLOBAL event_scheduler = on; -- 方法二

开启Event事件功能可以使用以下指令:

SET GLOBAL event_scheduler = 0;
SET GLOBAL event_scheduler = off;

除了可以通过指令关闭和开启Event事件功能之外,还可以通过配置文件my.cnf配置是否开启Event功能,只需要在my.cnf中配置event_scheduler=1或者event_scheduler=0开控制是否开启。不配置则默认为关闭。

常用指定某个事件开启\关闭\查询\删除指令

开启指定事件:ALTER EVENT 具体事件名称 ON COMPLETION PRESERVE ENABLE;
关闭指定事件:ALTER EVENT 具体的事件名称 ON COMPLETION PRESERVE DISABLE;
查看事件:SHOW EVENTS; 或者 SELECT * FROM INFORMATION_SCHEMA.'EVENTS';
删除指定事件:DROP EVENT IF EXISTS 具体事件名称;

三、Event事件定义格式

以下是创建一个事件调度的大体结构格式,其中使用[]括号括起来的内容是可选项,可以填或者不填。

CREATE EVENT [IF NOT EXISTS] 事件名称
ON SCHEDULE 调度策略
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT '备注内容']
DO sql_statement;

参数详细说明:

参数解释
IF NOT EXISTS这个是判断是否存在相同的Event名称,如果不存在才创建
调度策略调度策略是整个调度中最重要的,用于定义这个事件何时触发,是单次调度还是多次调度,具体使用方法将在后续案列中演示
ON COMPLETION PRESERVE是指当本次事件调度执行完成后,会保留该事件。如果您不配置,则默认是ON COMPLETION NOT PRESERVE ,表示执行完成后自动删除该事件。如果是周期性调度的话,需要配置成该类型
ON COMPLETION NOT PRESERVE本次调度执行完成后自动删除该事件
ENABLE \ DISABLE \ DISABLE ON SLAVE用于指定事件状态,ENABLE表示该事件是启动状态,DISABLE 表示未启动,DISABLE ON SLAVE表示对于从数据库则不启动该事件。如果不指定这三个选择中的任意一个,则在一个事件创建之后,它默认是ENABLE状态
SQL_STATEMENT用于指定事件启动时所要执行的代码。可以是任何有效的sql语句、存储过程或者一个计划执行的事件。如果包含多条语句,可以使用BEGIN…END复合结构

调度策略配置语法:
调度策略有两种方式,单次和周期性循环执行,单次执行的关键字AT,后面可以接指定的执行时间字符串,比如 AT TIMESTAMP '2024-3-20 10:14:00' 表示在2024年3月20号早上10点14分整执行一次任务。周期性执行的关键字EVERY,比如EVERY 10 SECOND则表示每隔10秒执行一次任务。时间单位除了SECOND,还有 YEAR、QUARTER、MONTH、DAY、HOUR、MINUTE、WEEK、SECOND、YEAR_MONTH、DAY_HOUR、DAY_MINUTE 、DAY_SECOND、HOUR_MINUTE、HOUR_SECOND等等。


四、事件调度使用案例

4.1 准备工作

在演示案例之前,我们先创建一个message表,用于查看演示效果。

CREATE TABLE message (
id bigint(255) NOT NULL AUTO_INCREMENT,
message varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
message_date datetime DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

在创建好之后,开始编写带一个Event调度任务。


4.2 创建单次定时执行事件

首先先确保您已经开启事件功能!否则事件即使创建也不会执行!!!然后通过指令SHOW EVENTS; 查看当前是否存在任何定时任务。
在这里插入图片描述


4.2.1 创建指定时间单次执行事件任务

以下SQL语句表示创建一个单次执行事件,事件名称叫singleEvent,指定在时间2024-3-21 14:20:00往message表里插入一条数据。我的message表是放在template_backend库下,这里请修改为您message表具体的库名

CREATE EVENT singleEvent
ON SCHEDULE
AT TIMESTAMP '2024-3-21 14:20:00'
DO
INSERT INTO `template_backend`.`message` (`message`, `message_date`) values ('指定时间单次执行任务', now())

执行完以上SQL语句后,可以通过指令SHOW EVENTS;查看当前有效事件。可以查看我们刚刚定义的事件。
DB:表示用作与哪个库,Name是事件名称。
Definer:表示哪个用户权限执行。
TypeONE TIME表示只执行一次。
statusENABLE表示当前事件为可用状态。
在这里插入图片描述
等到时间到2024-3-21 14:20:00之后,再次通过指令
SHOW EVENTS;查看当前有效事件发现事件singleEvent
已经被删除,而message表中也插入了我们预期的数据。
在这里插入图片描述


4.2.2 创建延迟时间单次执行事件任务

以下SQL语句表示创建一个单次延迟执行事件,事件名称叫delaySingleEvent,延迟事件为从当前事件开始往后延迟一分钟执行,往message中插入一条数据。

CREATE EVENT delaySingleEvent
ON SCHEDULE 
AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO 
INSERT INTO  `template_backend`.`message` (`message`, `message_date`) values ('单次延迟一分钟执行事件', now())

执行以上SQL,并通过SHOW EVENTS; 查看事件是否创建成功:
在这里插入图片描述
等待一分钟后,再通过SHOW EVENTS; 指令查看可以发现事件被删除,表message也插入预期的数据:
在这里插入图片描述


4.2.3 创建单次执行事件任务[多SQ执行]

以下SQL语句表示创建一个单次执行事件,只是一次性执行多个SQL语句。事件名称叫specifiedBatchTimeEvent,指定在时间2024-3-22 09:42:00往message表里插入三条数据

CREATE EVENT specifiedBatchTimeEvent
ON SCHEDULE
AT TIMESTAMP '2024-3-22 09:42:00'
ENABLE
DO BEGIN
-- 具体执行的SQL
INSERT INTO `template_backend`.`message` (`message`, `message_date`) values ('批量插入第一条数据', now());
INSERT INTO `template_backend`.`message` (`message`, `message_date`) values ('批量插入第二条数据', now());
INSERT INTO `template_backend`.`message` (`message`, `message_date`) values ('批量插入第三条数据', now());
END;

执行完以上SQL后通过SHOW EVENTS;可以查看事件是否创建成功,可以看到事件已经被创建并且状态为ENABLED,并计划在2024-03-22 09:42:00执行。
在这里插入图片描述
等到2024-03-22 09:42:00后,查看表message可以看到我们预期的插入数据:
在这里插入图片描述


4.3 创建循环定时执行事件

4.3.1 从当前开始每10秒执行一次事件

以下SQL用于创建一个循环事件,每个EVERY 10 SECOND表示该事件每个十秒钟就执行一次,执行的操作是往message表写数据。

CREATE EVENT loopEvent
ON SCHEDULE
EVERY 10 SECOND
ON COMPLETION PRESERVE -- 保存事件
DO
INSERT INTO `template_backend`.`message` (`message`, `message_date`) values ('每十秒执行任务', now())

执行以上SQL后,可以通过SHOW EVENTS;查看事件是否被创建成功。

Type: RECURRING表示该事件是一个循环事件
Interval value:表示调度周期
Interval field: 表示调度周期的单位
Starts:表示事件从哪个时间点开始执行

在这里插入图片描述
通过查看Message表可以看到我们预想的数据,每个十秒插入一次。
在这里插入图片描述
如果您想停止该事件运行,您可以使用指令ALTER EVENT 事件名称 DISABLE。比如停止以上事件可以使用指令:ALTER EVENT loopEvent DISABLE,如果你想删除某个事件,可以使用指令:DROP EVENT IF EXISTS 事件名称;


4.3.2 指定某个时间开始,每隔1分钟执行一次

CREATE EVENT DelayedSchedulingEvent
ON SCHEDULE
EVERY 1 MINUTE STARTS '2024-03-22 10:10:00'
ON COMPLETION PRESERVE
DO INSERT INTO `template_backend`.`message` (`message`, `message_date`) values ('指定时间2024-03-22 10:10:00后,每隔1分钟执行', now());

在这里插入图片描述


4.3.3 从当前时间延迟指定时间,每隔5分钟执行一次

以下SQL用于创建一个循环事件,每个EVERY 1 MINUTE表示该事件每一分钟就执行一次,CURRENT_TIMESTAMP + INTERVAL 5 MINUTE表示从当前时间开始延迟五分钟再执行。

CREATE EVENT DelayedSchedulingEvent
ON SCHEDULE
EVERY 1 MINUTE STARTS CURRENT_TIMESTAMP + INTERVAL 5 MINUTE
ON COMPLETION PRESERVE
DO INSERT INTO `template_backend`.`message` (`message`, `message_date`) values ('延迟5分钟后,每隔1分钟执行', now());

查看message表预期数据:
在这里插入图片描述


4.3.3 每天执行一次,开始时间为明天凌晨1点整

以下SQL用于创建一个循环事件,从第二天的凌晨一天开始,以后每天执行一次,删除message表中日志大于15天的日志。

DROP EVENT IF EXISTS DelayedSchedulingEvent;
CREATE EVENT logClearEvent
ON SCHEDULE
EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)
ON COMPLETION PRESERVE -- 执行完成一次后保存该事件
ENABLE -- DISABLE ON SLAVE --只有在主从中才使用,否则使用该指令,会默认数据是SAVLE数据 禁止SLAVE使用
DO BEGIN
-- 执行的具体SQL
DELETE FROM DELETE FROM `template_backend`.`message`  WHERE message.message_date <NOW() - INTERVAL 15 DAY;
END;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】一文搞懂算法模型之:Transformer

Transformer 1、引言2、Transformer2.1 定义2.2 原理2.3 算法公式2.3.1 自注意力机制2.3.1 多头自注意力机制2.3.1 位置编码 2.4 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 你说transformer是个啥&#xff1f; 小鱼&#xff1a;嗯… 啊… 嗯…就是… 小屌…

uni-app攻略:如何对接驰腾打印机

一.引言 在当前的移动开发生态中&#xff0c;跨平台框架如uni-app因其高效、灵活的特点受到了开发者们的青睐。同时&#xff0c;随着物联网技术的飞速发展&#xff0c;智能打印设备已成为许多业务场景中不可或缺的一环。今天&#xff0c;我们就来探讨如何使用uni-app轻松对接驰…

异步爬虫实践攻略:利用Python Aiohttp框架实现高效数据抓取

在当今信息爆炸的时代&#xff0c;数据是无处不在且变化迅速的。为了从海量数据中获取有用的信息&#xff0c;异步爬虫技术应运而生&#xff0c;成为许多数据挖掘和分析工作的利器。本文将介绍如何利用Python Aiohttp框架实现高效数据抓取&#xff0c;让我们在信息的海洋中快速…

怎么才可以实现自定义异常?

在回答怎么才可以自定义异常这个问题之前&#xff0c;我们先看异常处理对象是怎么实现的&#xff1f;下图为运行时异常需要继承 RuntimeException异常类。 而RuntimeException异常类又继承Exception异常类。 所以&#xff0c;要实现自定义异常类&#xff0c;就需要去继承Runtim…

matlab矩形薄板小挠度弯曲有限元编程 |【Matlab源码+理论文本】|板单元| Kirchoff薄板 | 板壳单元

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

2024年三大主食冻干品牌测评,希喂、SC、K9自费实测综合PK

在现今注重科学养宠的时代背景下&#xff0c;主食冻干已经成为猫咪日常饮食的重要组成部分。主食冻干的高肉含量特性使其易于被猫咪吸收和消化&#xff0c;同时&#xff0c;它还能提供其他猫粮所无法提供的微量物质&#xff0c;满足猫咪的全面营养需求。然而&#xff0c;在众多…

力扣题目训练(23)

2024年2月16日力扣题目训练 2024年2月16日力扣题目训练645. 错误的集合653. 两数之和 IV - 输入二叉搜索树657. 机器人能否返回原点307. 区域和检索 - 数组可修改309. 买卖股票的最佳时机含冷冻期174. 地下城游戏 2024年2月16日力扣题目训练 2024年2月16日第二十三天编程训练&…

【开发环境搭建篇】Redis客户端安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

AST学习入门

AST学习入门 1.AST在线解析网站 https://astexplorer.net/ 1.type: 表示当前节点的类型&#xff0c;我们常用的类型判断方法t.is********(node)**,就是判断当前的节点是否为某个类型。 2**.start**:表示当前节点的开始位置 3.end:当前节点结束 4.loc : 表示当前节点所在的行…

Qt利用反射机制实现函数调用

QT本身就带有强大的反射功能&#xff0c;如果想通过函数名称字符串调用函数&#xff0c;需要在被调用的函数前添加宏&#xff1a;Q_INVOKABLE 父类 QtInvoke.h 头文件&#xff1a; #pragma once #include <QMainWindow> #include "ui_QtInvoke.h" class Qt…

麒麟系统中使用nginx发布项目

1. 安装Nginx sudo apt-get update #进行所有安装操作前都要执行这一句 sudo apt install nginx #出现询问就Yes参考具体 Nginx—在linux的ubuntu系统上的安装使用 2. 修改发布文件 将打包好的dist文件夹中的所有文件覆盖下面这个文件夹中的所有文件 如果出现没有权限替…

UnityShader(十九) AlphaBlend

上代码&#xff1a; Shader "Shader入门/透明度效果/AlphaBlendShader" {Properties{_MainTex ("Texture", 2D) "white" {}_AlphaScale("AlphaScale",Range(0,1))1.0}SubShader{Tags { "RenderType""Transparent&quo…

java数字城管APP系统源码,智慧执法平台,现代信息技术手段的综合管理平台

智慧城管源码&#xff0c;智慧执法&#xff0c;城管智慧综合执法系统源码 智慧城管系统充分利用物联网、云计算、信息融合、网络通讯、数据分析与挖掘等技术&#xff0c;对城市管理进行全方位覆盖。它通过建立城市综合管理平台&#xff0c;将城市的信息和管理资源有机结合起来&…

蓝桥杯day7刷题日记

P8697 [蓝桥杯 2019 国 C] 最长子序列 思路&#xff1a;直接遍历&#xff0c;和子序列相同就记录&#xff0c;不然就下一位 #include <iostream> #include <string> using namespace std; int res;int main() {string s,t;cin>>s>>t;int i0,j0;while…

文生图的基石CLIP模型的发展综述

CLIP的英文全称是Contrastive Language-Image Pre-training&#xff0c;即一种基于对比文本-图像对的预训练方法或者模型。CLIP是一种基于对比学习的多模态模型&#xff0c;CLIP的训练数据是文本-图像对&#xff1a;一张图像和它对应的文本描述&#xff0c;这里希望通过对比学习…

大数据-基础架构设施演进的过程

一、第一阶段-Hadoop 以Hadoop为代表的离线数据处理基础设施 1.1、围绕HDFS和MR&#xff0c;产生了一系列的组件 面向在线KV操作的HBase面向SQL的Hive面向工作流的PIG 1.2、随着对批处理性能要求越来越高&#xff0c;产生了Tez、Spark、Flink等计算引擎。RM模型也逐步进化成…

注册省市要选择你的驾驶证的发证省市

1、首先在手机应用商店&#xff08;任何可以下载软件的&#xff0c;比如360、360&#xff09;搜索流量管理12123&#xff0c;然后下载。 2.然后打开手机上的APP&#xff0c;你会看到下面的页面&#xff0c;然后选择注册&#xff01; 3、在注册页面&#xff0c;根据您的实际情况…

【智能算法】多元宇宙优化算法(MVO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2016年&#xff0c;Mirjalili 等人受到宇宙膨胀理论启发&#xff0c;提出了多元宇宙优化算法(Multi-verse Optimization, MVO)。 2.算法原理 2.1算法思想 MVO基于宇宙膨胀的原理&#xff0c;利用…

3新 IT 技术深刻变革,驱动实体经济进入智能化时代

技术进步和创新是实体经济转型升级的内生 源动力&#xff0c;是企业数字化转型的核心工具&#xff0c;有 助于“降本增效提质”目标的达成。自 20 世 纪 90 年代至今&#xff0c;我国快速完成信息化的大规 模建设&#xff0c;典型数字化技术已发展成熟并充分 融合进企业日…

Linux——du, df命令查看磁盘空间使用情况

一、实现原理&#xff1a; df 命令的全称是Disk Free &#xff0c;显而易见它是统计磁盘中空闲的空间&#xff0c;也即空闲的磁盘块数。它是通过文件系统磁盘块分配图进行计算出的。 du 命令的全称是 Disk Used &#xff0c;统计磁盘有已经使用的空间。它是直接统计各文件各目…