如何定期更新MySQL中的状态

时间:2016-08-10 16:18:44

标签: mysql

我正在创建一个 todo 应用。我有一个接收1, 2 or 3 (pending, overdue, completed)的状态列。

每当我创建任务时,它都会设置为pending。用户可以将其标记为完成。但有没有办法自动将其更新为overdue,以防它未完成且due_date小于今天?

2 个答案:

答案 0 :(得分:2)

您可以使用MySQL事件计划程序。

<强>先决条件:

你的mysql服务器必须有event_scheduler ON

检查事件调度程序是ON还是OFF

SELECT @@event_scheduler;

要转动event_scheduler ON,请运行以下查询:

SET GLOBAL event_scheduler = ON;

注意:如果重新启动MYSQL Server,则将重置事件调度程序状态,除非在配置文件中写入以下内容。

对于Windows: my.ini 文件中的,请在[mysqld]部分

下写下
[mysqld]
event_scheduler=on

对于Linux: my.cnf 文件

[mysqld]
event_scheduler=on

<强>事件:

CREATE 
EVENT `updateStatusEvent`
ON SCHEDULE EVERY 1 DAY STARTS '2016-08-11 00:00:00'
ON COMPLETION NOT PRESERVE
ENABLE
DO
UPDATE your_table SET status_column = 2 WHERE your_time_column < CURDATE(); 

该活动将首次在'2016-08-11 00:00:00'开始 之后,将每隔1天安排一次事件,并更新相应数据的状态。

答案 1 :(得分:1)

如果您的MySQL版本支持它(版本&gt; = 5.1.6,如果我没有弄错的话),您可以使用Event Scheduler

CREATE EVENT check_overdue ON SCHEDULE EVERY 2 HOUR DO
    UPDATE mytable SET status = 2 WHERE due_date < NOW();

另一种选择是设置一个调用PHP或其他在线脚本的Cron作业。

无论如何,您必须定期查询任何逾期事件并将其标记为逾期。