如何使用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来执行定时任务_第1张图片
查看mysql版本

1、首先检查是否开启了定时任务

mysql>show variables like 'event_scheduler';

如何使用MySQL来执行定时任务_第2张图片
是否开启定时任务

Value = 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到一个新技能。。。

我是bearPotMan,一个经验不足的十八线演(码)员(农)。
Know everything,control everything!

你可能感兴趣的:(如何使用MySQL来执行定时任务)