我的问题类似于: 忽略 MySQL 查询中的锁定行, 除了我已经实现了一个接近于接受答案中建议的逻辑。我的问题是如何最初设置进程ID。所有服务器都运行类似的查询(代码在 ruby on rails 中,但生成的 mysql 查询是):
UPDATE (some_table) SET process_id=(some process_id) WHERE (some condition on row_1) AND process_id is null ORDER BY (row_1) LIMIT 100
现在发生的情况是所有进程都尝试更新相同的行,它们被锁定并且它们超时等待锁定。我希望服务器忽略被锁定的行(因为在锁定被释放后 process_id 将不再为空,所以这里没有必要锁定)。我可以尝试随机化要更新的一批记录,但问题是我想根据上面的查询中的 row_1 优先考虑更新。所以我的问题是,mysql中有没有办法检查记录是否被锁定并忽略它?