Mysql定时执行任务方法的实现

在做活动的时候需要一个定时器,在网上找个好几个插件都不太好用cron4j找个插件又不能精确到秒,所以为了操作数据库,就用了数据库自己带的定时执行任务。
1、首先要保证event事件是开启状态,默认情况下是关闭的,

set GLOBAL event_scheduler=1;
或者 
set GLOBAL event_scheduler=NO;

2、开始操作

set time_zone = '+8:00';  
set GLOBAL event_scheduler = 1;  
创建一个你要操作的表。我这个表在数据库demo下面
CREATE TABLE `test2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `t_id` int(11) NOT NULL,
  `t_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=utf8;
选择你要操作的数据库也就是上面提到的demo
use test2
为了避免冲突,执行一个删除语句

drop event if exists event_test

参考了一下别的东西很有帮助的就是设置分隔符,这一点我本来弄了好长时间
# 设置分隔符为 '$$' ,mysql默认的语句分隔符为 ';' ,这样在后续的 createend 这段代码都会看成是一条语句来执行  
DELIMITER $$ 
创建一个任务,在每天1019的时候开始执行

create event event_test
on schedule every day starts timestamp '2018-02-28 10:19:00'
do
# 开始该计划任务要做的事  
begin
insert test2 values(1,1,'test');
-- 结束计划任务 
end$$
# 将语句分割符设置回 ';'  
DELIMITER ; 

3、关闭和打开事件
关闭事件
alter event event_test disable;
开启事件
alter event event_test enable;
4、查询事件是否开启
select *from mysql.event

5、要查看当前是否已开启事件调度器,可执行如下SQL:

SHOW VARIABLES LIKE ‘event_scheduler’

6、.event的时间设置
设置event很简单,但是麻烦的是如何设置执行的时间,网上找了一些,自己总结了一下。
先看语句,如下面这个
CREATE EVENT test_event ON SCHEDULE EVERY 1 DAY STARTS ‘2012-09-24 00:00:00’
ON COMPLETION PRESERVE ENABLE DO CALL test_procedure();
EVERY 后面的是时间间隔,可以选 1 second,3 minute,5 hour,9 day,1 month,1 quarter(季度),1 year
从2013年1月13号0点开始,每天运行一次
ON SCHEDULE EVERY 1 DAY STARTS ‘2013-01-13 00:00:00’
从现在开始每隔九天定时执行
ON SCHEDULE EVERY 9 DAY STARTS NOW() ;
每个月的一号凌晨1 点执行
on schedule every 1 month starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day),interval 1 month),interval 1 hour);
每个季度一号的凌晨1点执行
on schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),’-‘,elt(quarter(curdate()),1,4,7,10),’-‘,1)),interval 1 quarter),interval 1 hour);
每年1月1号凌晨1点执行
on schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),’-‘,elt(quarter(curdate()),1,4,7,10),’-‘,1)),interval 1 quarter),interval 1 hour);

注意:真实的开发环境中,会遇到mysql服务重启或者断电的情况,此时则会出现事件调度器被关闭的情况,所有事件都不在起作用,要想解决这个办法,则需要在mysql.ini文件中加入event_scheduler = ON; 的语句

参考文献:http://blog.csdn.net/zhanglifu081022/article/details/12689745

猜你喜欢

转载自blog.csdn.net/qq_35733535/article/details/79397500