• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

更新特定日期的数据库记录

mysql 来源:wemm 4次浏览

我在MYSQL数据库中有一个名为“dueDate”的属性。我想在11:59PM的截止日期更新记录。 有没有办法创建一个eventcronjob可以做到这一点?更新特定日期的数据库记录

===========解决方案如下:

如果您的系统管理允许您使用任一设施,您可以在任何特定时间设置事件或cronjob。查看如何创建MySQL重复事件很容易。

但这是一个方式处理您的业务规则中的时间依赖关系。我的意思是“脆弱”?首先,如果出现问题并且工作不运行,您的业务规则就会被玷污并需要修复。另一件事,cronjobs和事件在一天中的精确时间运行,他们在当天的时间或之后运行。他们可能需要一段时间才能开始。

所以,我建议你在查询中使用规则来执行你的业务规则。例如,假设您的原始愿望是在截止日期结束时将名为is_overdue的列设置为1。相反,使用这样的查询来计算您的is_overdue列。

SELECT whatever, dueDate, 
      IF(dueDate >= CURDATE() + INTERVAL 1 DAY, 1, 0) is_overdue 
    FROM table ... 

这样做的优势在于,它将永远是正确的,精确到毫秒,并且将不依赖于脆性后台作业的运行。

事件和cronjobs更好地用于清除陈旧记录。例如,您可以通过在其中使用这种查询来摆脱已经过期30天或更长时间的任何记录。

DELETE FROM table WHERE dueDate <= CURDATE() - INTERVAL 30 DAY 

如果您的cronjob /事件无法在某一天运行,第二天的运行依然会做正确的清理。

编辑。这个建议的要点是计算时间依赖列(在本例中为is_expired)。如果你遵循这个建议,你根本不会更新表格。相反,只要您检索is_expired值,就会使用建议的查询

专业提示。当你想在某个特定日子的最后一刻<=做某件事时,你最好在第二天的第一时刻<。也就是说,为获得最佳效果的地方

WHERE dueDate <= '2017-11-17 23:59:59' 

为什么要用

WHERE dueDate < '2017-11-17' + INTERVAL 1 DAY 

?一天中的最后一刻很难准确表达,特别是如果您的系统使用亚秒级精度进行计时。但一天中的第一时刻很容易表达。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)