在指定时间后删除 Mysql 行


Remove Mysql row after specified time

我正在尝试创建一个计算机预订系统,用户可以在其中选择一台计算机并选择他将使用此PC的时间。在那个时候,其他人无法保留这台电脑,我需要找到一个解决方案,如何在他们的时间到期后自动删除包含保留电脑的所有行。谢谢你的建议。

处理此问题的常用方法是在reservation行上存储expires_at时间戳。然后,您查找任何"开放"预订的查询将具有WHERE 'expires_at' < NOW()或类似内容。

这是一个未经测试的答案,可能只是一个建议,但我刚刚开始看这些,所以我也对反馈感兴趣。 我仍在研究可能性和缺点,但它可能非常适合您的需求。

看看MySQL Events,关于它的文章在这里,以及Mysql Docs的官方语法。
根据文章:

事件类似于触发器。然而,与其磨合 响应数据更改,可以安排事件运行任意数量 特定时期内的次数。实际上,它仅是数据库 克龙作业。

考虑到这一点,我会设想一个程序,删除任何>1小时(如果这是过期的话)。 此过程将在新插入上触发,以摆脱当时过期的任何内容,但也会在每 15 分钟左右运行一次的事件中触发,以便触发器的自动删除不依赖于其他人添加保留来触发该过程。

如果您的服务器是 linux,则可以使用 cron 作业在每个预订日期每天检查一次。如果这些日期已过期..修改后的油田储备可用。

通常我会这样做:

    存储
  • 预留时,存储date_fromdate_to数据类型DATETIME
  • 当检查是否有计算机免费检查所有计算机并使用WHERE '{$my_date}' >= date_to AND '{$my_date}' <= date_from进行过滤时 - 通过这个你应该能够获得在一定时间内未保留的所有 PC......

若要在解决方案中完成,需要运行一个 CRON 作业,该作业调用查询以删除具有 reservation_time + (15 * 60)

我假设您有预订的时间,并且正在使用UNIX/纪元时间戳。

如果您知道它将始终是固定间隔(即 15 分钟),而不是做一个expires_now,您可以执行以下操作:

DELETE FROM reservations WHERE  reservation_time + (15 * 60) < unix_timestamp() 

你可以研究的是管理来自PHP的cron作业,http://www.highonphp.com/cron-job-manager。

上面的脚本将在创建预留时插入一个条目到/etc/cron.d/中,您可以将其配置为在预期的预留结束时间运行。然后在将要执行的 php 文件中,您可以执行以下操作:

DELETE FROM reservations WHERE id = :id