SQL条目在24小时后过期

时间:2012-09-13 16:28:13

标签: php mysql html

我想创建一个表,其中的条目在PHP和MySQL中插入后24小时到期。

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

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

我该怎么做?

3 个答案:

答案 0 :(得分:12)

您可以使用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();
    

答案 1 :(得分:2)

  1. 当用户进行交互时,您不应该执行删除过程。它会减慢速度,你应该使用cronjob(每分钟/小时)
  2. 您需要为添加的时间戳值编制索引,然后运行DELETE FROM table WHERE added < FROM_UNIXTIME(UNIX_TIMESTAMP()-24*60*60)
  3. 也许你想要签出Partitions,它将表分成不同的表,但它表现为一个表。优点是您不需要删除条目,并且每天都会有单独的表格。
  4. 我认为你认为很多数据会减慢表格。也许您应该使用EXPLAINMySQL Manual)并使用索引优化SELECT查询(MySQL Manual
  5. 更新查看eggyal's answer - 这是另一种值得一看的方法。

答案 2 :(得分:0)

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

这将有助于

Delete MySQL row after time passes