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、事件的开始时间必须大于当前时间。


原文地址:https://www.cnblogs.com/gyfluck/p/9548223.html