通用技术 [Mysql] 定时删除旧记录

bauul · 2018年06月25日 · 最后由 bauul 回复于 2018年06月26日 · 2675 次阅读

缘由

接口测试执行结果有入库保存,时间一长,数据就相当的大,而很久之前的数据呢,又没什么用,只需要保留最近一段时间的数据就可以了
所以需要做下定期删除旧记录,因为数据库是 mysql,所以问题就是 mysql 如何做定期清理记录的问题

怎么做

开启定时任务

修改 my.conf

event_scheduler=ON
# 检查是否开启
SHOW VARIABLES LIKE '%event_scheduler%';
新增定时任务
CREATE EVENT e_delete_case_result
ON SCHEDULE
EVERY 10 DAY
DO
DELETE FROM tb_api_test_result WHERE case_start_time < unix_timestamp(DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 10 DAY))*1000;
# 如果不需要这个定时任务,可以将它删除或改成disable状态
DROP e_delete_case_result IF EXISTS e_delete_case_result;

问题

有人直接将 sql 语句写到定时任务中,比如本例,也有人首先创建存储过程,然后在定时任务中调用,这两者是否有较大的差别呢?

Reference

http://www.w3school.com.cn/sql/sql_dates.asp

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 8 条回复 时间 点赞

drop database

SinDynasty 回复

👍 😈

感谢分享

哈哈,简单直接。👍
我是通过接口去删数据的

如果很长时间跑一次且能停服务的话,这样做会更快:
create table tb_api_test_result_temp as select * FROM tb_api_test_result WHERE case_start_time >= unix_timestamp(DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 10 DAY))*1000;

truncate table tb_api_test_result;

insert into tb_api_test_result (select * from tb_api_test_result_temp);

每天都跑的话,我这样做就毫无意义了
另外,写 SQL 尽量带上=号

testly 回复

客气咯

槽神 回复

嗯,多谢

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册