首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mySQL自动递增问题:键1的条目'4294967295‘重复

mySQL自动递增问题:键1的条目'4294967295‘重复
EN

Stack Overflow用户
提问于 2010-03-31 03:18:05
回答 7查看 7.7K关注 0票数 1

我有一大堆电子邮件。

自动增量id的最后一条记录是3780,这是一条合法记录。我现在插入的任何新记录都会被插入到那里。

然而,在我的日志中,我偶尔会:

代码语言:javascript
复制
Query FAIL: INSERT INTO mail.messages (timestamp_queue) VALUES (:time);
Array
(
    [0] => 23000
    [1] => 1062
    [2] => Duplicate entry '4294967295' for key 1
)

不知何故,自动增量跳到了INT的4294967295

为什么在上帝的绿色地球上,这个东西会跳得这么高?我没有带有id字段的插入。

Auto_increment表显示状态现在显示为: 4294967296

怎么会发生这样的事情呢?我意识到id字段可能应该是一个大的int,但我担心的是这个东西不知何故会跳回来。

乔希

编辑:更新

mysql版本5.0.45 red hat已修补

由于我将id设置为BIGINT,所以最后几个id如下所示:

代码语言:javascript
复制
3777
3778
3779
3780
4294967295
4294967296
4294967297
4294967298
4294967299
4294967300

正如您所看到的,它们是增量的,(到目前为止)没有差距。太奇怪了。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-03-31 07:50:28

我还不完全清楚这里发生了什么,但我想我会跟进的。

在我的持久性引擎中,我有一个具有自动增量id的对象类型,以及一个具有GUID的子类。

显然,这两者是不相容的。我有理由将对象转换为其父对象,然后保存它(基本上,子类是一个具有附加功能的电子邮件模板,但当我想实际发送电子邮件时,我将其转换为父对象并将其保存到常规的外发邮件队列中)。愚蠢的是,我没有意识到id格式是不同的。这导致尝试将长度为36个字符的字符串的记录插入到int中。字符串在准备好的语句中解析为'0‘,无论出于什么原因,这都会导致自动增量系统损坏,并在原始表上最大限度地耗尽INT自动增量id字段。

长话短说,幸好我在记录日志。

乔希

票数 2
EN

Stack Overflow用户

发布于 2012-08-08 15:29:40

我用完全相同的数字也遇到了同样的问题。我的问题是,当我将字段改为bigint(20)时,我在int(10)上设置了该字段,这就解决了我的问题。

如果其他人也有这个问题。首先检查您的字段大小。:)

票数 5
EN

Stack Overflow用户

发布于 2018-05-21 17:28:19

当您意外插入新记录并提供auto_increment值时,通常会发生这种情况。

大多数情况下,这是因为您有一个名称类似的列,并且输入错误导致auto_increment值更新为您提供的值,如果您提供的是字符串而不是int值,则为4294967295。

要解决此问题,请执行以下操作:

  • 删除pk值为4294967295的记录,
  • 通过运行

检查最大增量值是多少

从tableNameHere中选择最大值(AutoincrementColumNameHere)

  • 通过运行

更新您的AUTO_INCREMENT值

ALTER TABLE tableNameHere AUTO_INCREMENT = (maxValue+1)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2548003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档