解决MySQL中分页查询时多页有重复数据,实际只有一条数据的问题
0 前言
有一个离奇的BUG,在查询时,第一页跟第二页有一个共同的数据。有的数据却不显示。
后来发现是在SQL排序时没用主键排序。
解决:使用主键排序
以下是我准备的举例,可以自己试试。
1 数据准备
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for goods
-- ----------------------------
DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods` (`id` int NOT NULL COMMENT '自增主键',`goods_uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商品uuid',`goods_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商品名',`warehousing_time` datetime NULL DEFAULT NULL COMMENT '入库时间',`in_goods` int NULL DEFAULT NULL COMMENT '是否在库',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;-- ----------------------------
-- Records of goods
-- ----------------------------
INSERT INTO `goods` VALUES (1, '43a0d013-142d-b1b1-d484-b7926967e9b0', '麻糕薯', '2023-07-18 08:00:00', 1);
INSERT INTO `goods` VALUES (2, 'e3dd0d6d-ae57-c307-a83d-011e5873605c', '哈密瓜', '2023-07-17 08:00:00', 1);
INSERT INTO `goods` VALUES (3, 'ff707c99-7098-80d3-9d68-e57b2b7c9a83', '鸡排骨', '2023-07-16 08:00:00', 1);
INSERT INTO `goods` VALUES (4, 'e47cc736-0934-9443-dcb2-cb25938681aa', '猪肉脯', '2023-07-15 08:00:00', 1);
INSERT INTO `goods` VALUES (5, '3400bbbe-0da4-7941-9289-26127d8de225', '牛肉干', '2023-07-14 08:00:00', 1);
INSERT INTO `goods` VALUES (6, '4505b5d1-a170-6878-2be1-c243250f56fe', '碧根果', '2023-07-13 08:00:00', 1);
INSERT INTO `goods` VALUES (7, '428865ac-b711-aa5c-8210-620b72e02a5a', '无花果', '2023-07-12 08:00:00', 1);
INSERT INTO `goods` VALUES (8, 'bdd57fcd-7d7c-8dbf-cc5b-77bfa7a82ef9', '开心果', '2023-07-11 08:00:00', 1);
INSERT INTO `goods` VALUES (9, '0c297d45-fbe4-eab7-6a09-c2b61349bca4', '杏仁', '2023-07-10 08:00:00', 1);
INSERT INTO `goods` VALUES (10, '6b7f1a48-8419-c342-e28f-644f745b8d29', '松仁', '2023-07-09 08:00:00', 1);
INSERT INTO `goods` VALUES (11, '16dc36bf-0d6e-3daf-f324-6361d3790d28', '棒棒糖', '2023-07-08 08:00:00', 1);
INSERT INTO `goods` VALUES (12, 'b4ee3289-12c9-1550-eff9-5a7a4a8b0340', '脆皮肠', '2023-07-07 08:00:00', 1);
INSERT INTO `goods` VALUES (13, '862ee658-e25a-f64b-35ce-c6c880963b38', '奥尔良', '2023-07-06 08:00:00', 1);
INSERT INTO `goods` VALUES (14, '86f7e5cd-e0c6-c459-af05-b0db5a7581eb', '汉堡', '2023-07-05 08:00:00', 1);
INSERT INTO `goods` VALUES (15, '71b64da5-bf72-1ba8-01f6-a362168d0a1e', '巧克力', '2023-07-04 08:00:00', 1);
INSERT INTO `goods` VALUES (16, 'c5c874dd-878d-5ecb-7d6f-49e6b7d55b91', '果冻', '2023-07-04 08:00:00', 1);
INSERT INTO `goods` VALUES (17, 'bac4c71c-dbaf-7d15-9058-f59d6dff04fb', '海苔', '2023-07-04 08:00:00', 1);
INSERT INTO `goods` VALUES (18, 'd8e49911-bba5-f6b2-259b-1d15f62c7a4d', '双皮奶', '2023-07-03 08:00:00', 1);
INSERT INTO `goods` VALUES (19, '9d3240a3-8614-c79a-7834-62f8a0bde671', '饼干', '2023-07-02 08:00:00', 1);
INSERT INTO `goods` VALUES (20, '8875c531-2ca4-80eb-aaa1-7f7f4a9666e7', '薯片', '2023-07-01 08:00:00', 1);SET FOREIGN_KEY_CHECKS = 1;
2 BUG复现
分页查询公式:分页查询–他的公式为(伪代码):[NOT] LIMIT (curPage-1)*pageSize,pageSize
执行SQL(每页4条,第1页):
SELECTid,goods_uuid,goods_name,warehousing_time,in_goods
FROMgoods
WHEREin_goods = 1
ORDER BYwarehousing_time LIMIT 0,4;
我们想得到的应该是时间从小到大,也就是
20 薯片
19 饼干
18 双皮奶
17 海苔
但是实际情况为:
20 薯片
19 饼干
18 双皮奶
16 果冻
执行SQL(每页4条,第2页):
SELECTid,goods_uuid,goods_name,warehousing_time,in_goods
FROMgoods
WHEREin_goods = 1
ORDER BYwarehousing_time LIMIT 4,4;
我们想得到的应该是时间从小到大,也就是
16 果冻
15 巧克力
14 汉堡
13 奥尔良
实际情况为:
16 果冻
17 海苔
14 汉堡
13 奥尔良
可以看到:第一页跟第二页都出现了id为16,name为果冻的数据。
并且id为15,name为巧克力的数据没有出现。
如果在页面上展示就会有问题。
3 解决
因为这个排序条件的数据是可以重复的,所以在查询的时候,MYSQL在排序重复数据的时候会导致数据位置不固定。
所以要使用主键去查询。
使用主键id查询,可以解决此问题。
相关文章:

解决MySQL中分页查询时多页有重复数据,实际只有一条数据的问题
0 前言 有一个离奇的BUG,在查询时,第一页跟第二页有一个共同的数据。有的数据却不显示。 后来发现是在SQL排序时没用主键排序。 解决:使用主键排序 以下是我准备的举例,可以自己试试。 1 数据准备 SET NAMES utf8mb4; SET FORE…...

【数据结构】时间复杂度---OJ练习题
目录 🌴时间复杂度练习 📌面试题--->消失的数字 题目描述 题目链接:面试题 17.04. 消失的数字 🌴解题思路 📌思路1: malloc函数用法 📌思路2: 📌思路3&…...

京东自动化功能之商品信息监控是否有库存
这里有两个参数,分别是area和skuids area是地区编码,我这里统计了全国各个区县的area编码,用户可以根据实际地址进行构造skuids是商品的信息ID填写好这两个商品之后,会显示两种状态,判断有货或者无货状态,详情如下图所示 简单编写下python代码,比如我们的地址是北京市…...

【SwitchyOmega】SwitchyOmega 安装及使用
文章目录 安装教程使用教程 安装教程 SwitchyOmega 谷歌商店下载链接:https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif?hlen-US 在谷歌商店搜索 SwitchyOmega, 选择 Proxy SwitchyOmega 点击 Add t…...

CentOS5678 repo源 地址 阿里云开源镜像站
CentOS5678 repo 地址 阿里云开源镜像站 https://mirrors.aliyun.com/repo/ CentOS-5.repo https://mirrors.aliyun.com/repo/Centos-5.repo [base] nameCentOS-$releasever - Base - mirrors.aliyun.com failovermethodpriority baseurlhttp://mirrors.aliyun.com/centos/$r…...
【LLM】Langchain使用[二](模型链)
文章目录 1. SimpleSequentialChain2. SequentialChain3. 路由链 Router Chain Reference 1. SimpleSequentialChain 场景:一个输入和一个输出 from langchain.chat_models import ChatOpenAI #导入OpenAI模型 from langchain.prompts import ChatPromptTempla…...
简单机器学习工程化过程
1、确认需求(构建问题) 我们需要做什么? 比如根据一些输入数据,预测某个值? 比如输入一些特征,判断这个是个什么动物? 这里我们要可以尝试分析一下,我们要处理的是个什么问题&…...

【MongoDB】SpringBoot整合MongoDB
【MongoDB】SpringBoot整合MongoDB 文章目录 【MongoDB】SpringBoot整合MongoDB0. 准备工作1. 集合操作1.1 创建集合1.2 删除集合 2. 相关注解3. 文档操作3.1 添加文档3.2 批量添加文档3.3 查询文档3.3.1 查询所有文档3.3.2 根据id查询3.3.3 等值查询3.3.4 范围查询3.3.5 and查…...
关于游戏引擎(godot)对齐音乐bpm的技术
引擎默认底层 1. _process(): 每秒钟调用60次(无限的) 数学 1. bpm1分钟节拍数量60s节拍数量 bpm120 60s120拍 2. 每拍子时间 60/bpm 3. 每个拍子触发周期所需要的帧数 每拍子时间*60(帧率) 这个是从帧数级别上对齐拍子的时间&#x…...

【Go】实现一个代理Kerberos环境部分组件控制台的Web服务
实现一个代理Kerberos环境部分组件控制台的Web服务 背景安全措施引入的问题SSO单点登录 过程整体设计路由反向代理登录会话组件代理YarnHbase 结果 背景 首先要说明下我们目前有部分集群的环境使用的是HDP-3.1.5.0的大数据集群,除了集成了一些自定义的服务以外&…...
Spring Security 6.x 系列【63】扩展篇之匿名认证
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Spring Security 版本 6.1.0 本系列Spring Authorization Server 版本 1.1.0 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 概述2. 配置3. Anonymo…...

供应链管理系统有哪些?
1万字干货分享,国内外 20款 供应链管理软件都给你讲的明明白白。如果你还不知道怎么选择,一定要翻到第三大段,这里我将会通过8年的软件产品选型经验告诉你,怎么样才能快速选到适合自己的软件工具。 (为防后续找不到&a…...

如何在PADS Logic中查找器件
PADS Logic提供类似于Windows的查找功能,可以进行器件的查找。 (1)在Logic设计界面中,将菜单显示中的“选择工具栏”进行打开,如图1所示,会弹出对应的“选择工具栏”的分栏菜单选项,如图2所示。…...

Android 生成pdf文件
Android 生成pdf文件 1.使用官方的方式 使用官方的方式也就是PdfDocument类的使用 1.1 基本使用 /**** 将tv内容写入到pdf文件*/RequiresApi(api Build.VERSION_CODES.KITKAT)private void newPdf() {// 创建一个PDF文本对象PdfDocument document new PdfDocument();//创建…...

Kafka 入门到起飞 - 生产者发送消息流程解析
生产者通过send()方法发送消息消息会经过拦截器->序列化器->分区器 进行加工然后将消息存在缓冲区当缓冲区中消息达到条件会按批次发送到broker对应分区上broker将接收到的消息进行刷盘持久化消息处理broker会返回给producer响应落盘成功返回元数据…...

基于单片机智能台灯坐姿矫正器视力保护器的设计与实现
功能介绍 以51单片机作为主控系统;LCD1602液晶显示当前当前光线强度、台灯灯光强度、当前时间、坐姿距离等;按键设置当前时间,闹钟、提醒时间、坐姿最小距离;通过超声波检测坐姿,当坐姿不正容易对眼睛和身体腰部等造成…...

欧姆龙以太网模块如何设置ip连接 Kepware opc步骤
在数字化和自动化的今天,PLC在工业控制领域的作用日益重要。然而,PLC通讯口的有限资源成为了困扰工程师们的问题。为了解决这一问题,捷米特推出了JM-ETH-CP转以太网模块,让即插即用的以太网通讯成为可能,不仅有效利用了…...

PLEX如何搭建个人局域网的视频网站
Plex是一款功能非常强大的影音媒体管理系统,最大的优势是多平台支持和界面优美,几乎可以在所有的平台上安装plex服务器和客户端,让你可以随时随地享受存储在家中的电影、照片、音乐,并且可以实现观看记录无缝衔接,手机…...

java学习02
一、基本数据类型 Java有两大数据类型,内置数据类型和引用数据类型。 内置数据类型 Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。 byte࿱…...
libcurl库使用实例
libcurl libcurl是一个功能强大的跨平台网络传输库,支持多种协议,包括HTTP、FTP、SMTP等,同时提供了易于使用的API。 安装 ubuntu18.04平台安装 sudo apt-get install libcurl4-openssl-dev实例 这个示例使用libcurl库发送一个简单的HTTP …...
优化电脑的磁盘和驱动器提高电脑性能和延长硬盘寿命?
磁盘优化 磁盘清理: 使用系统自带的磁盘清理工具(如Windows的“磁盘清理”)删除不必要的文件。清空回收站。删除临时文件和缓存。 磁盘碎片整理(针对机械硬盘): 定期进行磁盘碎片整理,以提高文…...

Android 本地存储路径说明
一、背景 作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过: File sdCard Environment.getExternalStorageDirectory(); 获取SD卡根目录,然后自定义文件/文件名进行文件存储.这样做法的结果就是,当手机安装了大量的app时,SD卡根目录会…...
C语言的全称:(25/6/6)
C语言,全称为"C Programming Language"(C程序设计语言),是一种广泛使用的计算机编程语言。它是由Dennis Ritchie于1972年在贝尔实验室设计的,继承了B语言的许多思想,并加入了数据类型的概念及其他…...
模板方法模式:优雅封装不变,灵活扩展可变
引言:代码复用与扩展的艺术 在日常开发中,我们常遇到核心流程固定但某些步骤需差异化的场景。例如: 数据库操作的通用流程(连接→执行→关闭)HTTP请求的固定步骤(构建请求→发送→解析响应)报表生成的骨架(数据获取→格式转换→输出)模板方法模式正是为解决这类问题而…...
Thinkphp6软删除
方法一 从控制器层直接操作 删除 此操作不会直接删除数据 而是在delete_time字段更新删除时间 ->useSoftDelete(delete_time,get_datetime())->delete() 查询 这里的数据库字段需要设置为默认NULL 查询的时候仅查询未更新删除时间的数据 ->whereNull("dele…...
Java常用的判空方法
文章目录 Java常用的判空方法JDK 自带的判空方法1. 使用 或 ! 运算符2. 使用 equals 方法3. Objects.isNull / Objects.nonNull4. Objects.equals4. JDK8 中的 Optional 第三方工具包1. Apache Commons Lang32. Google Guava3. Lombok 注解4. Vavr(函数式风格&…...

API管理是什么?API自动化测试怎么搭建?
目录 一、API管理是什么 (一)API管理的定义 (二)API管理的重要性 二、API管理的主要内容 (一)API设计 1. 遵循标准规范 2. 考虑可扩展性 3. 保证接口的易用性 (二)API开发 …...

Matlab回归预测大合集又更新啦!新增2种高斯过程回归预测模型,已更新41个模型!性价比拉满!
Matlab回归预测大合集又更新啦!新增2种高斯过程回归预测模型,已更新41个模型!性价比拉满! 目录 Matlab回归预测大合集又更新啦!新增2种高斯过程回归预测模型,已更新41个模型!性价比拉满…...

PPT转图片拼贴工具 v3.0
软件介绍 这个软件就是将PPT文件转换为图片并且拼接起来。 这个代码支持导入单个文件也支持导入文件夹 但是目前还没有解决可视化界面问题。 效果展示 软件源码 import os import re import win32com.client from PIL import Image from typing import List, Uniondef con…...

LINUX 66 FTP 2 ;FTP被动模式;FTP客户服务系统
19. 在vim中将所有 abc 替换为 def,在底行模式下执行©?D A、s/abc/def B、s/abc/def/g C、%s/abc/def D、%s/abc/def/g FTP连接 用户名应该填什么 [rootcode ~]# grep -v ^# /etc/vsftpd/vsftpd.conf anonymous_enableNO local_enab…...