mysql高并发下主键冲突

在进行项目压测时,博主遇到了在高并发环境下插入数据导致的主键冲突问题。由于在插入前先查询了auto_increment值,产生了并发间隙。通过去掉自定义查询,使用`useGeneratedKeys="true"`和`keyProperty="id"`解决了这一问题,避免了并发导致的主键冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事情是这样的,博主刚刚写完一个小项目,由于使用的量比较大,所以做了一下压测,在插入数据的时候报出了如下错误 :

[http-bio-****-exec-67] DEBUG c.j.m.a.d.A.insertAppUser!selectKey - ==> Parameters: 
org.springframework.dao.DuplicateKeyException: 

### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '236533' for key 'PRIMARY'

很显然高并发下主键冲突了,开始漫长的找寻原因。最终发现

insert id="insertCustomerLog" parameterType="java.util.Map" useGeneratedKeys="true">
<!-- <selectKey resultType="java.lang.Long" keyProperty="dto.id" order="BEFORE">
            select auto_increment from information_schema.tables where table_name='***' and table_schema=schema();
</selectKey> -->

<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值