mysql报错ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'
创建表语句:
CREATE TABLE `mytable` (
`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`col` varchar(50) NOT NULL DEFAULT '未知',
`col1` int(11) NOT NULL DEFAULT '未知',
`col2` varchar(45) DEFAULT NULL,
`col3` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
ALTER TABLE mytable MODIFY id int(11) COMMENT '自增长序列';
ALTER TABLE mytable MODIFY col varchar(50) COMMENT '学生姓名';
ALTER TABLE mytable MODIFY col1 int(11) COMMENT '学生年龄';
ALTER TABLE mytable MODIFY col2 varchar(45) COMMENT '学生班级';
ALTER TABLE mytable MODIFY col3 timestamp COMMENT '入学时间';
1、报错
执行插入数据语句,出现如下错误信息:
insert into mytable(col,col1,col2) values('张三',15,'高一1班')
,('李四',16,'高二2班')
,('王五',17,'高三3班');
ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'
2、原因分析
查看结果插入第一条数据,0 张三 15 高一1班 2023-07-08 12:06:34
主键为0,以后再增加数据,就出现如上错误,看信息是以后每次增加数据,其主键都为0,所以导致这个错误。
深入分析后发现是ALTER TABLE mytable MODIFY id int(11) COMMENT '自增长序列';
语句问题。该语句执行后id列将被修改为INT(11)数据类型,并添加了一个注释(COMMENT)'自增长序列'。
AUTO_INCREMENT被覆盖,而int(11)初始值为0,如果不为空默认值每次都将添加0,故而出现上述错误。
3、解决方法
ALTER TABLE mytable MODIFY id int(11) AUTO_INCREMENT COMMENT '自增长序列';
4、总结
AUTO_INCREMENT是MySQL中用于自动递增生成唯一标识符的属性。
如果出现AUTO_INCREMENT被覆盖,可能是由于以下原因之一:
1、使用了ALTER TABLE语句修改了表结构:如果使用ALTER TABLE语句修改了表结构,可能会导致AUTO_INCREMENT属性被重置或删除。在修改表结构时,需要特别注意是否保留了AUTO_INCREMENT属性。
2、手动插入了具有指定ID值的行:如果手动插入了具有指定ID值的行,并且该ID与AUTO_INCREMENT的计数器冲突,那么下一个AUTO_INCREMENT的值将会从该指定ID值开始。
为了解决AUTO_INCREMENT被覆盖的问题,可以尝试以下方法:
1、使用ALTER TABLE语句重新添加AUTO_INCREMENT属性:可以使用ALTER TABLE语句来为表添加AUTO_INCREMENT属性。例如:
ALTER TABLE 表名 MODIFY 列名 INT AUTO_INCREMENT;
这将为指定的列重新添加AUTO_INCREMENT属性。
2、清空表并重新设定AUTO_INCREMENT值:可以首先清空表中的所有数据,然后使用ALTER TABLE语句设置AUTO_INCREMENT的初始值。例如:
TRUNCATE TABLE 表名;
ALTER TABLE 表名 AUTO_INCREMENT = 新的初始值;
这将清空表数据并重新设定AUTO_INCREMENT的初始值为指定的值。
请注意,在执行任何表结构修改操作或涉及数据变动的操作前,强烈建议备份重要的数据。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析