提问MYSQL Order By 字段内容重复,可能导致数据重复出现,无法复现?

目前我存在一个线上的问题,经排查发现可能是是由于查询时order by根据更新时间排序,但是更新时间都是同一时间导致。

网上大量重复资源,感觉最靠谱的一个如下:

https://www.cnblogs.com/codingchangeworld/p/15834849.html

为了验证是因为这个原因导致的数据重复创建如下测试DEMO,但无法复现场景,求大佬教教我该怎么复现

/**
     * mysql 排序字段相同时,排序返回是否有序,如果发生乱序,那么set肯定会重复
     * 例如: id=1  page=1    id=1 page=3 相同id在第一页和第三页同时出现
     */
    @Test
    public void pageBySameTimeSortTest(){
        IPage<IbcUsdTrade> page = new Page<>();
        Map<Long,Long> trades = new HashMap<>();
        LambdaQueryWrapper<IbcUsdTrade> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(IbcUsdTrade::getRecUpdateTime,"2022-11-21 12:33:06");
        wrapper.orderByAsc(IbcUsdTrade::getRecUpdateTime);
        page.setSize(10);
        boolean flag = false;
        for (int i = 1; i <= 50;) {
            page.setCurrent(i++);
            IPage<IbcUsdTrade> result = ibcUsdTradeMapper.selectPage(page, wrapper);
            List<IbcUsdTrade> records = result.getRecords();
            for (int i1 = 0; i1 < records.size(); i1++) {
                if (trades.containsKey(records.get(i1).getId())) {
                    flag = true;
                    System.out.print("位置两个id不相同"+records.get(i1).getId()+","+trades.get(records.get(i1).getId())+","+page.getCurrent());
                    break;
                }
                trades.put(records.get(i1).getId(),page.getCurrent());
            }
            Assert.isTrue(!flag,"存在不相同的数");
        }


    }

 

 

请登录后发表评论