今天在使用数据库的过程中,发现一直报duplicate entry for key primary的错误,如下图所示:
在这里插入图片描述
这个问题直译过来就是主键设置重复,或者说是主键冲突,因为第一次碰到这样的问题,有些不明所以,就在网上查了一些资料,发现了这么一篇文章 ======> 这是文章链接
其中说到这种情况的可能原因有两种:

  • 主键没有设置自增
  • 插入线程频率较高,没有处理好事务,造成插入sql执行顺序混乱

该文章中也给予了对应的解决方案,可以参考。

不过这篇文章中所说到的情况并不适应于我今天遇到的问题,不过给了我一点启发,在查看数据库定义的过程中,发现id的类型是int(11),然后我就查了一下int(11)所能表示的最大值,然后找到了这个:
在这里插入图片描述
参考链接
然后我查看了一下数据库的条目个数,发现已经到达了2147483647,如下图所示:
在这里插入图片描述

这一下就找到了问题所在,这张表格里面能够存放的条目个数已经达到了最大值,此时id无法继续增加,这就导致默认还会使用2147483647这个id,这就造成了主键冲突

解决方法就是将这个id的类型从int变成了bigint

CREATE TABLE IF NOT EXISTS xxxxxxxxxxxx
(
	id 	BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, 	#主键
	......
);

主键冲突其他参考链接
数据库长度其他参考链接
int、bigint参考率链接

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐