码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2020-01-21 20:13:26      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:数据库   page   highlight   _id   现象   不同   car   结果   nbsp   

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。

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

标签:数据库   page   highlight   _id   现象   不同   car   结果   nbsp   

原文地址:https://www.cnblogs.com/qjm201000/p/12222632.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!