我在MYSQL数据库中有一个名为“dueDate
”的属性。我想在11:59PM
的截止日期更新记录。 有没有办法创建一个event
或cronjob
可以做到这一点?更新特定日期的数据库记录
2
A
回答
2
如果您的系统管理允许您使用任一设施,您可以在任何特定时间设置事件或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
?一天中的最后一刻很难准确表达,特别是如果您的系统使用亚秒级精度进行计时。但一天中的第一时刻很容易表达。
相关问题
- 1. 在特定日期和时间更改数据库记录的值
- 2. 定期更新的bigquery数据库中的记录顺序
- 3. 更新数据库记录
- 4. 更新数据库记录
- 5. Moodle SQL更新数据库中的特定记录不工作
- 6. Linq选择比特定日期更新的所有记录
- 7. Oracle:在特定日期后更新记录
- 8. 按日期列出数据库记录
- 9. 按日期存储数据库记录
- 10. 用户特定的数据库记录
- 11. Mysql获取特定日期的记录
- 12. 更新数据库中的记录
- 13. 数据库中的记录更新
- 14. 更新数据库中的记录
- 15. 日志记录数据库行更改
- 16. 日期比较,以从MySQL数据库与此PHP函数更新记录
- 17. Oracle数据库特定日期
- 18. 存储和更新本地存储中的当前日期数据库记录
- 19. laravel 4的独特规则对更新数据库记录
- 20. 数据库记录的事务日志(批量更新)
- 21. 特定日期的数据
- 22. 特定日期的数据
- 23. 从特定日期获得记录
- 24. 从特定日期选择记录
- 25. PHP-SQL:日期不更新数据库
- 26. 更新日期数据库,VB
- 27. mysql数据库更新日期
- 28. 数据库日志记录
- 29. 休眠不更新数据库记录
- 30. 更新JobExecution数据库记录在afterJob()
是否可以在INSERT语句而不是查询中添加规则? – wemm
将规则放在查询中的重点是:查询在'CURDATE()'反映的特定时间运行。您可以将规则构建到计算列(最近的MySQL版本)或VIEW中。但不是插入。 –
它是一个很好的解决方案,以添加此“选择什么,的dueDate, IF(的dueDate> = CURDATE()+间隔1天,1,0)is_overdue FROM表......”在事件运行一次在一天11:59?如果没有,我到底需要添加此查询以便在到期日期时更新记录? – wemm