mysql mybatis 分页数据重复

线上系统出现用户列表翻页显示重复数据的问题,经过分析发现是orderby与limit结合使用时,由于数据重复导致结果错乱。解决方案是在SQL中添加唯一列id进行排序。问题在模拟环境中复现并修复,经线上验证已解决。
摘要由CSDN通过智能技术生成

1. 问题描述

bug发生在一个即将下班的周五,产品经理发来了钉钉消息,一个线上跑了很久的系统,用户列表上下翻页的时候有两条一模一样的数据。当时我的第一反应是不可能啊,这系统都跑多久了,最近也没人改代码,怎么会有问题呢。不过产品经理说有bug,咱也不能忽视对吧,有bug那就看看呗,争取周五早点下班。

2. 问题重现及解决(模拟的线上环境)

2.1 环境

mysql 8.0 、pageHelper分页插件

2.2 问题现象

两次结果出现同一条 id 为 53的数据截图如下:
第一页截图第二页截图

2.3 问题分析

sql语句
查看sql 语句如上,一个简单sql 会出什么问题呢? 看来看去好像也只有 order by 可能会出问题了,于是查询资料得知:
原因: order by 和 limit 一起使用的时候,如果order by 的列有重复值则返回的顺序结果不一定,会出现错乱的情况,如果要保证顺序唯一要加上唯一的列,如id,那么问题知道出在哪了,就好解决了,加个id排序就行了如下是 改过的sql
修改后的截图
问题解决。发布线上验证,毫无问题,时间还好 下班下班。

说明: 最开始本想随便造几条数据的,后来发现一二十条数据的时候,问题不能复现,于是造了五六十条才复现出问题。此问题属于mysql问题,直接控制台执行sql 也会出现次问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值