首页 > 解决方案 > SQL 在一段时间后重新初始化值

问题描述

  1. 概括

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

  1. 描述

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

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

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

  1. 概括

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

标签: sqldatabaseinitialization

解决方案


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

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 分钟内没有启动进程时启动该进程。

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


推荐阅读