一边查询一边删除:

最近在做一个功能,是一个清除脏数据的一个功能,去数据库中查询每一条数据,判断数据是脏数据,如果是脏数据就删除这一条数据,如果不是脏数据就保留这一条数据。

刚开始思路是这样子的,分页去读取数据库中的数据,然后去判断每一页是否有脏数据,如果有脏数据就直接删除。

按照这个思路做完功能后去验证功能有没有问题时发现总是有些脏数据没有被删除,按理把表里的数据都查了一边,判断也正常,不应该出现数据没有被删除的清空,经过一个多小时的研究发现是我在一边查询数据库数据一边删除数据库数据的问题。

  场景还原一下:  现在 user 表有300条数据

现在分页去读取user表的数据,每页100条,然后判断是否有脏数据需要清除,如果有则清除脏数据。

第一次查询,数据库有300条数据:  select * from user limit 0,100;

删除了50条数据,这时数据库有250条数据。

第二次查询,数据库有250条数据:select * from user limit 101,200;

删除了60条数据,这时数据库有190条数据。

第三次查询,数据库有190条数据:select * from user limit 201,300;

第三次查询就出现问题了,因为现在数据库中只有190条数据了.则是limit 201,300 是查不出数据的,所以导致有一部分数据是没有处理的。

如何处理:

数据量小的话,直接读全表,快照表中的数据到内存。

数据量大的话,可以先获取表中所有数据的id,再通过id去分页查询数据。

一边新增一边查询判断: 

如果是主从架构的数据库,新增后可能还没将数据同步到从库就进行查询了,会查询不到最新插入的数据。所以在新增完马上需要查询的这种场景下需要强制查询主库数据。

mysql 一边查询一边删除和一边新增一边查询判断所导致的问题相关推荐

  1. mysql 多表 三表 删除_mysql 多表join查询索引优化

    数据准备 CREATE TABLE IF NOT EXISTS `class` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `card` int( ...

  2. mysql二进制日志被删除无法启动_mysql二进制日志文件出错导致mysql服务无法启动...

    今天打开phpmyadmin发现连不上mysql数据库,重启mysql启动不起来,查看日志发现如下错误 mysqld: File '.\mysql-bin.000370' not found (Err ...

  3. mybatis like模糊查询_Java自学之mybatis:模糊查询和多条件查询

    学习目的 使用mybatis进行模糊查询:查找category_表中包含cat的记录. 使用mybatis进行多条件查询:查找category_表中id>1,包含cat的记录. Part 1 模 ...

  4. 【MySQL】面试官:如何查询和删除MySQL中重复的记录?

    写在前面 最近,有小伙伴出去面试,面试官问了这样的一个问题:如何查询和删除MySQL中重复的记录?相信对于这样一个问题,有不少小伙伴会一脸茫然.那么,我们如何来完美的回答这个问题呢?今天,我们就一起来 ...

  5. mysql删除重复文章标题_MySQL中查询、删除重复记录的方法大全

    前言 本文主要给大家介绍了关于MySQL中查询.删除重复记录的方法,分享出来供大家参考学习,下面来看看详细的介绍: 查找所有重复标题的记录: 一.查找重复记录 1.查找全部重复记录 2.过滤重复记录( ...

  6. mysql删除重复的判断_MySQL中查询、删除重复记录一共有多少种方法?

    前言 本文主要给大家介绍了关于MySQL中查询.删除重复记录的方法,分享出来供大家参考学习,下面来看看详细的介绍: 查找所有重复标题的记录: select title,count(*) as coun ...

  7. mysql 5.6 删除用户_mysql 新增 删除用户和权限分配

    1. 新增用户 mysql>insert into mysql.user(Host,User,Password) values("localhost","lionb ...

  8. 修改mongodb最大查询数_WebFlux系列(十二)MongoDB应用,新增、修改、查询、删除

    #Java#Spring#SpringBoot#Mongo#reactor#webflux#数据库#新增#修改#查询#删除# Spring Boot WebFlux Mongo数据库新增.删除.查询. ...

  9. 删除按钮_汪涵拜师学艺第七篇:往来单位查询删除按钮和新增判断的设计!

    老师好!大家好!我叫汪涵: 今天给大家分享往来单位查询删除按钮和新增判断的设计! 在开始具体内容之前,请让我先分享我们的价值观: 用自律和勤奋来改变命运,不走捷径,有爱心,知难而上做个好人! 正文: ...

最新文章

  1. Linux内存技术分析(下)
  2. CIFS NFS SMB Samba 文件共享协议 介绍
  3. ai描边工具怎么打开_ai切片工具怎么用?ai切片工具使用教程
  4. P2184 贪婪大陆
  5. 编程竞赛控制系统(PC2)使用说明书
  6. 《ArcGIS Runtime SDK for .Net开发笔记》--介绍与环境搭建
  7. 提高短线操作成功率的诀窍!
  8. Android必知必会-使用Intent打开第三方应用及验证可用性
  9. 《Hadoop实战(第2版)》迷你书
  10. html如何加载ae做好的,AE转JS动画,lottie.js和bodymovin的简易使用心得
  11. Java实现多元t分布函数(Multivariate t distributions)
  12. 简易抽签程序(数字滚动 HTML + JavaScript)
  13. C语言斐波那契数列部分问题程序求解过程,两种思想
  14. android 自定义数字软键盘,(笔记)Android自定义数字键盘
  15. Hexo全局添加APlayer音乐播放器
  16. 现金贷真正的“行家”,根本不靠放贷赚钱,还能月入千万 | 315特辑第三期
  17. 弘辽科技:淘宝流失率是什么意思?客户流失的原因有哪些?
  18. PostgreSQL查询 动态输入参数
  19. 1.类加载:什么是类加载???什么是类加载器???类加载器有哪三种类型???如何获取类加载器???
  20. 当前日期的周一,下周日期,下月日期;批次号生成

热门文章

  1. 微信小程序之setData用法
  2. 什么红茶好喝口感好?红茶的不同口感简述
  3. 云南计算机专升本数据结构_云南省普高专升本专业课《数据结构》考试大纲
  4. 好玩有趣的App,居家无聊必备!
  5. 如何使用CSS创建易于打印的页面
  6. ur机器人编程学习-安全设置
  7. 太极链——区块链可在在三个方面改善供应
  8. Linux入门,Nano文本编辑器
  9. MongoDB 常用命令总结
  10. 如何免费合并多个PDF文件?