[英]How to prevent selection of the row while it is being handled?
我有带有列is_locked
MySQL(InnoDB)表,该表显示记录的当前状态(现在是由系统处理还是不由系统处理)。
另一方面,我有许多执行SELECT * FROM table_name WHERE is_locked = 0
节点,然后处理从该表获得的行。
在我的代码中,我这样做:
SELECT * FROM table_name WHERE is_locked = 0
) UPDATE table_name SET is_locked = 1 WHERE id = <id>
锁定行 问题:节点运行非常快,所有节点都可能获得同一行,然后它们首先更新该行并将is_locked
设置为1
我发现了表的锁定,但我认为这不是正确的方法。 谁能告诉我如何处理这种情况?
我建议两件事:
将选择范围限制为一个,因为您要处理并发问题,因此每次迭代最好取较小的“位数”
使用事务,这使您可以启动事务,获取记录,将其锁定然后提交事务。 这将迫使mysql强制执行您的并发锁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.