Mysql 中的事件定时任务

Mysql 中的事件/定时任务


说在前面的话,最好有navicat工具进行sql语句的操作。


1.什么是事件

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


2.开启事件

查看是否开启:

show variables like 'event_scheduler';


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

set global event_scheduler = on;


3.自定义事件举例

首先创建测试表,这个测试表大家可以随便按照自己的习惯进行创建,比如我自己的是时间戳的数据表。

-- 测试用数据表
DROP table IF EXISTS testdemo;
CREATE TABLE testdemo (timeline TIMESTAMP );


然后,新建事件,有两种事件类型,一个是间隔触发,另一个是特定事件触发。


类型一:每隔一段时间插入一条数据。

在实际运用中,每隔一段时间后要加入自己业务的逻辑。测试阶段使用插入数据比较能看到效果。

参数说明:

DEFINER:创建者;
ON COMPLETION [NOT] PRESERVE :表示当事件不会再发生的情况下,删除事件(注意特定时间执行的事件,如果设置了该参数,执行完毕后,事件将被删除,不想删除的话可以设置成ON COMPLETION PRESERVE);
ENABLE:表示系统将执行这个事件。


-- 每隔10秒就执行一次  
-- 1先删除存在的定时任务防止创建任务失败
drop event if exists interval_time_task_open; 
-- 2创建定时任务名字和任务
CREATE EVENT interval_time_task_open
ON schedule every 10 second
ON COMPLETION PRESERVE ENABLE DO 
INSERT INTO testdemo VALUES(CURRENT_TIMESTAMP);
-- 开启定时器 event_name 任务
alter event interval_time_task_open on completion preserve enable;
-- 关闭定时器 event_name 任务
alter event interval_time_task_open ON COMPLETION PRESERVE DISABLE;


执行语句后会生成事件函数,在navicat左侧树形中找到事件节点,打开节点找到自己新创建的事件名称,如果没有请先刷新一下事件节点。打开新创建的事件,看到“定义”页签的内容。一般默认生成的内容中没有BEGIN和END开头和结尾,语句后面也没有分号,这时需要手动修改生成的事件语句,加上BEGIN和END,以及语句的结尾分号。


如果不想这么麻烦可以在写语句的时候,换成这样的写法:

-- 每天下午13:50执行 
-- 1先删除存在的定时任务防止创建任务失败
drop event if exists interval_time_test1; 
DELIMITER ;;
-- 2创建定时任务名字和任务
CREATE EVENT interval_time_test1
ON schedule every 1 day starts '2018-03-23 13:50:00'
ON COMPLETION PRESERVE ENABLE DO 
BEGIN
INSERT INTO testdemo VALUES(CURRENT_TIMESTAMP);
END
;;
DELIMITER ;


添加红色字体代码。


类型二:特定时间插入一条数据。

参数说明:

DEFINER:创建者;
ON COMPLETION [NOT] PRESERVE :表示当事件不会再发生的情况下,删除事件(注意特定时间执行的事件,如果设置了该参数,执行完毕后,事件将被删除,不想删除的话可以设置成ON COMPLETION PRESERVE);
ENABLE:表示系统将执行这个事件。


-- 每天下午13:50执行 
-- 1先删除存在的定时任务防止创建任务失败
drop event if exists interval_time_test1; 
DELIMITER ;;
-- 2创建定时任务名字和任务
CREATE EVENT interval_time_test1
ON schedule every 1 day starts '2018-03-23 13:50:00'
ON COMPLETION PRESERVE ENABLE DO 
BEGIN
INSERT INTO testdemo VALUES(CURRENT_TIMESTAMP);
END
;;
DELIMITER ;


红色字体是设置的特定时间。

执行结果:




转载自:https://www.cnblogs.com/chenpi/p/5137310.html

略有修改。






  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值