10

我想知道如何在日期过期时自动删除记录,我正在创建一个机票预订网站。我需要从我的 mysql 数据库中删除所有过期的航班详细信息。我在某处读到我可以使用 cron 但我不知道该怎么做。脚本的任何帮助都会非常有帮助。

4

6 回答 6

12

您可以尝试使用 MySQL Events

CREATE EVENT IF NOT EXISTS `dbName`.`eventName`
ON SCHEDULE
    EVERY 1 DAY // or 1 HOUR
COMMENT 'Description'
DO
    BEGIN

    DELETE FROM `dbName`.`TableName` WHERE `DateCol` < NOW();

    END

请注意,需要在您的服务器上启用MySQL事件调度程序:

SET GLOBAL event_scheduler = ON;

更多信息在这里

于 2013-08-12T07:32:07.933 回答
1

删除记录不是一个好主意,我建议您在 Details 表中添加 ActiveFrom 和 ActiveTo DateTime 列,然后不要在前端显示过期记录。

于 2013-08-12T07:26:11.867 回答
0

您需要该服务来检查过期记录并定期删除。你应该使用这个 SQL:

DELETE YourTable WHERE RecordDate < @Expiration

于 2013-08-12T07:23:32.883 回答
0

Cron 最适合您的情况。

  • 创建删除或标记不需要的航班的 php 文件,脚本将简单地连接到数据库,执行您的查询,并可能输出简短的成功/失败消息。
  • 设置每 X 小时或任何您想要的执行该 php 脚本的 cron 作业。

如果您使用的是 CPanel,您可以从中设置您的cron 作业

于 2013-08-12T07:27:26.737 回答
0

利用CRON作业。看看下面的表示。

Minutes [0-59]  
|   Hours [0-23]  
|   |   Days [1-31]  
|   |   |   Months [1-12]  
|   |   |   |   Days of the Week [Numeric, 0-6]  
|   |   |   |   |  
*   *   *   *   * home/path/to/command/the_command.sh 

如果你想安排一个任务在每周六上午 8:30 运行,它很可能看起来像这样。

30 8 * * 6 home/path/to/command/the_command.sh  

只需使用您的设置,您最终会得到它。

于 2013-08-12T07:30:58.133 回答
0

如果您的表当前只有 2 个字段,您需要添加一个时间戳字段(默认为CURRENT_TIMESTAMP),以便能够判断何时添加了该行。

然后您可以运行以下 MySQL 查询...

DELETE FROM `table` WHERE `timestamp` &gt; DATE_SUB(NOW(), INTERVAL 10 MINUTE)

; 不过,您需要将其作为 cron 运行。

据我所知,它不能单独在 MySQL 中完成。

于 2018-07-20T12:11:27.787 回答