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

本文探讨了MySQL数据库中主键自增功能的工作原理及其可能导致的问题,包括自增基数的调整、主键冲突的原因及解决策略,并给出了手动修改数据时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、自增数据情况下,不要修改表的自增基数

 

6、修改自增基数

alter table table_name alter ID restart with 25

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值