mybatis 如何判断重复插入_MyBatis常见面试题3:数据库插入重复如何处理
问题:
在开发过程中,经常遇到插入重复的现象,这种情况该如何解决呢?
答案:
插入的过程一般都是分两步的:先判断是否存在记录,没有存在则插入否则不插入。如果存在并发操作,那么同时进行了第一步,然后大家都发现没有记录,然后都插入了数据从而造成数据的重复。解决插入重复的思路可以是这样的:
(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:数据库插入重复如何处理相关推荐
- 常见面试题整理--数据库篇(每位开发者必备
常见面试题整理--数据库篇(每位开发者必备) 转载自:https://zhuanlan.zhihu.com/p/23713529 知乎专栏 继续前面有关于的Python面试的两篇内容:P ...
- 【Java常见面试题】数据库篇
导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud+黑马旅游+谷粒商城+学成在线+MySQL高级篇+设计模式+牛客面试题 ...
- 数据库常见面试题总结
参考如下: 数据库常见面试题(开发者篇) 数据库优化 SQL数据库面试题及答案 常见面试题整理--数据库篇 转载于:https://www.cnblogs.com/threetop/p/9425172 ...
- 常见面试题整理--操作系统篇(每位开发者必备)
这两日整理了很多编程方面的资料:教学视频.书籍资源以及实战项目全部放在了百度网盘里,资源的目录以及获取方式都放在了文末的图上,你可以直接翻至文末查看. 有过面试经历的人都知道操作系统是面试官必问的几大 ...
- mybatis基础综合/常见面试题
概念/作用: 持久层框架,通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句.最后mybatis ...
- Mybatis常见面试题总结(详细)
Mybatis常见面试题总结 SpringMVC常见面试题总结(超详细回答) 2020最新Java面试题(java,JavaWeb,数据库,框架),常见面试题及答案汇总 Spring常见面试题总结(超 ...
- MySQL数据库常见面试题总结
1.数据库的常用范式: 第一范式(1NF):指表的列不可再分,数据库中表的每一列都是不可分割的基本数据项,同一列中不能有多个值: 第二范式(2NF):在 1NF 的基础上,还包含两部分的内容:一是表必 ...
- 测试开发工程师常见面试题
1. CPU 和 GPU的区别 CPU 力气大啥P事都能干,还要协调. GPU 上面那家伙的小弟,老大让他处理图形,这方面处理简单,但是量大,老大虽然能处理,可是老大只有那么几个兄弟,所以不如交给小弟 ...
- 300+ Java常见面试题总结【JavaPub版】
点赞再看,养成习惯 答案解析见文末 我是JavaPub,专注于面试.副业,技术人的成长记录. 这份[Java常见面试题总结]我想准备很久了,前面做面试官,后来自己也面了很多一线二线互联网公司,希望通过 ...
最新文章
- 网络之NSURLSession
- 建议转变编程时的思维习惯改为:忽略细节关扰,直指问题核心,追寻问题关键。...
- Linux常用命令全名
- joc杂志影响因子2019_边缘计算 | SCI期刊JoCCASA诚邀专刊稿件
- Ubuntu 14.04/14.10下安装VMware Workstation 11图文教程
- 【caffe】 Check failed: error == cudaSuccess (30 vs. 0) unknown error
- xcode 不能选择模拟器
- Sloth组件之NetRisc.Configuration源代码发布
- MongoDB3.4 根据中文拼音给中文排序
- MOOC翁恺老师零基础学Java语言课程编程题——第六周
- 严重: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/sshnews,J2EEApplicatio —
- 安装navicat missing required library xxx.dll(libcc.dll libdd.dll)亲测有效
- 阿德莱德大学计算机科学学士排名,2020年阿德莱德大学计算机科学学士就业前景,入学要求介绍...
- 界面控件BCGControlBar for .NET v7.1正式发布——支持VS 2022
- vue+node(express)+socket实现简单聊天
- 基于ICMP的活跃主机发现技术
- Leptonica PIX 与 Qt QImage 的相互转换
- tec控制pid程序_如何设计TEC 温度环路 PID 控制电路?这个方法告诉你
- JavaWeb学习笔记(一)html
- 基于NETAPP实现内网穿透