今天在使用数据库的过程中,发现一直报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, #主键
......
);