我有一项服务,许多人将并行访问数据库。每次,每个人都会要求提供50条尚未处理的记录。例如,mysql - 返回其他人未更新的行
select * from service where update = -1 limit 50;
然后手动更新它们(这意味着它们将被分配不同的值)。 我想要做的是将50个不同的记录返回给每个人进行更新。什么是实现它的正确方法?
我已经试过
SELECT ... LIMIT 50 FOR UPDATE;
但似乎它会阻止整个数据库。
我有一项服务,许多人将并行访问数据库。每次,每个人都会要求提供50条尚未处理的记录。例如,mysql - 返回其他人未更新的行
select * from service where update = -1 limit 50;
然后手动更新它们(这意味着它们将被分配不同的值)。 我想要做的是将50个不同的记录返回给每个人进行更新。什么是实现它的正确方法?
我已经试过
SELECT ... LIMIT 50 FOR UPDATE;
但似乎它会阻止整个数据库。
请勿SELECT ... FOR UPDATE
,而是有一个专门用于声明的列。这是DEFAULT NULL
,但您将使用一些随机或唯一的标识符来填充它。一个UUID或其他disctinct值将正常工作。
例如:
UPDATE service SET claimed=? WHERE claimed IS NULL LIMIT 50
,请注意修改的行数的响应。如果它大于零,那么你声称:
SELECT * FROM service WHERE claimed=?
这将提取以前声称的值。
'update'是一个保留关键字,所以在将它用作列名时可能需要将其转义。 – tadman
@tadman我只是举个例子。不是真实的情况。 – cssmlulu
嗯,我们得到的就是这个例子 – Strawberry