不经意发现的一个问题:mysql查询数据时使用 order by 和 limit 导致查询数据重复。
来源项目里的一个业务,查询自己的历史记录,每次查一条,先去数据库找到对应主键ID,再去缓存里取数据:
语句A:select id from example_table order by update_time desc limit 2,1;
语句B:select id from example_table order by update_time desc limit 3,1;
日志一打,发现A和B语句查询出来的ID是一样的,但是使用select * 就没有问题,咋办,百度。
【MySQL的排序默认情况下是以主键ID作为排序条件的,也就是说,如果在update_time相等的情况下,主键ID作为默认的排序条件,不需要我们多此一举加ID asc。但是事实就是,MySQL再order by和limit混用的时候,出现了排序的混乱情况】
排查数据,有update_time一致的两条数据,导致问题出现,修改完事。
select id from example_table order by update_time,id desc limit 3,1;



