珍惜当下 展望未来!

存储过程+事件实现定时任务

存储过程+事件实现定时任务

需求:实现每10s执行一次,删除数据表两天前的数据

确认mysql开启了定时任务

# 显示为ON则已开启
SHOW VARIABLES LIKE 'event_scheduler';
#如果没开启的话执行
set global event_scheduler=1; #重启后会失效,如果要持久化的话需要去配置文件改

步骤

-- 创建存储过程  功能:实现删除n天前的数据
CREATE PROCEDURE `del_data_count`(IN date_inter INT)
BEGIN
DELETE FROM bs_user
WHERE
(TO_DAYS(NOW()) - TO_DAYS(create_time))>=date_inter; # 当前系统时间减去表的时间字段名
END


# 创建事件
CREATE EVENT `del_tbl_expired_data`
--  表示创建时间定时周期,(从2022-07-291点开始每十秒执行一次)
ON SCHEDULE EVERY 10 second STARTS TIMESTAMP '2022-07-29 01:00:00'
--  表示创建后马上生效  不生效的话就是ON COMPLETION PRESERVE DISABLE
ON COMPLETION PRESERVE 
-- 执行存储过程  删除两天前的数据
do call del_data_count(2)


-- 开启事件
 alter event del_tbl_expired_data on completion preserve enable;

表bs_user

注意:实际使用一定要维护好存储过程以及事件的调用,避免事故

相关sql

#存储过程相关
#删除存储过程
drop procedure del_data_count
#查询test库下所有存储过程
show procedure status where db = 'test'
#调用存储过程
call del_data_count(2)

#事件相关
# 查看已有事假
SHOW EVENTS; 
# 开启事件
alter event event_name on completion preserve enable;
# 关闭事件
alter event event_name on completion preserve disable;

参考:
https://blog.csdn.net/weixin_46443857/article/details/123275611?spm=1001.2014.3001.5502

posted @ 2022-07-29 17:39  嘿嘿-  阅读(180)  评论(0编辑  收藏  举报