SHOW VARIABLES LIKE '%event_sche%'; //查看event是否开启
SET GLOBAL event_scheduler = 1; //将事件计划开启
SET GLOBAL event_scheduler = 0; //将事件计划关闭
ALTER EVENT eventName ON COMPLETION PRESERVE DISABLE; //关闭事件任务
ALTER EVENT eventName ON COMPLETION PRESERVE ENABLE; //开启事件任务
SHOW EVENTS ; //查看事件任务
创建一个定时任务写法:
create event second_event_name
on schedule every 30 minute
on completion preserve disable
do sql语句
实例:
表名:test_timer ;字段id自增长,name
SHOW VARIABLES LIKE '%event_sche%';
SET GLOBAL event_scheduler = 1;
create event t_test_timer_venet
on schedule every 1 second
on completion preserve disable
do insert into test_timer (name) values("测试时间1秒钟插入一次")
SHOW EVENTS ;
//查看status是否开启如果没有:
ALTER EVENT eventName ON COMPLETION PRESERVE ENABLE;
//查看表数据:已经有了。
//关闭:
ALTER EVENT eventName ON COMPLETION PRESERVE DISABLE;
常见周期定时规则
周期执行-关键字 EVERY
单位有 second(秒),minute(分钟),hour(小时),day(天),week(周),quarter(季度),month(月),year(年)
//举例:
on schedule every 1 second //每秒执行一次
on schedule every 2 minute //每两分钟执行一次
//列外:
on schedule at '2020-8-19 16:50:00' //在2020-8-19 16:50:00时执行
on schedule at current_timestamp()+interval 10 minute //10分钟后执行
on schedule at current_timestamp()+interval 5 day //5天后执行
//其中current_timestamp()是当前时间戳函数
//在某个时间段执行–关键字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天
例子,编写订单未支付超过60分钟就取消
create event study_order_timer_event
on schedule every 1 minute
on completion preserve disable
do update study_order set order_status_id=0 where round(TIME_TO_SEC(TIMEDIFF(NOW(),FROM_UNIXTIME(date_added))) /60) >60 and order_status_id = 1;
然后开启事件任务
其中:
round(TIME_TO_SEC(TIMEDIFF(NOW(),FROM_UNIXTIME(date_added))) /60) 这个方法返回现在时间和订单时间的差值
round(num):四舍五入
TIME_TO_SEC(time):函数将时间值转换为秒
TIMEDIFF(day1,day2):函数返回两个日期之间的天数,day1格式:YYYY-MM-DD H:i:s
now():现在的时间
FROM_UNIXTIME(date_added):因为数据库,存订单时间是unix时间戳的需要FROM_UNIXTIME()转成YYYY-MM-DD H:i:s
//查询
SELECT * from study_order where round(TIME_TO_SEC(TIMEDIFF(NOW(),FROM_UNIXTIME(date_added))) /60) >60 and order_status_id = 1;