问题描述:
查询数据分页时,查询的数据有时候前一页和后一页的数据会有重复问题
当SQL中ORDER BY待排序字段值相同时,系统对数据的排序可能变得随机,即一会儿这条数据在前面,一会儿这条数据在后面了 ,所以当翻页的时候我们很容易便看到了重复的数据。
SQL中ORDER BY相同值结果乱序的具体原因
查阅了Goole和相关资料,大概总结了这种情况的原因。其实发生这种现象是“故意”设计的。
如果没有指定ORDER BY语句,则 MySQL (或任何RDBMS)不保证以特定顺序返回结果。 有些人认为,如果没有指定order by子句,行总是以聚簇索引顺序或物理磁盘顺序返回。 然而,这是不正确的,因为在查询处理期间可以改变行顺序的许多因素,例如并行的HASH连接是更改行顺序的操作符的一个很好的例子。
如果指定ORDER BY语句,MySQL将对行进行排序,并按请求的顺序返回。 但是,如果该顺序不是确定性的,即可能有重复的值,则在每个具有相同值的组中,由于与上述相同的原因,该顺序是“随机的”。
确保确定性顺序的唯一方法是在ORDER BY子句中包含保证的唯一列或列组(例如主键)。
所以解决方法如下(两个条件必须同时满足):
1.sql语句中需要有排序条件。
2.排序条件如果没有唯一性,那么必须在后边跟上一个唯一性的条件,比如主键。