问题:

在开发过程中,经常遇到插入重复的现象,这种情况该如何解决呢?

答案:

插入的过程一般都是分两步的:先判断是否存在记录,没有存在则插入否则不插入。如果存在并发操作,那么同时进行了第一步,然后大家都发现没有记录,然后都插入了数据从而造成数据的重复。解决插入重复的思路可以是这样的:

(1)判断数据库是否有数据,有的话则无所作为。没有数据的话,则进行下面第2步

(2)向redis set key,其中只有一个操作a会成功,其他并发的操作b和c会失败的

(3)上面set key 成功的操作a,开始执行插入数据操作,无论是否插入数据成功,都在最后del key。【注】插入不成功可以多尝试几次,增加成功的概率。

(4)上面set key 失败的操作b和c,sleep一下,然后再判断数据库是否有数据,有数据则无所做为,没有数据则重复上面的set key,此时是b和c在竞争,失败者则无所作为,成功者则开始插入数据,然后无论插入成功还是失败则都要del key。【注】既然是并发了,本身就是异常情况,就没有必要考虑用户体验了,就可以多sleep一会儿也无妨,不过对于单线程多事件处理的开发模式不要sleep太久。

总之,上面的过程就是:线程a 线程b 线程c,同时插入数据。如果线程a拿到锁之后,让它插入数据,它插入成功了,那么线程b 线程c啥也不用做;它插入失败了,线程b 线程c则抢锁,谁抢到了谁插入数据,不管最后是否成功,程序走到此步就可以了,已经完成了既定两个目标:执行插入,不重复插入。

mybatis 如何判断重复插入_MyBatis常见面试题3:数据库插入重复如何处理相关推荐

  1. 常见面试题整理--数据库篇(每位开发者必备

    常见面试题整理--数据库篇(每位开发者必备) 转载自:https://zhuanlan.zhihu.com/p/23713529        知乎专栏 继续前面有关于的Python面试的两篇内容:P ...

  2. 【Java常见面试题】数据库篇

    导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud+黑马旅游+谷粒商城+学成在线+MySQL高级篇+设计模式+牛客面试题 ...

  3. 数据库常见面试题总结

    参考如下: 数据库常见面试题(开发者篇) 数据库优化 SQL数据库面试题及答案 常见面试题整理--数据库篇 转载于:https://www.cnblogs.com/threetop/p/9425172 ...

  4. 常见面试题整理--操作系统篇(每位开发者必备)

    这两日整理了很多编程方面的资料:教学视频.书籍资源以及实战项目全部放在了百度网盘里,资源的目录以及获取方式都放在了文末的图上,你可以直接翻至文末查看. 有过面试经历的人都知道操作系统是面试官必问的几大 ...

  5. mybatis基础综合/常见面试题

    概念/作用: 持久层框架,通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句.最后mybatis ...

  6. Mybatis常见面试题总结(详细)

    Mybatis常见面试题总结 SpringMVC常见面试题总结(超详细回答) 2020最新Java面试题(java,JavaWeb,数据库,框架),常见面试题及答案汇总 Spring常见面试题总结(超 ...

  7. MySQL数据库常见面试题总结

    1.数据库的常用范式: 第一范式(1NF):指表的列不可再分,数据库中表的每一列都是不可分割的基本数据项,同一列中不能有多个值: 第二范式(2NF):在 1NF 的基础上,还包含两部分的内容:一是表必 ...

  8. 测试开发工程师常见面试题

    1. CPU 和 GPU的区别 CPU 力气大啥P事都能干,还要协调. GPU 上面那家伙的小弟,老大让他处理图形,这方面处理简单,但是量大,老大虽然能处理,可是老大只有那么几个兄弟,所以不如交给小弟 ...

  9. 300+ Java常见面试题总结【JavaPub版】

    点赞再看,养成习惯 答案解析见文末 我是JavaPub,专注于面试.副业,技术人的成长记录. 这份[Java常见面试题总结]我想准备很久了,前面做面试官,后来自己也面了很多一线二线互联网公司,希望通过 ...

最新文章

  1. 网络之NSURLSession
  2. 建议转变编程时的思维习惯改为:忽略细节关扰,直指问题核心,追寻问题关键。...
  3. Linux常用命令全名
  4. joc杂志影响因子2019_边缘计算 | SCI期刊JoCCASA诚邀专刊稿件
  5. Ubuntu 14.04/14.10下安装VMware Workstation 11图文教程
  6. 【caffe】 Check failed: error == cudaSuccess (30 vs. 0) unknown error
  7. xcode 不能选择模拟器
  8. Sloth组件之NetRisc.Configuration源代码发布
  9. MongoDB3.4 根据中文拼音给中文排序
  10. MOOC翁恺老师零基础学Java语言课程编程题——第六周
  11. 严重: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/sshnews,J2EEApplicatio —
  12. 安装navicat missing required library xxx.dll(libcc.dll libdd.dll)亲测有效
  13. 阿德莱德大学计算机科学学士排名,2020年阿德莱德大学计算机科学学士就业前景,入学要求介绍...
  14. 界面控件BCGControlBar for .NET v7.1正式发布——支持VS 2022
  15. vue+node(express)+socket实现简单聊天
  16. 基于ICMP的活跃主机发现技术
  17. Leptonica PIX 与 Qt QImage 的相互转换
  18. tec控制pid程序_如何设计TEC 温度环路 PID 控制电路?这个方法告诉你
  19. JavaWeb学习笔记(一)html
  20. 基于NETAPP实现内网穿透

热门文章

  1. 第四十四节,subprocess系统命令模块
  2. 程序员非常重要的24个软技能(开始我的博客之旅)
  3. 怎么样MyEclipse配置Tomcat?
  4. 迅雷“星域”打通最后一公里重新定义CDN
  5. mysql权限的误操作的恢复
  6. 调查显示:手机单芯片处理器作用日显重要
  7. 在MATLAB中添加语音处理工具箱(voicebox)
  8. 基于SSM实现旅游网站管理系统
  9. Fiddler抓包使用教程-会话图标
  10. CentOS 7 使用iptables 开放端口