mysql 定时任务_MySql定时任务

MySql定时任务是利用了事件调度器(Event Scheduler)的功能。

事件调度器可以用来做定时执行某些特定任务(例如:删除记录、对数据进行汇总、数据备份等等),来取代原先只能由操作系统的计划任务来执行的工作。

事件调度器是基于特定时间周期触发来执行某些任务。

事件调度器

在定时功能之前必须确保event_scheduler已开启

操作

命令

查询事件调度器是否开启

show variables like '%event_scheduler%';

开启事件调度器

set global event_scheduler =1;

关闭事件调度器

set global event_scheduler =0;

事件(EVENT)

Event的常用操作

创建事件命令详解

语法:

CREATE EVENT [IF NOT EXISTS] `事件名称`

ON SCHEDULE 计划任务时刻表

[ON COMPLETION [NOT] PRESERVE]

[ENABLE | DISABLE]

[COMMENT 'comment']

DO sql语句;

计划任务时刻表

有两种功能的设定计划任务时刻表

间隔

语法

时间戳

语法

[ON COMPLETION [NOT] PRESERVE]:

ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。

而PRESERVE的作用是使事件在执行完毕后不会被Drop掉,建议使用该参数,以便于查看EVENT具体信息

如何判断一个事件是否已经开启了

使用show events;查看Status字段值

应用举例

1.连接mysql数据库

mysql -h 127.0.0.1 -P 3306 -u root -p

2.切换到test数据库

use test;

3.设置事件调度器为开启状态

set global event_scheduler =1;

4.创建user表

create table user(id int(4) primary key not null auto_increment,name varchar(16) not null);

示例1:

创建事件:每间隔10秒向user表中插入一条记录,当然第0秒的时候已经插入了一条记录了

create event `myevent1` on schedule every 10 second do insert into user (name) values('cgm');

然后等到第11秒时执行select * from user;发现数据库中已经有2条记录了。

关闭事件

然后ALTER EVENT `myevent1` DISABLE;然后等待30秒之后执行select * from user;发送数据库中还是只有2条记录

示例2:

创建事件:在当前时间戳后的10秒钟这个时间点插入一条数据到user表,注意在第0秒的时候是不会执行插入数据操作的

create event `myevent2` ON SCHEDULE AT CURRENT_TIMESTAMP+INTERVAL 10 SECOND DO insert into user (name) values('cgm');

然后等到第11秒时执行select * from user;发现数据库中只有1条记录。

然后执行show events;发现并没有myevent2事件了。这是因为这个myevent2事件在执行完毕之后,就自动drop掉了,所以查询不到。

示例3:

创建事件:在当前时间戳后的10秒钟这个时间点插入一条数据到user表,注意在第0秒的时候是不会执行插入数据操作的

create event `myevent2` ON SCHEDULE AT CURRENT_TIMESTAMP+INTERVAL 10 SECOND ON COMPLETION PRESERVE DO insert into user (name) values('cgm');

然后等到第11秒时执行select * from user;发现数据库中只有1条记录。

然后执行show events;可以查询到myevent2事件。这是因为在创建myevent2事件时增加了ON COMPLETION PRESERVE,那么当事件执行完毕后,不会自动drop掉myevent2事件了。

然后执行DROP EVENT IF EXISTS `myevent2`;删除事件,然后执行show events;就查不到myevent2事件了

备注:ON COMPLETION PRESERVE代表事件执行完毕之后不删除事件记录

ON COMPLETION NOT PRESERVE代表事件执行完毕之后删除事件记录,而且这个是默认值

示例4:

创建事件:在给定的时间点清空user表内容。

CREATE EVENT `myevent3` ON SCHEDULE AT TIMESTAMP '2019-07-01 15:42:00' DO TRUNCATE TABLE user;

当时间走到2019-07-01 15:42:00时执行select * from user;发现数据库被清空了。

当时间走到2019-07-01 15:42:00时执行show events;发现查询不到myevent3时间了,因为事件已经执行完毕了。

示例5:

创建事件:设置一个每10秒钟向数据库插入一条数据的事件,从30秒后开始,到55秒后结束,事件持续事件为25秒,当执行完毕后插入3条记录

CREATE EVENT `myevent4` ON SCHEDULE every 10 second STARTS CURRENT_TIMESTAMP+INTERVAL 30 second ENDS CURRENT_TIMESTAMP+INTERVAL 55 second DO insert into user (name) values('cgm');

等到第55秒的时候执行select * from user;发现数据库中只有3条记录。

等到第55秒的时候执行show events;发现查询不到myevent4事件,因为这个事件已经执行完毕了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值