Duplicate entry ‘1647515778383‘ for key ‘spc_general_customer_info.PRIMARY‘

本文介绍了在短时间内大量导入数据导致主键冲突的问题,特别是当主键为时间戳时。提出了一种解决方案,即通过结合当前时间戳与随机数生成器来创建唯一ID。具体实现包括一个生成随机验证码的方法,确保生成的ID具有足够的唯一性,避免了主键冲突。这种方法对于处理大规模数据导入场景尤其有效。
摘要由CSDN通过智能技术生成

场景:在短时间大量导入数据,出现主键冲突报错,主键id是时间戳

解决方案:引用一个随机生成数的方法,每次调用时都随机生成id

id采用随机生成的方法,这样就算一次性大量数据导入也不会出现主键冲突的情况
String id = System.currentTimeMillis() + CommonUtils.generNumCode(6);
/**
 *获取随机验证码
 * @param len
 * @return
 */
public static String generNumCode(int len){
    //实例化 StringBuffer ,用作拼接验证码
    StringBuffer code = new StringBuffer();
    //拼接一个不为0的数字
    code.append(getRandom());
    //长度减1,随机拼接数字
    for (int i = 0; i < len-1; i++) {
        code.append(new Random().nextInt(10));
    }
    //利用递归算法,如果随机数长度不够则重新随机
    if(code.length() != 6){
        return generNumCode(6);
    }else {
        return code.toString();
    }
}

/**
 * 使用递归算法,获取第一个随机数不为0
 * @return int
 */
public static int getRandom(){
    int number = new Random().nextInt(10);
    if(0 == number){
        return getRandom();
    }
    return number;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值