存储过程+事件实现定时任务
存储过程+事件实现定时任务
需求:实现每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