您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

mysql中定时任务的用法

时间:2020-05-29 12:16:21  来源:  作者:

1.什么是事件

一组SQL集,用来执行定时任务,跟触发器很像,都是被动执行的,事件是因为时间到了触发执行,而触发器是因为某件事件(增删改)触发执行;

mqsql的事件类似于linux的定时任务,不过是完全在mqsql内部实现的。

事件是在一个独立的事件调度线程中被初始化,这个事件调度线程和处理链接的线程没有任何关系。并且该线程在事件执行结束后,会自动销毁。

2.开启事件

查看是否开启:

show variables like 'event_scheduler';

最全总结:mysql中定时任务的用法

 

如果显示OFF,则输入以下语句开启:

set global event_scheduler = on;

查看事件:

通过show events;可以查看创建的事件

3.创建自定义事件

首先创建一张测试表。

create table test_table
(
id int auto_increment primary key,
create_time datetime default CURRENT_TIMESTAMP null
)
comment '用来测试的表'
;

3.1 语法

CREATE EVENT [IFNOT EXISTS] event_name
   ONSCHEDULE schedule
   [ONCOMPLETION [NOT] PRESERVE]
   [ENABLE | DISABLE]
   [COMMENT ``'comment'``]
   DO sql_statement;
解释:

event_name:自己取的事件名

schedule:触发的时间周期。写法为:

AT TIMESTAMP [+ INTERVAL INTERVAL]
或 EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]

AT + 时间戳,用来完成单次的计划任务

EVERY 时间(单位)的数量实践单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务。

其中 INTERVAL 的取值又有每年/每月等等:

{YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
   WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
   DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

很多,但是常用的YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。剩下的不标准的不建议使用。

ON COMPLETION参数

表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后阻止该事件被Drop掉。所以,对于特定时间执行的事件,如果保持默认,执行完毕后,事件将被删除,不想删除的话要设置成ON COMPLETION PRESERVE。对于重复性时间,如果设置了ON COMPLETION NOT PRESERVE,那么也是只会在执行一次后停止并删除事件。

[ENABLE | DISABLE] 可以设置该事件创建后状态是否开启或关闭,默认为ENABLE。

[COMMENT ‘comment’]可以给该事件加上注释。

3.2 例子

3.2.1 每隔10秒插入一条记录
CREATE EVENT e_test_insert
ON SCHEDULE EVERY 10 SECOND
DO insert INTO test_table (create_time) VALUES (current_timestamp)

可以通过show events;查看刚创建的事件

最全总结:mysql中定时任务的用法

 

查看test_table

最全总结:mysql中定时任务的用法

 

3.2.2 在特定时间执行一次
CREATE EVENT e_test_insert_at
ON SCHEDULE AT TIMESTAMP '2020-05-28 11:00:00'
DO insert INTO test_table (create_time) VALUES (current_timestamp)
最全总结:mysql中定时任务的用法

 

到时间后,查看test_table

最全总结:mysql中定时任务的用法

 

确实执行了。再查看一下事件

最全总结:mysql中定时任务的用法

 

被删除了。验证了前面的ON COMPLETION参数

3.2.3 在指定延时后执行一次
CREATE EVENT e_test_insert_at
ON SCHEDULE AT CURRENT_TIMESTAMP+INTERVAL 50 SECOND
ONCOMPLETION PRESERVE
DO insert INTO test_table (create_time) VALUES (current_timestamp)

50秒后执行一次,并且不要完成后不要删除任务。

最全总结:mysql中定时任务的用法

 

并且执行完成后,没有被删除

3.2.4 5分钟后开始,每10秒插入一次
CREATE EVENT e_test_insert
ON SCHEDULE EVERY 10 SECOND
STARTS CURRENT_TIMESTAMP+INTERVAL 5 MINUTE
DO insert INTO test_table (create_time) VALUES (current_timestamp)

Starts关键字,可以指定在什么时候开始

最全总结:mysql中定时任务的用法

 

3.2.5 指定时间后结束
CREATE EVENT e_test_insert
ON SCHEDULE EVERY 10 SECOND
STARTS CURRENT_TIMESTAMP+INTERVAL 1 MINUTE
ENDS CURRENT_TIMESTAMP+INTERVAL 2 MINUTE
DO insert INTO test_table (create_time) VALUES (current_timestamp);

在当前1分钟后开始,在当前2分钟后结束。所以,只会执行1分钟。

最全总结:mysql中定时任务的用法

 

3.2.6 每天的定时执行
CREATE EVENT e_test_insert_day
ON SCHEDULE EVERY 1 DAY
STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)
DO insert INTO test_table (create_time) VALUES (current_timestamp);

每天1点执行一次。DATE_ADD是MySQL得内置函数,对某个时间加上指定时间。

3.2.7 每个月的29号0点30分执行一次
CREATE EVENT e_test_insert_month
ON SCHEDULE EVERY 1 MONTH
STARTS DATE_ADD(DATE_ADD('2020-04-29', INTERVAL 1 MONTH), INTERVAL 30 MINUTE)
DO insert INTO test_table (create_time) VALUES (current_timestamp);
3.2.8 每小时的30分时执行一次
CREATE EVENT e_test_insert_hour
ON SCHEDULE EVERY 1 HOUR
STARTS DATE_ADD('2020-05-28 13:30:00', INTERVAL 1 HOUR)
DO insert INTO test_table (create_time) VALUES (current_timestamp);

4,删除事件

语法:

DROP EVENT [IF EXISTS] event_name

如果事件不存在,会报错。所以执行时,最好加上IF EXISTS

5, 修改事件

语法:

ALTER EVENT event_name
[ON SCHEDULE schedule]
[RENAME TO new_event_name]
[ON COMPLETION [NOT] PRESERVE]
[COMMENT ``'comment'``]
[ENABLE | DISABLE]
[DO sql_statement]
5.1 临时关闭事件
ALTER EVENT e_test DISABLE;
5.2 开启事件
ALTER EVENT e_test ENABLE;
5.3 将每天清空test表改为5天清空一次:
ALTER EVENT e_test ON SCHEDULE EVERY 5 DAY;


Tags:mysql 定时任务   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1.什么是事件一组SQL集,用来执行定时任务,跟触发器很像,都是被动执行的,事件是因为时间到了触发执行,而触发器是因为某件事件(增删改)触发执行;mqsql的事件类似于linux的定时任务,不...【详细内容】
2020-05-29  Tags: mysql 定时任务  点击:(60)  评论:(0)  加入收藏
▌简易百科推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  爱可生    Tags:MySQL   点击:(7)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  python数据分析    Tags:MySQL记录锁   点击:(18)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  linux上的码农    Tags:mysql   点击:(13)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  元宇宙iwemeta    Tags:mysql   点击:(15)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  吴彬的分享    Tags:Mysql数据库   点击:(14)  评论:(0)  加入收藏
当你们考虑项目并发的时候,我在部署环境,当你们在纠结使用ArrayList还是LinkedArrayList的时候,我还是在部署环境。所以啊,技术不止境,我在部环境。今天这篇文章缕一下在同一台服...【详细内容】
2021-12-08  秃头码哥    Tags:MySQL数据库   点击:(17)  评论:(0)  加入收藏
对于数据分析来说,MySQL使用最多的是查询,比如对数据进行排序、分组、去重、汇总及字符串匹配等,如果查询的数据涉及多个表,还需要要对表进行连接,本文就来说说MySQL中常用的查询...【详细内容】
2021-12-06  笨鸟学数据分析    Tags:MySQL   点击:(21)  评论:(0)  加入收藏
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。...【详细内容】
2021-11-24  笨鸟学数据分析    Tags:SQL语句   点击:(23)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Java云海    Tags:分布式锁   点击:(31)  评论:(0)  加入收藏
MySQL的进阶查询 一、 按关键字排序 使用ORDERBY语句来实现排序排序可针对一个或多个字段ASC:升序,默认排序方式 【升序是从小到大】DESC:降序 【降序是从大到小】ORDER BY的...【详细内容】
2021-11-05  Java热点    Tags:SQL语句   点击:(28)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条