如何在没有其他语言的情况下更新特定行SQL?

时间:2016-11-03 21:34:42

标签: mysql sql

我是一名CS学生,无法理解这个SQL问题。我已经在下面进行了研究,但仍然完全不理解..

假设您有一个像这样的任务表。 (真正的桌子可能有 成千上万的行。)

mysql> select * from task; 
-------------------------------------------------
| id | name | state   | started           | pid | 
|------------------------------------------------
|  1 | sccl | ready   | 20120917 16:38:23 |   0 | 
|  2 | ela  | ready   | 20120917 16:38:31 |   0 | 
|  3 | ccpl | done    | 20120917 16:38:36 |   0 | 
|  4 | spl  | ready   | 20120917 16:38:39 |   0 | 
|  5 | uwec | pulling | 20120917 16:38:58 |   0 | 
|  6 | ut   | ready   | 20120917 16:39:03 |   0 | 
|  7 | van  | ready   | 20120917 16:41:32 |   0 | 
|  8 | art  | ready   | 20120917 16:59:03 |   0 | 
|  9 | bro  | ready   | 20120917 16:59:17 |   0 | 
-------------------------------------------------

我们需要为处于“就绪”状态的每个任务运行计算密集型流程。

当计算开始时(当分配任务时),该过程应该将状态切换为“计算”,然后在完成时“计算”。

每次计算需要560分钟。

同时运行(最多)3个计算过程,直到所有准备就绪 任务已经处理完毕。

编写SQL语句来管理计算。

DECLARE @CCOUNT INT;
DECLARE @CAP INT;
DECLARE #SPACE INT;

SET @CCOUNT = COUNT(state) FROM task WHERE state = ‘computing’;
SET @CAP = 3;
SET @SPACE = @CAP - @CCOUNT

SELECT * FROM task WHERE state = “ready” limit @SPACE
UPDATE…(Update state to “computing”)
UPDATE…(Update state to “computing”)

问题

我知道我无法传递一个变量来表示有多少计算'那些进程没有涉及Java或PHP等其他语言。

我需要编写SQL语句,基本上概述了不使用其他语言的情况。

我想要超越并首先检查是否有其他进程与状态'计算'在我们获取某些任务之前正在运行但是如何存储它们?

这可能有点令人困惑,但基本上我需要用纯粹的SQL语句回答这个问题。

如果你能帮到那就太棒了!

0 个答案:

没有答案