如果mysql/mariadb中的日期超过1小时,是否更改列值



假设我有下面的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;

相关内容

最新更新