sql出现在并发情况下offset+limit丢失数据,重复数据的解决办法
问题描述:
并发情况下,如果对一个表进行如下操作:
线程1:select * from table offset 1000 limit 1000
线程2:select * from table offset 2000 limit 1000
等等
发现数据会出现丢失,重复的现象,最后通过查资料发现要增加order by来解决,但是如果这张表没有自增id,就不太好办,主要是无法通过自增id来order by
这时候可以这样:select * from (select * from table order by 表主键) as 别名 offset 1000 limit 1000
这样的目的是强制排序后再offset + limit,不过会降低效率,也许通过join代替子查询可以解决,目前正在优化中。
浙公网安备 33010602011771号