首页 > 解决方案 > mysql RC多线程先搜索后删除,但有些搜索只返回1行

问题描述

我使用mysql处理一些数据使用多线程,首先我搜索数据使用id范围,如:

select id 
from xxx 
where id between 1 and 1000 
  and accountant_time = '2021-05-31 00:00:00' 
  and enter_accounts_state = 1 
  and enter_ce_state = 2 
  and ebs_summary_state = 2 
  and is_del = 0 

结果 id 像 '1, 2, 3, 4, 5, ... 1001'。

其次,我将从下面的 sql 表中删除这些带有附加条件 confirm_state 的匹配数据:

DELETE 
FROM xxx 
WHERE confirm_state = 3 
  AND id IN ( 1, 2, 3, 4, ..., 1001);

所有的id范围没有交集。</p>

我发现有些线程需要返回1001行,但只返回第一行,我尝试了几次使用相同的代码和相同的数据,但左边的数据也不相同,共同的特点是只返回需要的批次计数的第一行全部返回。</p>

当我 for update为select sql添加时,它工作正常,

我怎么能理解会发生什么?

标签: mysqlrcselect-for-update

解决方案


推荐阅读