一尘不染

忽略MySQL查询中的锁定行

mysql

我有一个由不同线程同时读取的表。

每个线程必须选择100行,在每行上执行一些任务(与数据库无关),然后它们必须从表中删除选定的行。

使用此查询选择行:

SELECT id FROM table_name FOR UPDATE;

我的问题是:如何忽略(或跳过)以前使用MySQL中的select语句锁定的行?


阅读 254

收藏
2020-05-17

共1个答案

一尘不染

我通常创建一个默认为NULL的process_id列,然后让每个线程使用唯一的标识符来执行以下操作:

UPDATE table_name SET process_id = #{process.id} WHERE process_id IS NULL LIMIT 100;

SELECT id FROM table_name WHERE process_id = #{process.id} FOR UPDATE;

这样可以确保每个线程从表中选择唯一的行集。

希望这可以帮助。

2020-05-17