【问题标题】:How do I clear MySQL records 15 minutes or older?如何清除 15 分钟或更早的 MySQL 记录?
【发布时间】:2014-07-03 16:11:03
【问题描述】:

我正在尝试设置一个 cron 作业脚本来检查和删除时间戳超过 15 分钟的记录,但是,下面的脚本不起作用,我不知道为什么。我不熟悉日期比较,试图在网上寻找我的目标的解决方案,但没有一个有效。完成的脚本会很棒!提前谢谢!

<?php

include('../../db/db.php');

mysql_select_db($database_conn_abrv, $con);

$timetocheck = date('Y-m-d H:i:s', mktime(date("H"), date("i") - 15, date("s"), date("m"), date("d"), date("Y"));

mysql_query("DELETE FROM loginbans WHERE time_created>$timetocheck",$con) or die(mysql_error());

?>

【问题讨论】:

标签: php mysql date comparison


【解决方案1】:

您可以将INTERVAL X MINUTE 用于 MySQL:

DELETE FROM loginbans
WHERE time_created > (NOW() - INTERVAL 15 MINUTE)

【讨论】:

    【解决方案2】:

    为什么要删除记录?这需要每隔几分钟运行一次的预定作业。这似乎是系统的负担。它还要求系统上的时钟与数据库以及运行 cron 作业的位置真正同步(诚然,这些通常是同一台计算机,但不一定)。

    相反,您可以在仅获取过去 15 分钟的记录的表上创建视图:

    create view v as
        select lb.*
        from loginbans lb
        where time_created >= now() - interval 15 minute;
    

    或者,您可以在视图中添加 isdeleted 标志:

    create view v as
        select lb.*, (time_created >= now() - interval 15 minute) as isdeleted
        from loginbans lb;
    

    如果您在每 15 分钟间隔内生成大量数据(想想至少有数万条记录),我建议您查看分区。您可以通过time_created 对数据进行分区并定期删除分区。删除分区比删除行要便宜得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-28
      • 2012-06-30
      • 1970-01-01
      • 2021-01-29
      • 2014-07-17
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      相关资源
      最近更新 更多