Mysql 为整个数据库增加一个值

Mysql 为整个数据库增加一个值,mysql,database-management,Mysql,Database Management,所以我们有一个数据库。每隔一段时间,我们会添加一个新的数据集,并且应该删除最旧的数据集 假设DB是6月初:18条记录,6月底:15条记录,8月:23条记录。当我们添加下一个记录时,我们希望删除6月初的记录。然而,添加新数据并不是完全正常的。 我的第二个想法是为每个记录都有一个oldness字段,在添加新数据集之前,将所有oldness字段增加1,然后删除所有oldness为3的数据 我担心这不是实现这一点的最佳方式,但我不确定这是否重要,因为它是一个很少更新的相当小的数据库。这就是说,我当然愿意

所以我们有一个数据库。每隔一段时间,我们会添加一个新的数据集,并且应该删除最旧的数据集

假设DB是6月初:18条记录,6月底:15条记录,8月:23条记录。当我们添加下一个记录时,我们希望删除6月初的记录。然而,添加新数据并不是完全正常的。 我的第二个想法是为每个记录都有一个oldness字段,在添加新数据集之前,将所有oldness字段增加1,然后删除所有oldness为3的数据


我担心这不是实现这一点的最佳方式,但我不确定这是否重要,因为它是一个很少更新的相当小的数据库。这就是说,我当然愿意接受关于更好算法的建议来完成这项任务。

我假设您的数据被存储为每个报表都有一个timestamp-date列,并且您总是希望删除3个月前的x数据。如果是这样,您可能会考虑使用mysql的DATEDIFF函数

例如,它可能看起来像这样:

DELETE from table1 WHERE datediff(CURRENT_DATE(), datecol) > 89

总是按月吗

UPDATE table SET status = "oldness" WHERE date_inserted <= NOW() - INTERVAL 3 MONTH
在我的帮助下,我想我找到了解决办法。基本上

$query = "SELECT MIN(timestamp) FROM new_items WHERE type = 'Book' ";

然后,只需使用该时间戳,再加上一个小时,因为上传数据可能需要一秒钟以上的时间,可能一分钟就足够了,然后删除数据库中早于该时间戳的所有内容。

是的,您应该选择不进行清理,因为如果您的数据库很小,它根本不会打扰mysql,你不必定期清理旧记录,以使其更好地工作。如果我们不删除旧信息,数据库将不会保持较小。你能包括表的大小吗?因为在你的描述中,它听起来不到千分之几千。问题是,我不知道最旧的数据将有多旧。可以跳过月份,或者一个月内可能有4次更新。嗯……您可以使用MIN函数获取现有记录的最早日期,并使用last_day指定该月的最后一天。这将使您在使用最久月份的最后一天午夜,因此您需要添加一天,以便删除在最后一天输入的记录。也许是类似的?SET@olddate=从表1中选择LAST_DAYMINdatecol+间隔1天;从datecol<@oldDate的表1中删除同样,在同一个月内可能会有多个更新,但我认为MIN是最好的选择。查找最小日期,添加一小时,以防记录不能完全同时添加,并删除超过该时间的记录。由于您的评论,我认为我已经有了一些工作,因此如果您想编辑答案或创建新答案,无论采用哪种方式,我都会将其标记为已接受答案。由于我协助您发现答案纯属巧合,因此如果您发布解决方案并将其标记为已接受答案,可能会更有用很遗憾,没有。一个月内可以有多个更新,或者可以完全跳过几个月。没问题。我发布的这个示例将在3个月前的所有行中运行。我的意思是,可能有一组数据可以在一个月中旬开始,并在下个月中旬结束。如果是,您可能需要添加一列来区分一组数据。如果没有,我的解决方案将起作用。