当前位置:首页 > MySQL

数据库排序后,分页,导致查询数据丢失

canca6年前 (2020-09-28)MySQL694

sql如下:

select *
from (

select tmp_page.*, rownum row_id
from (
    select 
    d.CHECK_TIME 
    d.CAR_NO carNo,
    from aaa d
    order by d.CHECK_TIME desc
) tmp_page
where rownum <= 20
)
where row_id > 0

问题排查步骤:
1.查看sql:

select 
    d.CHECK_TIME 
    d.CAR_NO carNo,
    rownum
    from aaa d
    order by d.CHECK_TIME desc
select tmp_page.*, rownum row_id
from (
    select 
    d.CHECK_TIME 
    d.CAR_NO carNo,
    rownum
    from aaa d
    order by d.CHECK_TIME desc
) tmp_page
where rownum <= 20

  发现两次的rownum结果不同,经分析,CHECK_TIME的数据内容格式:YYYYMMDDHH,不能保证排序的唯一性,导致了可能数据会丢失现象。

解决方案: order by d.CHECK_TIME desc,d.pk desc, pk能保证排序的唯一性。
如果没有主键pk,可以用 order by d.CHECK_TIME desc,d.ROWID desc  保证排序的唯一性。


总结:只要order by之后的字段能保证排序唯一性,就不会出现问题。比如order by pk,就不会有问题;或者组合的order by,只要能保证唯一就OK。


扫描二维码推送至手机访问。

版权声明:本文由Ant.Master's Blog发布,如需转载请注明出处。

本文链接:https://iant.work/post/728.html

标签: MySQL
分享给朋友:

“数据库排序后,分页,导致查询数据丢失” 的相关文章

mysql 配置命令大全

--auto-rehash       Enable automatic rehashing. One doesn't need to use             …

MySQl字段类型

MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述。概述有意简化,…

MySQL免安装配置方法

1.下载一个安装版的。 安装版,安装后%MYSQL_HOME%\bin下有一个mysqld-nt.exe文件。将它复制出来(珍藏起来)。 2.下载一个免安装版MSYQL 将它解压。例如:E:/mysql-6.0.3-alpha-win32 将my-huge.ini另存为my.ini。 打开my.in…

Mysql 删除重复记录

1、 具体实现如下: Table Create Table ------------ -------------------------------------------------------- users_groups CREATE TABLE `users_groups` ( `id`…

MySQL性能优化的最佳20+条经验

MySQL性能优化的最佳20+条经验

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤...…

sql语句查询经纬度范围

sql语句查询经纬度范围

指定一个经纬度,给定一个范围值(单位:千米),查出在经纬度周围这个范围内的数据。 经度:113.914619 纬度:22.50128 范围:2km longitude为数据表经度字段 latitude为数据表纬度字段 SQL在mysql下测…

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。