Duplicate entry ‘‘ for key ‘Primary‘

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

问题描述

在公司业务中需要批量向mysql中写数据,总是出现错误:Duplicate entry ‘[info]’ for key ‘PRIMARY’;

思考

出现错误的原因是mysql数据表设置了主键primary key,而批量写入的数据中设了主键的字段与数据库中的数据有重复。那么解决方法就简单了,剔除重复的数据。

解决方法

拿到报错信息,从数据中移除重复的数据,重新执行写入操作,完成。

try{
    //此处是可能会出现此异常的java语句
}catch(SQLException e) {
    //获取错误信息
    String message = e.getMessage();
    if (message.matches("Duplicate entry (.*) for key 'PRIMARY'")) {
    	//拿到重复的room_id,这里的CharacterFilter是我的工具类
        String rejected = CharacterFilter.numberFilter(message);
        //移除重复数据,这里的data是List
        reject(data,rejected);
    }
}

/** 剔除 */
public void reject(List<你的实体类> data, String rejected) {
    //循环遍历List
   for (Iterator<FlowChartCategory> iterator = data.iterator();iterator.hasNext();) {
       //拿到主键信息
       String 主键 = iterator.next().getXXXXX();
       //比对
       if (主键.equals(rejected))
           //移除重复的数据
           iterator.remove();
       }
   }

其中CharacterFilter.numberFilter()是我自定义的工具类及方法,主要作用就是从字符串中过滤其他字符拿到数字。详情参考:https://blog.csdn.net/yeah_you_are/article/details/120676629?spm=1001.2014.3001.5501

Duplicate entry for keyPRIMARY‘ 主键重复报错解决 先尝试插入数据,如果发现主键冲突(或唯一索引冲突),则执行update操作,而不是删除和重新插入(设想场景:批量导入数据,如果表格中已存在主键相同信息,则以表格中信息为准,然后更新表格中的一个标识等)INSERT IGNORE USER_INFO (ID, USER_NAME, ADDRESS) VALUES (1234, ‘小红’, ‘武汉’);INSERT INTO USER_INFO (ID, USER_NAME, ADDRESS) VALUES (1234, ‘小红’, ‘武汉’); 阅读详情

相关推荐

数据库新增表字段提示Duplicate entry for key PRIMARYmysql锁表的具体使用

MySQL - 尝试添加新列时出现重复输入错误我有一个MySQL数据库,其表有很多的数据.我想添加另一列,但我一直收到以下错误:很奇怪的一个问题,我加字段怎么会重复主键重复呢?

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2493

【异常】Mybatis-plus的saveBatch()造成雪花ID重复 ,提示Duplicate entry ‘...‘ for keyPRIMARY

【代码】【异常】Duplicate entry ‘...‘ for keyPRIMARY 竟然是因为Mybatis-plus的saveBatch()造成雪花ID重复。

奶爸的编程之路,也就一周冷个三天 5220

Mysql出现问题:ERROR 1062 (23000): Duplicate entry ‘‘ for keyPRIMARY‘解决方案

Mysql出现问题:ERROR 1062 (23000): Duplicate entry ‘‘ for keyPRIMARY‘解决方案

小虚竹的专栏 1万+

Duplicate entry '' for key 'PRIMARY' 是什么问题

数据表中设置了主键(Primary Key),而主键对应的值是不允许重复的。 错误提示为:你插入的记录与数据表中原有记录的主键重复了(Duplicate)。所以插入失败。 ...

初心不改,事在人为 19万+

MySql命令报错:Duplicate entry ‘10‘ for keyPRIMARY‘解决方案

综上所述,这个错误提示是因为在插入数据时,插入了一个已经存在的主键值,导致冲突。确认是否插入了重复的数据,可以通过查询数据库来查看是否有重复的主键值。如果是插入重复数据导致的错误,可以通过修改数据或者删除重复数据来解决。如果是其他原因导致的错误,可以尝试重新创建表格或者修改表格结构来解决。

杜永康的博客 2万+

解决报错问题:SQLIntegrityConstraintViolationException: Duplicate entry ‘4‘ for keyPRIMARY

解决报错问题:SQLIntegrityConstraintViolationException: Duplicate entry ‘4’ for keyPRIMARY’ SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4813a18a] was not registered for synchronization...

weixin_44797327的博客 2万+

Duplicate entry ‘C0000000000000000000000000277190‘ for keyPRIMARY

创建时未设置自动增加字段。采用每次写入一行方式提交。

m0_37541370的博客 654

mysql报错:Duplicate entry ‘1’ for keyPRIMARY

mysql报错:Duplicate entry ‘1’ for keyPRIMARY’ 原因:主键是在同一张表中必须是唯一的,如果在进行数据插入的时候指定的主键与表中已有 的数据重复的话则会导致违反主键约束的异常。 解决方案:清空数据库

Iccmo的博客 2万+

MySQL错误 “duplicate entry ‘1‘ for keyPRIMARY‘“ 解决方案

该错误通常由主键冲突引起,表示尝试插入或更新的主键值已存在于表中。

qq_42985657的博客 4355

Duplicate entry ‘0‘ for keyPRIMARY

1.sql插入第一条数据成功,插入第二条数据报错: Duplicate entry ‘0’ for keyPRIMARY’. 2.因为主键设置不能为空,因此默认是以"0"来进行填充的。因此在数据插入时数据的主键id值被0占据,但由于之前已经有数据了,id为“0”的索引已经被占,在使用就会报这个错误,因此我们只需要对表中的主键“id”设置成自增即可. 3.表如果不设置成自增,会导致yml文件配置了全局id自增也无效. ...

xtb666666的博客 1111

遇到Duplicate entry ‘16‘ for keyPRIMARY‘报错

今天插入数据的时候,偶遇一个Duplicate entry ‘16‘ for keyPRIMARY‘这个错误,应该来说是主键冲突,按理来说我插入数据的时候,主键是自动生成的,应该不会出现主键一样的问题,我就在怀疑是不是前端传值过来的时候带上了主键,于是我去断点,但是事实上并没有出现主键一致的情况。和其他表对比有一个主键长度。最后,这个问题应该不怎么会遇到,平常通过navicat创建表也不会更改主键长度,应该是某个同事不小心手滑输入了键长度。所以说,这个键长度是有效长度为2,怪不得报错提示‘16’冲突。

AIJJya的博客 1009

Duplicate entry ‘2147483647‘ for keyPRIMARY

Duplicate entry ‘2147483647‘ for keyPRIMARY

张姐姐聊编程 4380

mysql报错:Duplicate entry ‘xx‘ for keyPRIMARY‘ 解决可行方案。已解决

mysql报错:Duplicate entry ‘xx‘ for key ‘xxux1‘ 解决可行方案。已解决 web开发多次遇到Duplicate entry ‘xx’ for keyPRIMARY’ 报错或者Duplicate entry ‘xx‘ for key ‘xxux1‘ 报错的原因 这是因为数据库对应的表字段设置了唯一索引. 1.报Duplicate entry ‘xx’ for keyPRIMARY’ 错 原因及解决方法 原因一: 对应表名称主键没有设置自增 解决方法:设置主键自增

成为自己的太阳的博客 5万+
上一篇: 最短补全词
下一篇: LeetCode两数之和
yeah_you_are
博客等级 码龄8年 679粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值