SQL:如何在一段时间后删除一行

时间:2013-12-16 15:52:42

标签: php sql database symfony time

我有一个进程,它在SQL表中创建一个包含日期和时间的行。

我需要此行的有效期仅为半小时,因此,如果进程在04:00创建一行,我需要在04:30自动删除此行。

如何在SQL或PHP代码中执行此操作?

8 个答案:

答案 0 :(得分:2)

一般来说,如果你有这样的时间相关数据,你需要保存日期(原因)。如果您只想为某些作业隐藏旧行或类似的东西,只需创建一个数据库视图,该视图根据where条件隐藏行。 (如果您需要证明自己已经做了某些事情,这也很有帮助。)

如果您不关心,只需添加该日期时间/时间戳字段,并使用上述查询的反逻辑创建一个为您删除数据的cronjob。

如果您在实施时遇到问题,请自行将数据库架构添加到您的问题中并发表评论。

答案 1 :(得分:1)

在表格中添加列date_added timestamp列。插入行时会自动设置此值。

然后编写一个执行此查询DELETE FROM [mytable] WHERE UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(date_added) > 1800的PHP脚本。安排一个cron作业每分钟左右运行一次。

答案 2 :(得分:1)

您可以轻松地在库存程序http://dev.mysql.com/doc/refman/5.0/fr/create-procedure.html中进行此操作,或者如果您想在php(symfony2)中创建它,您可以创建一个croned命令,每隔x分钟(或secondes)启动以验证每个进程。

答案 3 :(得分:0)

我会创建一个PHP文件,在创建的日期/时间大于半小时前的任何记录上运行delete语句。

然后你可以在cron上运行它,但是你觉得有必要。

例如,如果可以随时创建条目,我会每隔一两分钟运行一次PHP脚本。

如果只能以半小时的间隔创建条目(例如5.00,5.30),那么在XX:01和XX:31运行脚本可能就足够了。

运行脚本的时间取决于可能输入数据库条目的时间,以及在创建后尽可能接近半小时删除行所需的准确性。

答案 4 :(得分:0)

我会在数据库本身上创建一个预定作业,以清理超过30分钟的记录。

答案 5 :(得分:0)

如果您有一个从此表中读取的进程,则使用一个根据此时间限制句点的子句。

您可以运行一个额外的流程,将该行标记为已禁用,以表示其他想法,我个人不会删除此类数据,因为您会丢失事件日志。

答案 6 :(得分:0)

使用cron

来自(控制台)SSH:crontab -e

添加行:

0,30 * * * * php /path/to/script.php

在script.php中编写代码以查看> = 30分钟的行并删除它们。

答案 7 :(得分:0)

在此任务中

不需要php ,您可以创建一个类型为RECURRING且没有结束日期的新mysql数据库事件,您可以在其中放置

DELETE FROM `table` WHERE `expiryTime`-UNIX_TIMESTAMP() < 1

由于日期保存方法不同,比较表达式可能会有所不同。在这种情况下,字段expiryTime将在到期时保存为unix timestamp