iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mybatis高并发情况下防止重复插入记录的方法
  • 939
分享到

mybatis高并发情况下防止重复插入记录的方法

mybatismysql数据库Poweredby金山文档 2023-09-07 11:09:06 939人浏览 泡泡鱼
摘要

一般的防止重复插入记录方法,是设立主键,或者唯一主键来控制,但是如果主键和唯一主键都不能控制的情况下要如何处理呢? 比如我们创建用户购买票券表 tbl_ticket_rec 字段描述id自增主键phone手机号ticket_id

一般的防止重复插入记录方法,是设立主键,或者唯一主键来控制,但是如果主键和唯一主键都不能控制的情况下要如何处理呢?

比如我们创建用户购买票券表

tbl_ticket_rec

字段

描述

id

自增主键

phone

手机号

ticket_id

票券id

return

是否退票--1 退票 0未退

time

买票时间

需求描述

一个手机号,表示一个用户,一个用户一个票id只能购买一次,但是当用户退票时,则可以再次购买,用户可以退票多次,也可以重复购买多次

需求分析

目前该表主键只有id做为自增主键,如果在高并发的情况下控制插入,那么就需要要每次插入时先查看一下库中是否存在该用户购票记录

select 1 from tbl_ticket_rec where phone = xx and return =0

如果库中不在存在购买且未退的记录,则可以插入库中。

但是在高并发的情况下,当我们从select 到 insert 过程中,可能存在其它线程入库的结果,导致select 结果不准确

方案改进:

这时候就需要调整一下select机制

inset into tbl_ticket_rec(phone,ticket,return) select '13700000000','0001','00' from dual where not exists (select 1 from tbl_ticket_rec where phone ='13700000000' and return ='0')

其中dual 是一张虚拟表

那么其对应的mapper文件,如以如下编写

insert into tbl_ticket_rec

phone,

ticket_id,

return,

select

#{phone,jdbcType=CHAR},

#{ticketId,jdbcType=CHAR},

#{return,jdbcType=CHAR},

from dual where not exists (select 1 from tbl_ticket_rec where #{phone,jdbcType=CHAR} and return = #{return,jdbcType=CHAR})

结论:

通过以上改进,可能有效的控制高并发情况下的数据入库重复问题

来源地址:https://blog.csdn.net/shenshiheng2006/article/details/128726715

您可能感兴趣的文档:

--结束END--

本文标题: mybatis高并发情况下防止重复插入记录的方法

本文链接: https://www.lsjlt.com/news/398187.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mybatis高并发情况下防止重复插入记录的方法
    一般的防止重复插入记录方法,是设立主键,或者唯一主键来控制,但是如果主键和唯一主键都不能控制的情况下要如何处理呢? 比如我们创建用户购买票券表 tbl_ticket_rec 字段描述id自增主键phone手机号ticket_id...
    99+
    2023-09-07
    mybatis mysql 数据库 Powered by 金山文档
  • 高并发情况下Linux系统及kernel参数的优化方法
    这篇文章主要讲解了“高并发情况下Linux系统及kernel参数的优化方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“高并发情况下Linux系统及kernel参数的优化方法”吧!众所周知在...
    99+
    2023-06-15
  • java并发请求下数据插入重复问题的解决方法
    目录前言分布式锁工具类在过滤器实现请求拦截总结前言 前段时间发现数据库里经常会存在两条相同的用户数据,导致数据查询异常。查了原因,发现前端微信小程序在授权登录时,有时会出现同时发送了...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作