4

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

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

我给每个条目一个日期/时间附加值。

我该怎么做?

4

3 回答 3

12

你可以使用 MySQL 的事件调度器:

  • 到期时自动删除此类记录:

    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();
    
于 2012-09-13T16:37:27.517 回答
2
  1. 当用户交互时,您不应该执行删除过程。它会减慢速度,您应该使用 cronjob(每分钟/小时)
  2. 您需要索引添加的时间戳值,然后运行DELETE FROM table WHERE added < FROM_UNIXTIME(UNIX_TIMESTAMP()-24*60*60)
  3. 也许你会想要检查Partitions,它将表分成不同的表,但它的行为就像一个表。优点是您不需要删除条目,并且每天都有单独的表格。
  4. 我认为您认为大量数据会减慢表格的速度。也许您应该使用EXPLAINMySQL 手册)并使用索引优化您的 SELECT 查询(MySQL 手册
  5. 更新查看eggyal 的答案- 这是另一种值得一看的方法。
于 2012-09-13T16:33:13.603 回答
0

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

这将有助于

时间过去后删除 MySQL 行

于 2012-09-13T16:31:02.150 回答