mysql 定时任务
mysql 定时任务
参考博客:https://www.cnblogs.com/laowu-blog/p/5073665.html等资料,进行练习学习。
(1)首先查看mysql是否开启了定时任务:
mysql> show variables like '%event_%';
+----------------------------------------------------------+-------+
| Variable_name | Value |
+----------------------------------------------------------+-------+
| event_scheduler | OFF |
+----------------------------------------------------------+-------+
(2)如果值是OFF,表示没有开启,然后开启定时任务:
SET
GLOBAL
event_scheduler = 1;
(3)创建存储过程和mysql事件:
需求为每天1点,自动检查商品里还有30天过期的数据,更新状态未下架,并标注原因:
DELIMITER //
DROP PROCEDURE IF EXISTS check_package_enddate//
CREATE PROCEDURE check_package_enddate_proc() BEGIN UPDATE goods set status=2,comment=concat('取消时间:',now(),' 原因:套餐激活截止时间距今不足30天,系统自动取消。') where end_date <= DATE_SUB(NOW(), INTERVAL 30 DAY); END// DROP EVENT IF EXISTS check_package_enddate_event// CREATE EVENT check_package_enddate_event ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR) ON COMPLETION PRESERVE DO BEGIN CALL check_package_enddate_proc(); END// DELIMITER ;
知识总结:
1、使用到了mysql的存储过程的删除和添加;
2、使用到了mysql的定时事件的删除和添加;
3、使用了mysql函数now(),获取当前日期;
4、使用了mysql函数concat(),字符串连接函数;
5、使用了mysql函数DATE_SUB(),从日期减去指定的时间间隔;
6、使用了delimiter 修改sql语句结束符;
7、使用了mysql函数DATE_ADD(),从日期加上指定的时间间隔;
8、事件的开始时间必须大于当前时间。