sql出现在并发情况下offset+limit丢失数据,重复数据的解决办法
2013-05-03 22:09
417 查看
问题描述:
并发情况下,如果对一个表进行如下操作:
线程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代替子查询可以解决,目前正在优化中。
并发情况下,如果对一个表进行如下操作:
线程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代替子查询可以解决,目前正在优化中。
相关文章推荐
- Sql Server 如何解决多并发情况下,出现的多个相同ID数据
- matlab中xlswrite函数写数据出现服务器异常情况的解决办法
- 并发情况下修改数据对缓存的影响及解决办法
- 解决InputStream.read读取数据出现丢失的情况
- 读文件最后一行数据重复出现解决办法
- sql2005 数据复制《发布 '%1' 的并发快照不可用》错误的解决办法
- 导入数据常出现 重复的数据 下面介绍几条sql语句来解决问题!!
- PowerDesiger 小写 导出数据表 sql 出现 引号 解决办法
- pl/sql查询数据出现中文乱码问题的解决办法
- oracle排序,出现页数不同数据却重复问题的原因及解决办法
- sql2005 数据复制《发布 '%1' 的并发快照不可用》错误的解决办法
- 用oralce连接.net客户端出现问题:“数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,”的解决办法
- mysql通过sql文件导入数据时出现乱码的解决办法
- 并发数据库事务缺锁导致的数据不一致情况:丢失更新,脏读,不可重复读,幻读
- STM32F103ZE单片机FSMC接口读取NAND Flash芯片K9F1G08U0E的数据时出现数据丢失的解决办法
- 巧用SQL的with语法生成临时结果集,进行查询与更新同步操作,解决高并发下对数据的重复访问
- 关于MATLAB中xlswrite函数写数据出现服务器异常情况的解决办法
- MyBatis 3.2.x版本在并发情况下可能出现的bug及解决办法
- 数据库---并发控制及其带来的问题丢失修改,读脏数据,不可重复读及解决(程序员级)
- Yii2 联表查询数据丢失,即出现主键覆盖情况的解决方法