【问题标题】:SQL entries that expire after 24 hours24 小时后过期的 SQL 条目
【发布时间】:2012-09-06 19:21:34
【问题描述】:

我想制作一个表格,其中条目在 PHP 和 MySQL 中插入 24 小时后过期。

理想情况下,我希望每次用户与我的服务器交互时都运行一个“删除过程”,以删除旧条目。由于这更频繁,您应该不会删除大量数据,因此应该只需要几毫秒。

我已为每个条目赋予了日期/时间附加值。

我该怎么做?

【问题讨论】:

  • 每次用户与我的服务器交互是什么意思?
  • 看看这个(重复的)问题的答案:stackoverflow.com/questions/9472167/…
  • 您不清楚哪一部分? php? SQL?
  • 带有 DELETE 语句...下摆
  • 我的意思是每次用户运行特定查询时,它将删除所有超过 24 小时的条目,然后运行特定查询。我宁愿以这种方式完成,而不是使用事件调度程序。我希望它在 php 中完成。

标签: php mysql html


【解决方案1】:

您也可以使用 MySQL 的 event scheduler

  • 在这些记录过期时自动删除:

    CREATE EVENT delete_expired_101
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 24 HOUR DO
    DELETE FROM my_table WHERE id = 101;
    
  • 定期自动清除所有过期记录:

    CREATE EVENT delete_all_expired
    ON SCHEDULE EVERY HOUR DO
    DELETE FROM my_table WHERE expiry < NOW();
    

【讨论】:

  • 哇!我什至没有问这个问题,你想出了一些对我来说全新的东西!非常感谢!
  • 我必须告诉 MySQL 一个特定数量的“每 X 小时”,即使我只是想要每小时。例如ON SCHEDULE EVERY 1 HOUR DO
【解决方案2】:
  1. 不应在用户交互时执行删除过程。它会减慢速度,您应该使用 cronjob(每分钟/每小时)
  2. 您需要索引添加的时间戳值,然后运行DELETE FROM table WHERE added &lt; FROM_UNIXTIME(UNIX_TIMESTAMP()-24*60*60)
  3. 也许你会想要检查Partitions,它将表格分成不同的表格,但它的行为就像一个表格。优点是您无需删除条目,并且每天都有单独的表格。
  4. 我认为您认为大量数据会降低表格速度。也许您应该使用 EXPLAIN (MySQL Manual) 并使用索引 (MySQL Manual) 优化您的 SELECT 查询
  5. 更新查看eggyal's answer - 这是另一种值得一看的方法。

【讨论】:

  • 如果您需要精确的 24 小时精度,您还需要限制对表的查询。但IMO这是最好的方法。如果还没有,该表也可能最适合 InnoDB 引擎。
【解决方案3】:

您可以考虑使用 Cron Job,http://en.wikipedia.org/wiki/Cron 使其符合您的要求时每 24 小时运行一次。

这会有所帮助

Delete MySQL row after time passes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 2018-12-27
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多