【问题标题】:SQL: How can I delete a row after a timeSQL:如何在一段时间后删除一行
【发布时间】:2013-12-16 15:52:42
【问题描述】:

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

我需要该行的有效期只有半小时,所以,如果进程在04:00创建一行,我需要该行在04:30自动删除。

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

【问题讨论】:

标签: php sql database symfony time


【解决方案1】:

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

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

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

【讨论】:

  • 我同意你的观点,向视图添加逻辑更加准确和稳定,如果需要删除,我们可以稍后使用 mysql 命令执行此操作(即使没有定义每日/每小时 cronjobs)[+1]。
【解决方案2】:

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

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

【讨论】:

  • 如果我不按视图 [+1] 过滤输出,我更喜欢使用此选项。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    然后你可以在 cron 上运行它,但你认为有必要的频率。

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

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

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

    【讨论】:

    • 谢谢,我想到了这个,但是可以随时创建行。当用户输入一个 sectino 时,将创建此行。但是这一行中的值的周期只有半小时。谢谢!
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      如果你有一个从这个表中读取的进程,那么使用一个基于这个时间来限制周期的子句。

      您可以运行一个额外的进程,将该行标记为禁用,以备不时之需,我个人不会删除此类数据,因为您会丢失事件日志。

      【讨论】:

        【解决方案7】:

        使用定时任务

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

        添加行:

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

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

        【讨论】:

          【解决方案8】:

          不需要php在这个任务中,你可以创建一个RECURRING类型的新mysql数据库事件,没有结束日期,你只需把

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-08-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多