Mysql定时任务

一、mysql数据库默认不开启定时策略

查看是否启动:

showvariableslike'%event_sche%’

临时设置开启定时任务(重启后恢复默认设置)

            setglobal event_scheduler=1;

永久设置任务开启(mysql数据库启动时默认开启,设置完需重启)

在mysql目录的bin下,找到my.ini文件,在[mysqld] 下添加:event_scheduler=ON

二、创建存储过程(将sql语句放置begin和end中间)

use test;   (test为数据库名称)

delimiter //

create procedure test_proce()

begin

insert into weuse(name,created_at,updated_at) values('hello',now(),now());

end//

delimiter ;

三、创建event定时任务

create event second_event

on schedule every 1 second (此处意思为每秒执行一次,minute为分钟,day为天)

on completion preserve disable

do calltest_proce();(test_proce为第二步创建的存储过程名称)

四、查看所有定时任务

SELECT event_name,event_definition,interval_value,interval_field,statusFROM information_schema.EVENTS;

五、启动或关闭定时任务

alter event second_event on completion preserve enable;//开启定时任务

alter event second_event on completion preserve disable;//关闭定时任务

---------------------------------------------------------------------------------------------------------------------

五、常见周期定时规则

周期执行–关键字 EVERY

单位有:second,minute,hour,day,week(周),quarter(季度),month,year
如:

  •  

在具体某个时间执行–关键字 AT

如:

on schedule at current_timestamp()+interval 5 day //5天后执行
on schedule at current_timestamp()+interval 10 minute //10分钟后执行
on schedule at '2016-10-01 21:50:00' //在2016年10月1日,晚上9点50执行
  • 在某个时间段执行–关键字STARTS ENDS

如:

on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month //5天后开始每天都执行执行到下个月底
on schedule every 1 day ends current_timestamp()+interval 5 day //从现在起每天执行,执行5天

---------------------------------------------------------------------------------------------------------

查看事件

mysql> show events

mysql> show full events

mysql> SELECT * FROM mysql.event;

mysql> SELECT * FROM information_schema.events;

2> 修改事件 (ALTER EVENT)

ALTER EVENT event_name

     [ON SCHEDULE schedule]

     [RENAME TO new_event_name]

     [ON COMPLETION [NOT] PRESERVE]

     [COMMENT ''comment'']

     [ENABLE | DISABLE]

[DO sql_statement]

1)  临时关闭事件

ALTER EVENT e_test DISABLE;

2)  开启事件

ALTER EVENT e_test ENABLE;

3)  将每天清空 test 表改为 5 天清空一次:

ALTER EVENT e_test

          ON SCHEDULE EVERY 5 DAY;

3> 删除事件 (DROP EVENT)

语法很简单,如下所示:

DROP EVENT [IF EXISTS] event_name

例如删除前面创建的 e_test 事件

DROP EVENT e_test;

当然前提是这个事件存在,否则会产生 ERROR 1513 (HY000): Unknown event 错误,因此最好加上 IF EXISTS

DROP EVENT IF EXISTS e_test;

 

作者:黑眼圈熊猫
链接:https://www.jianshu.com/p/2539c94888d0
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值