sql - 随机选择一行并更新它

时间:2014-04-05 14:01:57

标签: mysql sql

我的表格不是太大了,所以我认为获得这样一个随机行的方法是可以接受的:

SELECT * FROM table ORDER BY RAND() LIMIT 1;

但是,我真正需要做的是在任何其他连接到达之前,在同一步骤中更新随机找到的行。这是我的尝试,无限期地运行,我必须杀死:

BEGIN;
SET @update_id := 0;
UPDATE jobs SET started = NOW(), id = (SELECT @update_id := id)
WHERE id = (SELECT jtemp.id FROM (SELECT * FROM jobs) as jtemp WHERE jtemp.started IS NULL ORDER BY RAND() LIMIT 1);
SELECT @update_id;
COMMIT;

@update_id因为我需要将实际选择的行返回给客户端以供日后更新。

有更好的方法吗?我不认为随机行选择是这里的瓶颈,但我不确定。

1 个答案:

答案 0 :(得分:-1)

这样的事情应该有效。

update yourtable
set field1 = value1
etc
where id = 
(select id
from yourtable
order by rand()
limit 1)