一、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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。