在mysql数据库中删除超过3个月的行的工作

时间:2009-05-01 21:45:09

标签: mysql database

我们使用mysql服务器作为集中式日志系统,我希望有一个工作来删除\清理超过3个月的表条目。这样做的最佳方式是什么?

提前致谢。

-hinling

4 个答案:

答案 0 :(得分:67)

您是否在字段中存储了项目的创建日期?

如果是的话,

DELETE FROM myTable WHERE dateEntered < DATE_SUB(NOW(), INTERVAL 3 MONTH);

应该有用......

您可以在计划的任务/计算机作业中运行它......

答案 1 :(得分:4)

MySQL 5.1支持Events。我自己并没有真正使用它们,所以我不会保证它们。但是,如果您只想定期运行DELETE语句,我认为它可以运行得很好。

答案 2 :(得分:2)

一种简单的方法是安排一个每晚运行的作业,该作业调用存储过程来删除超过三个月的所有行。根据您的操作系统,它应该很容易。每晚都这样做,删除的数据量不会像每个月左右那样多。

我过去也曾在我的SP中插入数据来插入数据以删除当时不需要的数据,所以基本上每次插入一行时,插入后都会运行'cleanup'proc做了一些维护。这不是我的第一选择,但如果插入的数量很少,则可行,并且可以快速完成删除(您不希望减慢用户的速度)。好的副作用是数据总是干净(即所有数据总是<= 3个月),但不确定这是否在您的应用中很重要。

除了删除它们之外,您还应该考虑将行归档到另一个表,如果有任何的话,您可能希望某天将数据用于其他目的。我总是这样做,当一个甚至不知道你正在保存数据的经理突然迫切需要它时,你会惊讶于一个英雄。你可以为他们服务。

答案 3 :(得分:-1)

解释你的问题,“我的代码不依赖于客户端,我想多次在数据库上运行,而且我不需要看输出”,那么答案是“写一个存储的proc,并定期从任何客户端调用它。“