我使用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添加时,它工作正常,
我怎么能理解会发生什么?