SQL 一段时间后重新初始化值

SQL re-initialize value after some time

  1. 总结

我想阻止用户同时启动两个进程。 基本上我想更新 SQL 数据库的值,该值会在一段时间后自动“重新初始化”。

  1. 描述

此处,操作触发一些计算(在服务器上执行),结果显示在网页的图表上。所有点都显示在图表上大约需要 10 分钟。

可能的操作和限制:我能做的是为每个用户分配一个值(比如 process)。 当用户开始启动进程时,我检查 process。 如果 process 为 0,则我允许用户启动,然后在 SQL 数据库上将 process 更新为 1。在过程结束时(比如 10 分钟后),我将 process 设置为 0.

这工作正常,但如果用户在进程结束前(10 分钟前)关闭页面,则值 process 保持为 1,因此用户无法启动一个新的过程。

  1. 总结

    如何在 SQL 数据库上更新一段时间后自动“重新初始化”的值?

一种选择是也存储用户启动操作的时间。然后,您可以在需要新流程时使用该信息:

create table users (
    user_id int primary key,
    ... -- other columns as needed
    in_progress int,
    launched_at datetime
);

当用户想要启动一个进程时,您 运行 以下查询:

update users
set in_progress = 1, launched_at = now()
where 
    in_progress = 0
    or (launched_at is null or launched_at < now() - interval 10 minute)

这允许用户仅在没有任何进程在进行中或者在过去 10 分钟内没有启动任何进程的情况下启动进程。

如果查询不影响任何行,那么您知道某些条件不满足 - 所以基本上不允许用户现在启动新进程。