无法从存储引擎读取自增值,错误号:1467

Posted

技术标签:

【中文标题】无法从存储引擎读取自增值,错误号:1467【英文标题】:Failed to read auto-increment value from storage engine, Error Number: 1467 【发布时间】:2013-07-15 11:35:30 【问题描述】:

mysql 中插入数据时出现此错误:

错误号:1467 从存储引擎读取自增值失败

我现在不知道如何解决这个问题请任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

**对我来说,导致错误的是自动增量ID(列)** 我只是为了解决这个问题,我删除(删除)ID 列并再次添加它。

【讨论】:

【参考方案2】:

在将 ID 列更改为 id 并导出我的数据库之后,我遇到了同样的问题,所以我只是将列切换回 ID,然后再次切换回 id,之后一切正常。在 laravel 中使用 elequent orm,它需要列 id,而我有列 ID,这就是我首先更改它的原因

【讨论】:

【参考方案3】:

此错误的另一种可能性是您已达到 ID 字段中的最大值(通常是 INT)。当我们的 ID 值接近 4294967295 时,我们遇到了这个错误。为了解决这个问题,我们最终不得不从表中删除 ID。此答案中提到了各种 INT 字段:https://***.com/a/5634147/4573630

【讨论】:

【参考方案4】:
ps aux | grep mysql 
sudo kill (your pid) 
/etc/init.d/mysql restart

【讨论】:

重启MySql并没有解决这个问题。 除了这个答案与帖子无关之外,没有随附的评论。将指令重新启动 MySQL 而不说它们做了什么是有潜在危险的,因为它可能会破坏事情(如果用户是初学者,盲目地执行指令而不知道它们在做什么,如果 MySQL 不回来,他们可能无法解决问题上)。【参考方案5】:

正确检查你的数据库结构。我也遇到过这个问题,但是我发现数据库结构有一些错误。修复结构后,问题得到解决。

【讨论】:

【参考方案6】:

对kiddingmu 的回答添加一点评论:这不仅仅是位数的问题,还有数据类型范围的问题。 如果该列是 INT(11),则 11 表示 11 位用于显示;但这并没有解除 INT 在有符号时只能编码范围 -2147483648:2147483647 和无符号时 0:4294967295 的约束。

所以:对于 INT(11) 列,AUTO_INCREMENT 为 10000000000 将起作用; 90000000000 的 AUTO_INCREMENT 不会,尽管它是 11 位数字。

如果需要更大的范围,则应使用其他类型,例如BIGINT。

【讨论】:

【参考方案7】:

正如 spencer7593 所说,自动增量值已达到数据类型的最大值

我刚发现问题。

使用命令SHOW CREATE TABLE tablename;,我明白了

table name 
`id` int(11) NOT NULL AUTO_INCREMENT,
 ......
ENGINE=InnoDB AUTO_INCREMENT=100000000000 DEFAULT CHARSET=utf8 

你会看到 100000000000 的长度是 12,超出了限制 11。

【讨论】:

【参考方案8】:

我也收到了这条消息。我的问题是我的表没有按索引排序。尝试使用以下内容:

ALTER TABLE  `YOUR-TABLE` ORDER BY  `index` ;

【讨论】:

是的,谢谢,这有效,我花了比需要的时间更多的时间来找到这个解决方案,谢谢,谢谢【参考方案9】:

经过一番搜索,我找到了答案,它解决了我的问题。

运行这个 sql 查询它将解决问题

 ALTER TABLE `YOUR_TABLE`  AUTO_INCREMENT =1

【讨论】:

这是一个糟糕的方法。现有的行呢?考虑按照@spencer7593 的建议更改数据类型。 知道你将如何解决它会对其他人有很大帮助。您能否发布解决方案并将其标记为好的解决方案? 对于遇到此问题的人可能有用的是,在将 auto_increment 默认值添加到现有表时,首先检查是否已经存在稀疏(非您尝试将此属性添加到的字段存在的连续或离散值。对于我的情况,该字段中已经存在稀疏值,并且在尝试添加此错误时出现此错误。我必须 truncate 表,然后添加属性,因为那是一个测试数据库。但这可能不是我们许多人的解决方案。【参考方案10】:

对此行为的一种可能解释是自动增量值已达到数据类型的最大值,数据库引擎无法将其加一。

我建议您检查当前值。一种相对简单的方法是运行SHOW CREATE TABLE mytable;,表定义将显示当前值。 (您也可以查询 information_schema.tables 视图,以获取相同的信息。)

【讨论】:

以上是关于无法从存储引擎读取自增值,错误号:1467的主要内容,如果未能解决你的问题,请参考以下文章

mysql中的存储引擎

02-msyql-存储引擎

Mysql'从存储引擎得到错误-1'错误

MySQL之存储引擎大全 -《从0到1-全面深刻理解MySQL系列-第五篇》

解决“错误代码:1030。从存储引擎 MEMORY 收到错误 1“不允许操作””

存储引擎。