MySQL LIMIT + order by limit n,m 和 limit n的小坑

背景

  • 场景:数据刚刚初始化,order by的字段值一样,想获取列表的第一条数据,但是发现limit后不是第一条。

看数据

在这里插入图片描述

  • 此时有3条数,id分别为38 、39、40。

limit n

在这里插入图片描述

  • 此时查询到的数据是id为40的。

limit n,m

在这里插入图片描述

问题

注意:问题发生的场景 order by的两个值是相等的。然后limit

  • 其实我要的是id为39那条数据,但我取一条的时候总是返回了id为40的数据。
  • 这个问题是在排序字段数据内容相同的情况下出现,而且不稳定。
  • 有可能下一页还会看到前一页的数据。

解决方案

第一种:增加排序字段索引,多个字段增加联合索引

在这里插入图片描述

  • 增加索引
    在这里插入图片描述

  • 查询结果
    在这里插入图片描述

第二种:排序增加一个唯一字段,例如id,获得稳定排序

在这里插入图片描述

在这里插入图片描述

第三种方式:代码获取第一条数据

  • 这是我目前使用的方式,因为我只需要第一条诉,我查询了列表(取消了limit),然后Java代码获取列表的第一条。

posted on   愤怒的苹果ext  阅读(55)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示