您的位置:首页 > 数据库 > MySQL

mysql排序不稳定,分页查询数据有重复和遗漏

2017-07-19 15:59 531 查看
现象:业务方在系统添加用户时,提示 用户A已经存在,但是界面中没有。
解决过程:数据库中看得到。

查看sql语句,在线上sql工具查询,但是不支持分页,不方便复现问题。
select * from user where yn = 1 order by roleType 是有的。
那为啥 select * from user where yn =1 order by roleType limit 0,10;
数据就出现问题呢?

看了很久,也没有发现问题。
本地数据量太少,又懒,没有把线上用户数据导入到本地测试表。

把sql发给了dba,帮忙分析了下。

很可能的原因:roleType不是主键,多个用户的 角色可能是一致的。最终mysql分页时,取数据 不稳定。

这里有个奇怪的问题,在线上和本地,单独执行不带limit语句的查询结果是稳定的。

难道只有在limit分页的时候,才会不稳定?

解决办法是,增加id desc 第2个排序条件。
当roltType相同的时候,再按照 id 降序,确保顺序是唯一的。
------------------------------------------------------------------------
第1页和第2页存在重复的用户,还漏掉了部分用户。

第1次遇到。

平时看sql,感觉也没啥。
遇到了问题,猛然一惊"还有这种操作"。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: