【问题标题】:How to delete mysql row after time passes?时间过去后如何删除mysql行?
【发布时间】:2012-03-26 00:53:32
【问题描述】:

我不知道从哪里开始:

我有一个存储postIDDate 的数据库。

我想要做的是让我的网站自动删除 Date 小于今天的所有行。这个脚本根本不能有任何用户输入。没有按钮点击,什么都没有。该脚本必须在每天午夜运行。

我一直在到处寻找可以做到这一点的东西,但我一无所获。

【问题讨论】:

  • 这有很多方面:(1) 编写DELETE 语句; (2) 创建一个运行DELETE 语句的脚本; (3) 将脚本设置为每晚午夜运行。您需要哪些方面的帮助?
  • 我需要帮助来弄清楚如何让我的代码在没有用户输入的情况下自动触发。下面的答案都指向 CRON,所以我会调查一下。

标签: php mysql automation delete-row


【解决方案1】:

您可以使用 PHP 脚本并在您的 cpanel 上使用 cron 作业。

例子:

cronjobcommand.php

<?php 
 include 'your_db_connection';
 mysql_query("DELETE FROM your_table_name WHERE Date < NOW()");
?>

我在下面附上了截图供您参考。

【讨论】:

    【解决方案2】:

    对于那些在共享主机上的人,比如 1and1,并且不能使用 cron,这里有 2 个替代方案:

    • mysql events 使您能够在 mysql 上放置一个时间触发器,该触发器将在您需要时执行,而无需任何类型的用户输入触发

    • 如果您因为处于 1and1 状态而无法创建 mysql 事件 :(,另一种方法是使用 webcron

    你只需要告诉 webcron 你想运行的 php 脚本的 url,他们会在你想要的时间间隔为你触发它

    【讨论】:

      【解决方案3】:

      为什么每天都使用 cronjobs?为什么不过滤输出数据。例如,在您的选择中添加一个简单的where,检查发布日期是否等于今天:

      SELECT * FROM `posts`
      WHERE (DATE(`post_date`) = DATE(NOW()));
      

      这样您就不需要需要在任何特殊时间执行数据库管理/cronjobs,它只会用于数据库管理。之后,您可以使用以下 mysql 命令删除不必要的数据随时

      DELETE FROM `posts` WHERE (
          DATE(`post_date`) < DATE(NOW())
      )
      

      【讨论】:

      • 假设,我有这样的情况,在我的数据库中,我有记录在特定日期发布,需要在某个特定截止日期删除。你会怎么做才能自动运行脚本?
      • @sudhakarphad 抱歉,我回复晚了;在这种情况下,您可以将截止时间添加到您的比较中(post_date + deadtimetime)。
      【解决方案4】:

      大多数主机都提供cron(8) 服务,可以在特定时间执行命令。您使用crontab(1) 程序来管理crontab(5) 文件,该文件描述了何时运行哪些命令。

      有很多功能可供您使用,但如果您编写一个运行适当 MySQL 命令的程序(shell 脚本、php 脚本、C 程序等),您可以完全通过cron(8) 调用该程序- 时尚。

      运行crontab -e 编辑您当前的crontab(5) 文件。如果不存在,希望你能得到一个有用的标题。如果没有,请复制:

      # m h  dom mon dow   command
      

      这些列表示执行命令的分钟、小时、月中的某天、月和周中的某天。列中的所有数字本质上是通过“与”运算来决定何时运行命令。

      因此,每晚的午夜应该是这样的:

      0 0 * * * /path/to/executable
      

      它非常灵活,因此请花一些时间阅读文档,您会发现它有很多用途。

      【讨论】:

        【解决方案5】:

        您应该为它设置cron 作业(预定大头钉。)。

        cron job 是适用于 Linux 和 Unix 操作系统的自动程序设置。它允许用户在特定时间和日期执行多个命令或功能。

        您的 cpanel 设置中有 cron Job。首先,您需要使用您的逻辑制作一个 php 脚本,以便在每个日期之后删除记录。从服务器获取日期并编写删除脚本。

        然后转到 cpanel 中的 cron 选项卡并设置运行 cron 的时间间隔并提供 php 脚本文件的路径。

        【讨论】:

          【解决方案6】:

          MySQL 没有任务调度程序。因此,您必须使用操作系统的任务调度程序(Linux 下的CRON),或者在主页脚本期间午餐一个基本的任务检查器子脚本(在另一个应该显示更改数据的页面上) .

          【讨论】:

          • 这不是真的。 MySQL 有一个 Event Scheduler,在版本 5.1.6 (2006-02-01) 中实现。更多信息:MySQL Event Scheduler.
          • MySQL 有事件调度器
          猜你喜欢
          • 2012-06-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多