出现Duplicate entry "1" for key "PRIMARY"怎么解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了出现Duplicate entry "1" for key "PRIMARY"怎么解决?相关的知识,希望对你有一定的参考价值。

解决方案:

首先我们用mysql自带的可视化管理工具MySQL WorkBench打开数据库及表格,出现此问题的主要原因是主键已经有了名为“XXX”的那项,实际上我写的代码并没有重复也会弹出此报错,下面我们看一下我自己的解决方案。

双击红框中选项,填好相应配置,进入后点击如图所示先创建数据库(此操作必须在MySQL已经启动情况下)左下角SCHEMAS底下就是你的数据库名字,先双击拉出TABLE,在TABLE上右键创建新表。

解决方案:

    将主键设置为自动增长。可以在数据库手动将相关表设置ID为自增长

    手动将表设置为自增长有弊端,建议在annotation里边的POJO类使用注解方式设置自增长。mysql的数据库如图所示设置。

    保存执行即可解决问题

    查看数据库,果然自增了

参考技术A 当我们用navicat工作时,会出现Duplicate entry "1" for key "PRIMARY"的错误,网上有很多解决的办法,我这里有两个解决方法,希望对你们有用。
1,“primary”顾名思义是主键的问题,可以将这张表设为无主键,就是把主键给删了不要了,但是这种方法不怎么好用,存在一些bug,而且大部分数据表都是需要主键的,所以不太推荐大家使用这种方法。
2,因为主键(primary)是唯一的,但我们点击刷新或运行的时候,系统就会认为我们又创建一个主键,导致出错,解决办法:我们可以输入“DELETE FROM Table_name”,delete语句是MySQL常用的删除操作,我们可以用它删除表中的所有记录,delete语句运行之后,这样所有的记录全部删除了,我们可以再重新在设一个主键,就OK了,切记我们不要频繁的点击刷新和运行,要当我们代码写得差不多了,再点击刷新或运行,不然还会出现这种问题,不过用delete语句就可以了,只要你不嫌麻烦就行。
第一次写文章,我是很想帮助大家,仅拼个人理解,第二个方法是和同学们交流学习得来的,所以一些不足之处,希望大家多多担待。谢谢!

java向数据库插入数据时的错误: Duplicate entry '' for key 'PRIMARY' 是啥问题,怎么解决,先谢啦!

String Sno=new String("2009211123");
String Sname=new String("小明");
String Sex=new String("M");
Statement statement = conn.createStatement();
String sql = "insert into student(SNO,SNAME,SEX) values(Sno,Sname,Sex)";
statement.executeUpdate(sql);

是代码输入错误造成的,解决方法如下:

1、需要重新配置数据库,首找到数据库安装目录下的MySQLInstanceConfig.exe,双击打开。

2、打开之后,前面步骤默认就行,到了图片所示的地方,修改字符集为utf-8。

3、然后点击下一步,如下图所示。

4、最后重启数据库。在代码中连接数据库部分加上?characterEncoding=utf8,这样问题就解决了。

参考技术A mysql主键设置成auto_increment时,进行并发性能测试出现主键反复Duplicate entry 'xxx' for key 'PRIMARY'
解决方法:
在my.cnf的[mysqld]片段中加入设置innodb_autoinc_lock_mode=0
同一时候注意调大jdbc的活跃链接数,如设置 jdbc.maxActive=300,由于设置innodb_autoinc_lock_mode=0可能导致链接过多。
注意,这样的方式仅仅须要在并发性能测试时设置,由于这样的方式在插入记录时需进行全表锁定,性能较差,平时生产环境中仅仅需使用默认的设置innodb_autoinc_lock_mode=1就可以,mysql的官方文档有说明:
1、innodb_autoinc_lock_mode = 0 (“traditional” lock mode)
这样的方式就和mysql5.1.22曾经一样,这样的方式的特点就是“表级锁定”,并发性较差
2、innodb_autoinc_lock_mode = 1 (“consecutive” lock mode)
这样的方式是新版本号中的默认方式,推荐使用,并发性相对较高,特点是“consecutive”,即保证同一条insert语句中新插入的auto_increment id都是连续的。
这样的模式下:
“Simple inserts”:直接通过分析语句,获得要插入的数量,然后一次性分配足够的auto_increment id,仅仅会将整个分配的过程锁住。
“Bulk inserts”:由于不能确定插入的数量,因此使用和曾经的模式同样的表级锁定。
“Mixed-mode inserts”:直接分析语句,获得最坏情况下须要插入的数量,然后一次性分配足够的auto_increment id,仅仅会将整个分配的过程锁住。须要注意的是,这样的方式下,会分配过多的id,而导致”浪费“。比方INSERT INTO t1 (c1,c2) VALUES (1,’a'), (NULL,’b'), (5,’c'), (NULL,’d');会一次性的分配5个id,而无论用户是否指定了部分id;INSERT … ON DUPLICATE KEY UPDATE一次性分配,而无论将来插入过程中是否会由于duplicate key而只运行update操作。
注意:当master mysql版本号<5.1.22,slave mysql版本号>=5.1.22时,slave须要将innodb_autoinc_lock_mode设置为0,由于默认的 innodb_autoinc_lock_mode为1,对于INSERT … ON DUPLICATE KEY UPDATE和INSERT INTO t1 (c1,c2) VALUES (1,’a'), (NULL,’b'), (5,’c'), (NULL,’d');的运行结果不同,现实环境通常会使用INSERT … ON DUPLICATE KEY UPDATE。
3、innodb_autoinc_lock_mode = 2 (“interleaved” lock mode)
这样的模式是来一个分配一个,而不会锁表,仅仅会锁住分配id的过程,和innodb_autoinc_lock_mode = 1的差别在于,不会预分配多个,这样的方式并发性最高。可是在replication中当binlog_format为statement-based时 (简称SBR statement-based replication)存在问题,由于是来一个分配一个,这样当并发运行时,“Bulk inserts”在分配的时会同一时候向其它的INSERT分配,会出现主从不一致(从库运行结果和主库运行结果不一样),由于binlog仅仅会记录开始的 insert id。
参考技术B 很清楚,数据表中设置了主键(Primary Key),而主键对应的值是不允许重复的。
错误提示为:你插入的记录与数据表中原有记录的主键重复了(Duplicate)。所以插入失败。
满意请给分。
参考技术C 错误是说你重复插入了primary key.应该是你插入的数据和表里的数据有冲突,检查一下你表的主键,然后看看表里是否有你要插入的数据中包含的primary key. 参考技术D 新插入数据的主键的字段值和数据库中的数据重复

以上是关于出现Duplicate entry "1" for key "PRIMARY"怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章

pymysql.err.IntegrityError: (1062, "Duplicate entry 'roxml-ROXML' for key 'PRIMARY&

mysql插入数据报错IntegrityError: (1062, "Duplicate entry 'xx' for key 'xxxxx'")

导入数据库出现#1062 - Duplicate entry '1' for key 1 怎么解决啊!

导入数据库出现#1062 - Duplicate entry '1' for key 1 怎么解决啊!

mysql IntegrityError: (pymysql.err.IntegrityError) (1062, "Duplicate entry '000001.SZ-2018-

Duplicate entry &#39;97112&#39; for key 1