MySQL 中 order by .. limit .. 出现的不同页中数据重复出现的问题

发布时间 2023-06-19 14:00:32作者: 拾月凄辰

MySQL 版本

MySQL 5.7.28 和 8.0.20 这两个版本都出现了这个问题。

相关的表和数据

建表语句:

CREATE TABLE `test` (
  `id` int(11) NOT NULL,
  `name` varchar(50) NOT NULL,
  `score` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

表中的数据:
image

问题描述

只使用order by, 不使用limit时候,查询的语句:

SELECT * FROM test
ORDER BY score ASC

查询结果:
image

下面我们按照 score 升序,每页3条数据,来获取数据。
下面的sql依次为第1页、第2页、第3页、第4页、第5页的数据,如下:

查询第1页的语句:

SELECT * FROM test
ORDER BY score ASC
LIMIT 0,3

第1页结果:
image

查询第2页的语句:

SELECT * FROM test
ORDER BY score ASC
LIMIT 3,3

第2页结果:
image

查询第3页的语句:

SELECT * FROM test
ORDER BY score ASC
LIMIT 6,3

第3页结果:
image

查询第4页的语句:

SELECT * FROM test
ORDER BY score ASC
LIMIT 3,3

第4页结果:
image