MySQL主键冲突问题分析处理

背景

因公司业务及预算调整,系统部署从原有云服务提供商迁移到另外一家云服务提供商,在测试新服务能力的时候,发现应用系统某个功能不能正常使用,仅仅是第一次成功。

为了分析问题,笔者使用以下环境还原报错场景进行讲解。

  • Spring Boot: 3.0.2
  • MySQL: 5.7.31
  • MyBatis: 3.5.1

问题分析

通过查看服务日志,发现后端接口报SQL异常-主键冲突,如下图所示:

刚开始看到这个错误信息,直接就懵了,怎么在另外一个服务商那里跑得好好的,到这边就主键冲突了呢。一通百度、Google之后,突然之间有个想法,会不会是这两个云服务商提供的MySQL服务,某些参数有区别。

分析数据

因为数据是迁移过来的,表中有大量旧数据,不好确定到底是那个值冲突了。

分析代码

然后查看我们代码,找到对应的PO类代码,代码类似以下,主要关注主键属性 id 的数据类型。

public class UserPo {
   
    private int id;
    private String name;
    private String email;
    private String password;
}

代码中发现id属性是int类型的,我们知道,Java中int类型默认值为0,在新增数据的时候并没有为id属性设置值,代码类似下面这样:

UserPo user = new UserPo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值