mysql同时选择和更新

时间:2016-02-18 13:28:55

标签: mysql

我有一个数据库,它为我的应用程序保存测试用例,我想同时运行几个进程。现在它看起来像这样

SELECT * FROM tests WHERE status = 0 LIMIT 20;

我希望将所有这20条记录的状态更改为“2”(正在处理),以避免另一个进程采用相同数据进行测试的情况。是否可以在一个查询中使用?

修改
我想同时运行20个进程,所有这些进程都是相同的,但我不希望他们使用相同的数据 - 这就是我最初想要的原因 - >从状态= 0的数据库中获取20条记录,同时为所有20条记录设置状态= 2 - >处理它们,为这个20 - >的每一条记录设置适当的状态。回到开头

通过这种方式,当两个不同的进程从数据库中获取相同的数据时,我将避免这种情况

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

UPDATE 
    tests t1,
    (SELECT `id` FROM tests WHERE `status` = 0 LIMIT 0,20) t2
SET t1.`status` = 2
WHERE
    t1.`id` = t2.`id`