出现这个就代表添加的数据主键有重复
看看我的情况是啥样的。
在调用添加的方法时,第一次可以添加到数据库,但是第二次显示主键重复的错误,而重复的主键就是刚刚添加的那条数据的主键,每重启服务器就可以品尝一下这酸爽的体验。
数据表主键已经设置自动递增。
这个是主键,在自动生成的sql中有添加,但是已经设置自增,虽然业务层并没有给主键数据初始化,但是在解决问题的时候还是考虑到会有冲突,如有遇到这种可以试试将主键的添加操作删掉,同时考虑被删的还有上面selectKey里的
SELECT LAST_INSERT_ID()
很多人是因为数据表中没有添加主键的自动递增,如果你遇到的话可以看看主键的递增是否打开,
你可以试试将表中的主键先换成其他字段试试,或者将表中的数据删除至你的自增序列之前or之后(多试)。
再试试将这张表的主键序列值增加到数据表最大id之后,下面是sql语句。
alter table 表名 AUTO_INCREMENT=数值;
考虑数据库sql问题,转自其他遇到这个问题的大佬
1.IGNORE
INSERT IGNORE INTO Table_name(…..) VALUES(1,1),(2,2),(3,3);
使用IGNORE,如果插入的记录中存在重复值会忽略重复值的该记录行,不影响其他行的插入。
2.REPLACE
REPLACE INTO Table_name() VALUES(1,1),(2,2),(3,3)
使用replace当插入的记录遇到主键或者唯一重复时先删除表中重复的记录行再插入
3.*ON DUPLICATE KEY UPDATE *NAME1=VALUES(ID)+1
INSERT TO Table_name() VALUES(1,1),(1,2) ON DUPLICATE KEY UPDATE NAME1=NAME1+1;
ON DUPLICATE KEY UPDATE后面使用VALUES指的是插入记录的值,而不使用VALUES指的是表的自身值。其后执行的UPDATE更新的记录是WHERE重复的主键或唯一键的ID。
转自:https://blog.csdn.net/zhangyr_student/article/details/80119238
然而我并没有解决这个问题,眼光放大点,外网大佬把问题放在数据库上,
一个叫知道一些的用户说可能是数据的长度溢出,考虑到确实有这个可能,把他的机翻话贴在这。int的最大值 2 的 31 次方 - 1 = 2147483648 - 1 = 2147483647 。
有些人已经忍不了这个错了,一个叫拉西什·库玛尔B 的印度小伙给出了下面这个解决方案。
不太优雅,
另一个相似说法的帖子下面已经开始了美式幽默;
https://www.cnblogs.com/zgq123456/p/9996525.html
这一篇文章,偏底层的解决方案;
来源:oschina
链接:https://my.oschina.net/u/4442945/blog/4268054