如何清除15分钟或更长时间的MySQL记录?

时间:2014-07-03 16:11:03

标签: php mysql date mysqli comparison

我正在尝试设置一个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());

?>

2 个答案:

答案 0 :(得分:0)

您可以将INTERVAL X MINUTE用于MySQL:

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

答案 1 :(得分:0)

为什么要删除记录?这需要每隔几分钟运行一次的预定作业。这似乎是系统的负担。它还要求时钟真正在系统上与数据库和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对数据进行分区,并定期删除分区。删除分区比丢弃行要便宜得多。