1. 问题描述
bug发生在一个即将下班的周五,产品经理发来了钉钉消息,一个线上跑了很久的系统,用户列表上下翻页的时候有两条一模一样的数据。当时我的第一反应是不可能啊,这系统都跑多久了,最近也没人改代码,怎么会有问题呢。不过产品经理说有bug,咱也不能忽视对吧,有bug那就看看呗,争取周五早点下班。
2. 问题重现及解决(模拟的线上环境)
2.1 环境
mysql 8.0 、pageHelper分页插件
2.2 问题现象
两次结果出现同一条 id 为 53的数据截图如下:
2.3 问题分析
查看sql 语句如上,一个简单sql 会出什么问题呢? 看来看去好像也只有 order by 可能会出问题了,于是查询资料得知:
原因: order by 和 limit 一起使用的时候,如果order by 的列有重复值则返回的顺序结果不一定,会出现错乱的情况,如果要保证顺序唯一要加上唯一的列,如id,那么问题知道出在哪了,就好解决了,加个id排序就行了如下是 改过的sql
问题解决。发布线上验证,毫无问题,时间还好 下班下班。
说明: 最开始本想随便造几条数据的,后来发现一二十条数据的时候,问题不能复现,于是造了五六十条才复现出问题。此问题属于mysql问题,直接控制台执行sql 也会出现次问题。