mysql事件定时_MySQL事件(定时任务)

what's the MySQL 事件

MySQL5.1 版本开始引进 event 概念,MySQL 中的事件(event:时间触发器)是用于执行定时或周期性的任务,类似 Linux 中的 crontab,事件可以精确到秒。通过单独或调用存储过程使用,在某一特定的时间点,触发相关的 SQL 语句或存储过程。事件由一个特定的线程来管理的,也就是所谓的事件调度器,但是事件不能直接调用。

总的来说,事件,就是定时任务的管理器。

查看事件调度器是否开启

事件由一个特定的线程来管理。启用事件调度器后,拥有 SUPER 权限的账户执行 SHOW PROCESSLIST 就可以看到这个线程了。

SHOW VARIABLES LIKE 'event_scheduler';SELECT @@event_scheduler;

SHOW PROCESSLIST;

开启或关闭事件管理器

--开启事件调度器

SET GLOBAL event_scheduler = ON;--关闭事件调度器

SET GLOBAL event_scheduler = OFF;--查看事件调度器状态

SHOW VARIABLES LIKE 'event_scheduler';

注意:如果想要始终开启事件,那么在使用SET GLOBAL开启事件后,还需要在配置文件(Windows系统my.ini、Linux系统my.cnf)中添加 event_scheduler=on 并重启数据库服务。因为如果没有添加,MySQL重启事件后又会回到原来的状态。

创建存储过程

MySQL 事件一般配合 MySQL 存储过程使用,顶一万 MySQL 存储过程后由 MySQL 事件进行触发调用。

事件的主要操作

事件的主要操作有:创建、查询、修改、删除、开启和关闭。

创建事件

语法结构

CREATE

[DEFINER={user | CURRENT_USER}]EVENT[IF NOT EXISTS]event_nameONSCHEDULE schedule[ON COMPLETION [NOT]PRESERVE][ENABLE | DISABLE | DISABLE ON SLAVE]

[COMMENT 'comment']DO event_body;

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

DEFINER --可选,用于定义事件执行时检查权限的用户

IF NOT EXISTS --可选,用于判断要创建的事件是否存在

EVENT event_name --必选,用于指定事件名,event_name的最大长度为64个字符,如果为指定event_name,则默认为当前的MySQL用户名(不区分大小写)

ON SCHEDULE schedule --必选,用于定义执行的时间和时间间隔

ON COMPLETION [NOT] PRESERVE --可选,用于定义事件是否循环执行,即是一次执行还是永久执行,默认为一次执行,即 NOT PRESERVE

ENABLE | DISABLE | DISABLE ON SLAVE --可选,用于指定事件的一种属性。

--其中,关键字ENABLE表示该事件是活动的,也就是调度器检查事件是否必选调用;

--关键字DISABLE表示该事件是关闭的,也就是事件的声明存储到目录中,但是调度器不会检查它是否应该调用;

--关键字DISABLE ON SLAVE表示事件在从机中是关闭的。如果不指定这三个选择中的任意一个,则在一个事件创建之后,它立即变为活动的。

COMMENT 'comment' --可选,用于定义事件的注释

DO event_body --必选,用于指定事件启动时所要执行的代码。可以是任何有效的SQL语句、存储过程或者一个计划执行的事件。如果包含多条语句,可以使用BEGIN...END复合结构

参数说明

示例

create event second_event --创建名为 second_event 的事件,注意此处没有括号

on schedule every 1 second --创建周期定时的规则,每秒钟执行一次

on completion preserve disable --创建后并不开始生效

do call test_proce(); --do call test_proce() 是该事件的操作内容,表示调用名为 test_proce() 的存储过程。

执行时间相关的例子

on schedule every 1 second --每秒执行1次

on schedule every 2 minute --每两分钟执行1次

on schedule every 3 day --每3天执行1次

ON schedule every 1 day starts date_add(date_add_curdate(), interval 1 day), interval 1 hour) --每天凌晨1点执行

ON schedule every 1 month starts date_add(date_add(date_sub(curdatte(),interval day(curdate())-1 day),interval 1 month),interval 1 hour) --每个月的第一天凌晨1点执行

on schedule at current_timestamp()+interval 5 day --5天后执行

on schedule at current_timestamp()+interval 10 minute --10分钟后执行

on schedule at '2016-10-01 21:50:00' --在2016年10月1日,晚上9点50执行

ON SCHEDULE EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + 1 WEEK --每 3 个月,从现在起一周后开始

ON SCHEDULE EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK --每十二个小时,从现在起三十分钟后开始,并于现在起四个星期后结束

on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month --5天后开始每天都执行执行到下个月底

on schedule every 1 day ends current_timestamp()+interval 5 day --从现在起每天执行,执行5天

有关执行时间需要注意的点

在 event 事件中:ON SCHEDULE 计划任务,有两种设定计划任务的方式:

(1)AT 时间戳,用来完成单次的计划任务。时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间

(2)EVERY 时间(单位)的数量实践单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务。可以是任意非空(Not Null)的整数式,时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者 SECOND。

提示: 其他的时间单位也是合法的如:QUARTER, WEEK, YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND,不建议使用这些不标准的时间单位。

[ON COMPLETION [NOT] PRESERVE]:ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后不会被Drop掉,建议使用该参数,以便于查看EVENT具体信息。

查看事件

SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;

修改事件

语法结构

ALTER EVENT 语句与 CREATE EVENT 语句基本相同。另外 ALTER EVENT 语句还有一个用法就是让一个事件关闭或再次活动。

ALTER

[DEFINER={user | CURRENT_USER}]EVENT[IF NOT EXISTS]event_nameONSCHEDULE schedule[ON COMPLETION [NOT]PRESERVE][ENABLE | DISABLE | DISABLE ON SLAVE]

[COMMENT 'comment']DO event_body;

删除事件

DROP EVENT IF EXISTS 事件名;

开启事件

alter event 事件名 on completion preserve enable; --开启定时任务

关闭事件

alter event 事件名 on completion preserve disable; --关闭定时任务

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

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

相关文章

lucene简介_Lucene简介

lucene简介本文是我们名为“ Apache Lucene基础知识 ”的学院课程的一部分。 在本课程中,您将了解Lucene。 您将了解为什么这样的库很重要,然后了解Lucene中搜索的工作方式。 此外,您将学习如何将Lucene Search集成到您自己的应用程序中&…

jsp mysql 插入数据_jsp连接MySQL实现插入insert操作功能示例

下午终于实现了jsp连接MySQL执行插入操作的功能。在index.jsp页面输入数据,提交到mysql——insert.jsp页面进行插入数据库的操作。index.jsp页面代码如下:request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8&…

swagger生成示例_生成器设计模式示例

swagger生成示例本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 &…

mysql函数和索引冲突问题_Mysql索引常见问题汇总

Q1:数据库有哪些索引?优缺点是什么?1.B树索引:大多数数据库采用的索引(innoDB采用的是b树)。能够加快访问数据的速度,尤其是范围数据的查找非常快。缺点是只能从索引的最左列开始查找,也不能跳过索引中的列&#xff0c…

新增操作 失败后重试_可重试的操作

新增操作 失败后重试在我从事的每个项目中,始终需要某些功能:重试操作。 通常,这是关于通过网络的呼叫,该呼叫可能一次失败,但随后会成功。 它可能涉及许多其他内容,主要包括与另一个系统的通信&#xff08…

mysql uroot e_批量 kill mysql 连接

事故重现,并且加入一些后期想到的想法作为演义. 今天 mysql 服务器负载过高, 主库上主要是写的操作,首先看有没有锁表的,发现没有.mysql -uroot -e "show processlist"|grep -i locked|wc -l再看delete,update,insert操作的数量.mysql -uroot -e "show process…

设计模式适配器模式_适配器设计模式示例

设计模式适配器模式本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 &…

mysql mgr bug_Mysql MGR架构误操作引发的问题处理

【背景介绍】故障方描述:一次用户刷权限的时候不小心把数据库用户表记录删掉了,执行之后发现不对后重建用户,杀掉进程后重新MGR启动报错。【报错信息】2018-06-13T12:47:41.405593Z 32 [Note] Plugin group_replication reported: Group comm…

css外墙法_外墙设计模式示例

css外墙法本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff0…

向 mysql导入数据 源码_MySQL 导入数据

MySQL 导入数据MySQL中可以使用两种简单的方式来导入MySQL导出的数据。使用 LOAD DATA 导入数据MySQL 中提供了LOAD DATA INFILE语句来插入数据。以下实例中将从当前目录中读取文件 dump.txt ,将该文件中的数据插入到当前数据库的 mytbl 表中。mysql> LOAD DATA …

设计模式示例_桥梁设计模式示例

设计模式示例本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 &#x…

数值分析 使用c语言 源码_分析源码,学会正确使用 Java 线程池

在日常的开发工作当中,线程池往往承载着一个应用中最重要的业务逻辑,因此我们有必要更多地去关注线程池的执行情况,包括异常的处理和分析等。本文主要聚焦在如何正确使用线程池上,以及提供一些实用的建议。文中会稍微涉及到一些线…

设计模式示例_状态设计模式示例

设计模式示例本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 &#x…

cam350 不能打开光绘文件_如何在CAM350中导入Allegro光绘

内容简介:本人之前遇到过 CAM350 导入 Allegro 格式光绘后钻孔偏移、异型孔不显示的问题,捣鼓过之后找到一个方法,在 Allegro 群友的建议下制作该文档进行适当的说明。1. 导入 Gerber 文件鉴于手工导入 Gerber 文件需要逐层设置,过…

mockito验证参数_Mockito验证

mockito验证参数本文是我们名为“ 用Mockito测试 ”的学院课程的一部分。 在本课程中,您将深入了解Mockito的魔力。 您将了解有关“模拟”,“间谍”和“部分模拟”的信息,以及它们相应的存根行为。 您还将看到使用测试双打和对象匹配器进行验…

d3js mysql_D3.js入门指南

近期略有点诸事不顺,趁略有闲余之时,玩起D3.js。之前实际项目中主要是用各种chart如hightchart、echarts等,这些图形库玩起来貌都是完美的,一切皆可配置,但几年前接触了D3之后,觉得前面那chart类库局限的地…

docker 镜像选择_为什么选择Docker?

docker 镜像选择容器并不是什么新鲜事物,但是实现它们总是比需要的要复杂一些。 Docker在简化容器方面取得了长足的进步,并从此引爆了整个世界。 让我们看看为什么。 为什么Docker成为家喻户晓的名字 Docker不是很老。 2014年5月,当我写了一…

layui templet格式化_layui使用templet格式化表格数据的方法

增加js/*---------------------格式化时间开始--------------------------*///对Date的扩展,将 Date 转化为指定格式的String//月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,//年(y)可以用 1-4 个占位符,毫秒(S)只能用…

设计模式示例_代理设计模式示例

设计模式示例本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 &#x…

mysql insert 字符集_有关 MySQL 字符集的注意事项-爱可生

本文关键字:字符集、建库建表一、数据库和字符集1. 建库时指定创建数据库时,显式指定字符集和排序规则,同时,当切换到当前数据库后,参数 character_set_database,collation_database 分别被覆盖为当前显式指…