如何使用MySQL来执行定时任务

首先我们创建一张表tb_person作为测试表(可以使用图形化界面或者sql语句):

CREATE TABLE `tb_person` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `p_name` char(20) DEFAULT NULL COMMENT '姓名', `p_sex` char(10) DEFAULT NULL COMMENT '性别', `gmt_create` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB;

然后就可以来测试一下mysql的定时任务到底该怎么操作,ok,开搞!
我的本地mysql版本使用了最新的mysql 8.0.11.

如何使用MySQL来执行定时任务
文章图片
查看mysql版本
1、首先检查是否开启了定时任务
mysql>show variables like 'event_scheduler';


如何使用MySQL来执行定时任务
文章图片
是否开启定时任务
Value = https://www.it610.com/article/ON表示已经开启了定时任务(MySQL 8.0.11是默认开启的),ok,其他版本如果没有开启怎么办?当然可以设置,在MySQL的配置文件 my.ini中添加如下一行:
[mysqld] event_scheduler=ON /*这一行加入 mysqld 标签下*/

接下来就是重点:
2、创建存储过程
什么是存储过程?可以参考mysql存储过程详细教程
学习完之后可以使用如下语句来创建:本次我们来模拟一个新增操作
mysql>CREATE PROCEDURE p_test() /*创建存储过程p_test以备后续调用*/ BEGIN insert into tb_person (name,sex,gmt_create) values("bearPotMan","男",now()); /*要执行的语句,可以还有其他操作语句,比如update等*/ END;

3、设置定时任务调用这个存储过程
创建一个事件event来调用上面创建好的存储过程:
mysql>CREATE EVENT e_test /*创建事件e_test*/ ON SCHEDULE EVERY 1 second STARTS TIMESTAMP '2018-06-29 00:42:00'/*从2018-06-29 00:42:00这个时间开始每一秒*/ ON COMPLETION PRESERVE /*表示创建后即时生效,或者可以使用 ON COMPLETION PRESERVE DISABLE 表示创建后不用即时生效,可以结合上一条语句看是否需要即时生效*/ DO BEGIN CALL p_test(); /*调用之前创建好的存储过程*/ END;

如果设置了ON COMPLETION PRESERVE DISABLE,可以使用下面的语句来开始定时任务:
alter event e_test on completion preserve enable; /*开启定时任务*/

4、关闭定时任务
ok,最后来说一下怎么来关闭定时任务,其实就一条语句的事:
alter event e_test on completion preserve disable; /*关闭定时任务*/

ok,去执行查询语句看一下效果吧!是不是又get到一个新技能。。。
【如何使用MySQL来执行定时任务】我是bearPotMan,一个经验不足的十八线演(码)员(农)。
Know everything,control everything!

    推荐阅读