首先我们用MySQL自带的可视化管理工具MySQL WorkBench打开数据库及表格,出现此问题的主要原因是主键已经有了名为“XXX”的那项,实际上我写的代码并没有重复也会弹出此报错,下面我们看一下我自己的解决方案。
Mysql导入大量数据时,会报如下错误,主键重复,不能再继续执行。
Query:
INSERT INTO `FNDCN_MNG` VALUES(787390578, 1, '杨明', 95585, '2015-06-08', '招募说明书', 80100, NULL, '1', NULL, '3', '2015-06-29', NULL, '1', ' 杨明先生,中央财经大学硕士研究生,14年银行、基金从业经历。曾在上海银行从事信贷员、交易员及风险管理工作。2004年10月加入华安基金管理有限公司,任研究发展部研究员。2013年6月起担任华安策略优选股票型基金的基金经理。2014年6月起担任投资研究部高级总监。', '2015-11-09 12:33:58', '2016-01-06 21:34:41', '2015-12-31 12:14:18', 'JY', '488969752640', NULL, NULL, NULL, NULL)
Error occured at:2016-02-16 15:23:41
Line no.:220
Error Code: 1062 - Duplicate entry '95585-80100-2015-06-29 00:00:00-1--1' for key 'IDX_FNDCN_MNG'
解决方案一:
将主键设置为自动增长。可以在数据库手动将相关表设置ID为自增长。
如图:
再继续导入正常。
解决方案二:
问题描述:单独导入出错sql,会报如下错误:
1 queries executed, 0 success, 1 errors, 0 warnings
查询:INSERT INTO `FNDCN_MNG` VALUES(787192513, 1, '丁进', 150150, '2015-12-28', '招募说明书', 80100, NULL, '1', NULL, '3', '20...
错误代码: 1062
Duplicate entry '787192513' for key 'PRIMARY'
检查了下,主键生成策略是:@GeneratedValue(strategy=GenerationType.IDENTITY),也没问题。
删除导入出错的表;
新建需要导入数据的表;
我的问题解决是在数据库中:在数据库中,没有将主键设为自动增长。将已经存在的表的主键设为自动增长SQL语句为:
alter table course change course_id course_id int(10) not null auto_increment ;
然后用sql脚本的方式导入所需数据,这样也可以很容易定位错误。
---------------------
1、mysql数据库设置数据库主键自增的规律
·第一,在主键字段上增加 AUTO_INCREMENT
`id` int(8) NOT NULL AUTO_INCREMENT COMMENT '主键',
·第二,默认表的第一条数据是从1开始计数的,但是在建表语句中是可以修改这个起始值的,比如下面就是设置为11为基值,下一次插入的是12
CREATE TABLE 'table_name'(
)ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT='某某表'
而且通过可视化工具可以发现,这个基本值一直是在变化的,即每次增加一个,这个自动增量的意思是,当自动插入下一个数据时,主键的为8
2、问题描述
在一个操作过程中,出现了这样的描述,即6这个主键在数据库中已经存在了
Duplicate entry '6' for key 'PRIMARY'
3、问题分析
网上大概说明有这么几种情况
1、数据库该字段已经自增到了最大值
2、数据库表结构损坏(一般是由于频繁手动修改数据导致的)
3、由于手动插入了较大数据,导致mysql自增到这个较大数值时主键重复了
4、问题复现
很遗憾在后来的操作中,问题并没有能够复现 但是在一个相隔很多天的试验中出现了另外一个问题
开始主键是自增的,一致自增到了5,后来修改了数据库基数为100
然后自增了一些数据
过来两天,再次执行自增的时候居然报错了,而且不是明显的错误
后来把100等之后添加的数据删除,自增测试程序又正常了
5、问题总结
对于mysql 数据库而言,在自增主键的时候,手动修改数据要比较慎重,最好遵循三个原则
1、手动添加数据和自动添加数据不要混淆,即手动的就是手动的,避免和自动添加数据的主键重复
2、手动更改数据的时候,不要更改主键,只是修改其余字段
3、自增数据情况下,不要修改表的自增基数
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛