MySQL设置定时调用存储过程

作者:动易软件 来源:网络 点击数: 发布时间:2023年03月30日

 设置一个定时任务:定时为test表中endtime中插入当前时间

1、创建表

-- 创建一个表test:字段endtime

CREATE TABLE test (endtime DATETIME);

2、创建存储过程

-- 创建函数 test ():向test插入endtime=当前时间

 

CREATE PROCEDURE test ()

BEGIN

    INSERT INTO test

    SET endtime = now();

END;

注:运行上面的SQL之后生成以下存储过程,点击运行,可以验证该存储过程是否正确。

3、创建事件

-- 设置定时任务:每隔30分钟调用一次函数-test ()

CREATE EVENT

IF NOT EXISTS e_test ON SCHEDULE EVERY 30 SECOND ON COMPLETION PRESERVE DO

CALL test ();

 

注:运行上面的SQL之后生成以下事件,也可以使用工具直接生成。

 

3、计划制定

 注:点击计划,可以查看和修改计划。图示表示:从2019-09-07 16:34:52开始,每个30秒,执行一次该事件。

  

 4、验证

【1】验证存储过程

查看test里面并没有每隔30秒插入一条数据,没有成功的话,先检查存储过程,结果是运行成功,那就是事件出了问题,后面检查事件。

【2】验证事件状态

 查看事件的状态:disable,改为enable

 

 【3】验证事件计划(开启事件调度器)

 保存时发现定时任务报错:报事件计划已关闭,事件只能在服务器启动并开启事件计划时才能处理。接着去开启事件。

-- 查看event是否开启

 

SHOW VARIABLES LIKE '%event_sche%';

-- 开启事件调度器

set global event_scheduler =1;

-- 或者

set global event_scheduler=on;

注:运行上面sql后,再次查看,发现event_scheduler的结果为on

 

去test刷新观察,发现每隔30秒在向test插入数据,说明事件调度成功。

 

【4】关闭事件调度器

后面如果不想继续添加,可以关闭事件调度器

-- 关闭事件调度器

set global event_scheduler =0;

-- 或者

set global event_scheduler=off;