数据库新增了数据,但是查询不到

在执行批量插入2000条数据后立即查询数据库未能找到数据,问题源于MySQL的默认隔离级别‘可重复读’,这使得在事务未提交时无法读到新数据。解决方案包括调整事务隔离级别、延迟查询或优化代码逻辑,避免插入与查询在同一事务中进行。
摘要由CSDN通过智能技术生成

问题

当我们再执行插入操作的时候,马上去查询数据库导致没有查询到数据(我这边插入的2000条数据批量插入)

原因

究其原因,是 数据库事务在作怪,也怪我当初学习的时候只是背了概念,没有深刻的去理解它。当时代码上面有有一个注解@Transactional,看了它的源码,不声明隔离级别时,它是使用数据库默认的隔离级别。我们知道mysql默认的隔离级别时“可重复读” (读未提交——读已提交——可重复读——串行化)。所以就清楚了,当收到第三方的MQ之后,由于之前的事务没有提交,所以当然查不到数据了。

我的这个问题就是事务未提交,但是mysql事务隔离级别是可重复读(那么就是读不到未提交的事务)当我们数据量比较大的时候比较容易出现这个请求,因为事务比较大

解决方案

  1. 改事务隔离级别为读未提交(不太科学)
  2. 随机睡眠一会儿(不需要睡太久,一般批量插入2000条比较合适,然后时间大概就在几百毫秒)在这里插入图片描述
  3. 优化代码逻辑,为啥插入了还要读取(业务控制,实在控制不了方法2比较可取)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值