假设我有下面的SQL表:
+------------+---------------------+
| Status | Date |
------------+---------------------+
| Available | 2020-12-19 18:03:42 |
+------------+---------------------+
基本上,我希望MySQL每3分钟检查一次Date列,如果Date值超过1小时,我希望将Status
更改为Offline
。我们能在SQL中实现这样的功能吗?或者,如果Django-python中有更简单的解决方案,我也愿意使用它。
我建议使用以下视图进行此操作:
create view v_t as
select (case when date + interval 1 hour < current_timestamp then 'Offline'
else status
end) as status,
. . . -- whatever other columns you have here
from t;
视图具有以下优点:
- 该值会自动更正。视图的用户将在一小时后看到
'Offline'
状态 - 更改数据没有开销
- 即使整个系统出现故障,然后又重新启动,这也能起作用
你实际上可以在空闲时设置状态——比如说一份每天或每周在休息时间运行一次的工作。
您可以在一条语句中检查和更新状态:
update mytable set status = 'Offline'
where date < current_timestamp - interval 1 hour;
现在,我们需要安排查询定期执行。为此,通常会使用MySQL的事件调度程序:
create event event_update_status
on schedule every 3 minute
starts current_timestamp
ends current_timestamp + interval 1 day
do
update mytable set status = 'Offline'
where date < current_timestamp - interval 1 hour;