update后select,数据没有更新,插入一条数据后再select,最新数据是之前更新的那条数据

博客描述了一次遇到的MySQL更新数据后无法立即查询到的问题,经过排查发现问题是由于使用分页查询时,limit参数设置不当导致。在更新与查询之间存在时间间隔,且使用了MyBatis一级缓存,但事务和缓存都不是问题原因。最终通过调整分页参数解决了问题。
摘要由CSDN通过智能技术生成

一、问题现场

这里对原有的业务逻辑进行简化,简化后的代码实现如下:

// 更新
templateMapper.update(template);
//查询
templateMapper.getTemplateList(pageNo, pageSize);
//sql代码
 select * from template
        where status = "enable"
        order by create_time desc limit #{pageNo},#{pageSize};

二、定位问题

  1. 定位问题
    遇到问题的第一时间是去查看了一下数据库是不是更新出了问题,但是查询之后发现数据确实是更新了
    接着再去查看了一下当时机器的网络问题,并没有报数据库连接异常等问题。
    数据库异常问题和网络抖动问题基本可以排除;
  2. 复现问题
    每次新增操作后都能复现查不到最新一条数据的问题,等多久都一样;
  3. 上网找解决方案
    网上类似更新后查询不到数据的原因大致有以下3类:
    入参有空格导致;
    读取本地缓存导致;
    事务隔离性导致;
  4. 结合自身场景排查
    我除了分页参数以外根本没有入参,不可能是入参导致,第一项排除;
    本地缓存配置:MyBatis一级缓存,不存在读取不到新增数据的情况;
    update和select在两个方法中实现,中间间隔时间很久,所以也不存在事务没
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值