今天测试的时候遇到个bug:分页查询出来的数据是乱序的(第一页查过的数据也会跑第二页去)

将mybatis 日志中的sql ,拿出来单独执行,发现结果是正确,为什么mybatis查出来的数据是乱序的?

初步分析可能是排序列上的重复值引起的,但是我的sql中并没有排序字段。

经过尝试有两种解决办法:

1、在sql后面加上order by 主键,分页查询正确。

2、这个不算解决办法,数据库表中的主键被搞掉了,把主键加上分页正确

网上查询资料发现这么一句话:

oracle是按块进行读取数据的,如果数据按顺序存储,则可能使读取出来的数据是按顺序的,给用户误解为默认排序。事实上,oracle没有进行任何排序操作,如果sql没有要求排序,oracle会顺序的从数据块中读取符合条件的数据返回到客户端。所以在没有使用排序sql的时候,分页返回的数据可能是按顺序的,也可能是杂乱无章的,这都取决与数据的存储位置。在oracle分页查询过程中,如果数据的物理位置发生了改变,就可能会引起分页数据重复的现象。

对于不同的oracle版本,处理这种情况的机制是不一样的。在9中会根据rowid排序,但是在10.2种引入了一种类似堆排序的方法处理这种情况。之所以order by 后加索引能解决,是因为即使有重复值,也可以根据索引进行区分。

但是,在有排序条件的时候,仍然会出现数据重复的现象,这是为什么呢? 
通过了解oracle的排序机理就会明白,出现这种情况的原因是因为排序列值的不唯一性。 Oracle这里使用的排序算法不具有稳定性,
也就是说,对于键值相等的数据,这种算法完成排序后,不保证这些键值相等的数据保持排序前的顺序。

解决的方法是在后边增加一个唯一性列,比如主键。
所以解决方法如下(两个条件必须同时满足): 
 1.sql语句中需要有排序条件。 
 2.排序条件如果没有唯一性,那么必须在后边跟上一个唯一性的条件,比如主键。

转载于:https://www.cnblogs.com/magic101/p/10064947.html

mybatis分页数据重复相关推荐

  1. 如何解决MySQL order by limit语句的分页数据重复问题?

    文章来源:https://www.jianshu.com/p/544c319fd838 0 问题描述 在MySQL中我们通常会采用limit来进行翻页查询,比如limit(0,10)表示列出第一页的1 ...

  2. 关于 Oracle分页数据重复的问题

    2019独角兽企业重金招聘Python工程师标准>>> 先说问题吧.最近在测试一个新的模块,发现列表数据的前三页数据竟然是一样的.第一反应是 pageNo 的问题,debug一看,p ...

  3. mysql limit分页_MySQL order by limit 分页数据重复问题

    黑客技术点击右侧关注,了解黑客的世界! Linux编程点击右侧关注,免费入门到精通! 程序员严选甄选正品好物,程序员生活指南! 作者丨猿码道 https://www.jianshu.com/p/544 ...

  4. postgresql分页用法_postgresql分页数据重复问题的深入理解

    问题背景 许多开发和测试人员都可能遇到过列表的数据翻下一页的时候显示了上一页的数据,也就是翻页会有重复的数据. 如何处理? 这个问题出现的原因是因为选择的排序字段有重复,常见的处理办法就是排序的时候加 ...

  5. oracle分页数据,oracle 分页 数据重复 数据不正确

    oracle 一般分页的写法为 select a.id,a.title,rownum as rn,a.create_time from (select a.* from temp a order by ...

  6. 小心避坑:MySQL分页时使用 limit+order by 会出现数据重复问题

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:猿码道 www.jianshu.com/p/544c319fd838 0 问题描述 ...

  7. mysql三表查询数据重复_解决mybatis三表连接查询数据重复的问题

    此问题的产生,主要是数据库的字段名一样导致 三张表 DOCTOR JOB OBJECT 有问题的查询语句和查询结果是: SELECT d.*,j.*,o.* from (select d.*,rown ...

  8. layui分页limit不显示_小心避坑:MySQL分页时使用 limit+order by 会出现数据重复问题...

    20大进阶架构专题每日送达 来源:www.jianshu.com/p/544c319fd838 进入主题前先插一下,当当优惠码福利来一波!当当全场自营图书5折,用优惠码:J2JYFK(长按复制),满2 ...

  9. mysql scrapy 重复数据_小心避坑:MySQL分页时使用 limit+order by 会出现数据重复问题...

    作者:猿码道http://www.jianshu.com/p/544c319fd838 0 问题描述 在MySQL中我们通常会采用limit来进行翻页查询,比如limit(0,10)表示列出第一页的1 ...

最新文章

  1. 2021年春季学期-信号与系统-第四次作业参考答案-第十小题
  2. 哪个版本python适用于windows-何种版本的Python适合您
  3. 创建一个提供数据 API 的 Node.js 网站
  4. Linux无法打开sda硬盘,linux – 无法挂载’/ dev / sda’
  5. 获取远程计算机动态ip,c# - 获取远程主机的IP地址
  6. java 任意代码执行漏洞_php-fpm在nginx特定环境下的任意代码执行漏洞(CVE-2019-11043)...
  7. python-面向对向-实例方法的继承-多继承父类中的super与子类实例对象的关系
  8. java io类filereader,39. Java IO: FileReader
  9. 2018程序员必备的4大网站推荐(代码、编程、SQL等)
  10. 火狐翻译插件_阅读外文必备,浏览器实用的翻译插件推荐
  11. linux 驱动 printk 输出变量格式
  12. springboot使用j2cache
  13. SuiteCRM Beans(model)
  14. 用户画像第四章(企业级360°用户画像_标签开发_挖掘标签_ 客户价值模型-RFM)
  15. 公众号迁移开通留言功能
  16. e480win7显卡驱动_e480安装了windows7显卡驱动装不上
  17. so库生成和用法汇总
  18. 【vconsole】vconsole网页调试
  19. Xshell连接centOS7
  20. uniapp 仿网易云音乐播放器 微信小程序

热门文章

  1. C#关闭子窗口而不释放子窗口对象的问题解决
  2. 最近用的几个sql语句
  3. button捕捉回车键
  4. Android Activity中状态保存机制
  5. NUS 联合 Sea AI Lab 发表 Multi-view Pose Transformer,完全端到端学习,超强可扩展性...
  6. 总奖金100万!2021SEED江苏大数据开发与应用大赛(华录杯)正式开赛!
  7. 自动驾驶场景解析:图像分割开发实战
  8. 免费使用3天!52CV GPU云大促,疫情期间做深度学习的首选!
  9. 利用边缘监督信息加速Mask R-CNN实例分割训练
  10. Python应该怎么去练习和使用