mysql 主键自增 但是报主键重复的异常问题探究- Duplicate entry

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

mysql 主键自增 但是报主键重复的异常问题探究- Duplicate entry_第1张图片

 

2、问题描述

在一个操作过程中,出现了这样的描述,即6这个主键在数据库中已经存在了

 Duplicate entry '6' for key 'PRIMARY'

 

3、问题分析

网上大概说明有这么几种情况

1、数据库该字段已经自增到了最大值

2、数据库表结构损坏(一般是由于频繁手动修改数据导致的)

3、由于手动插入了较大数据,导致mysql自增到这个较大数值时主键重复了

 

4、问题复现

很遗憾在后来的操作中,问题并没有能够复现

但是在一个相隔很多天的试验中出现了另外一个问题

 

开始主键是自增的,一致自增到了5,后来修改了数据库基数为100

然后自增了一些数据

过来两天,再次执行自增的时候居然报错了,而且不是明显的错误

后来把100等之后添加的数据删除,自增测试程序又正常了

 

5、问题总结

对于mysql 数据库而言,在自增主键的时候,手动修改数据要比较慎重,最好遵循三个原则

1、手动添加数据和自动添加数据不要混淆,即手动的就是手动的,避免和自动添加数据的主键重复

2、手动更改数据的时候,不要更改主键,只是修改其余字段

3、自增数据情况下,不要修改表的自增基数

 

6、修改自增基数

alter table table_name alter ID restart with 25

 

 

 

 

 

 

你可能感兴趣的:(mysql 主键自增 但是报主键重复的异常问题探究- Duplicate entry)