【问题标题】:mysql Failed to read auto-increment value from storage enginemysql 无法从存储引擎读取自增值
【发布时间】:2011-11-12 21:36:11
【问题描述】:

我有一个 id 字段作为自动增量的 mysql 表。

当我向表中插入值时出现错误

1467 - 无法从存储引擎读取自增值

show table status 还告诉我,自动递增的字段有

18446744073709551615 作为 Auto_increment 值。

任何人都可以帮我解决什么问题......?

【问题讨论】:

  • 发布您的表定义,让我们看看为哪个数据类型分配了字段

标签: mysql database auto-increment


【解决方案1】:

我遇到了同样的错误,但在我的情况下,我的表中有大约 1.5k 条记录。 我通过像这样重置 AUTO INCREMEN 来修复它:

ALTER TABLE `table_name`  AUTO_INCREMENT = 1

【讨论】:

  • 我在 phpmyadmin 上说“0”。我将其设置为 1 并在第一次插入时全部返回到实际值
  • 为我工作。这个问题需要 Marco 的综合答案(当前已接受),因为解释和无穷大(这个答案)因为它是一个非常简单的解决方案。
  • 对我不起作用。所以也许不是万能的灵丹妙药。 Shinbo 的解决方案对我有用:就像关闭并重新打开计算机一样。但我有点想知道是什么导致了这种问题......!
  • 从未声称这是“终极”解决方案 :) 不过我很高兴你找到了答案。
  • 危险的,非常危险的解决方案。
【解决方案2】:

问题绝对可能是:将18446744073709551615转换为十六进制,你会发现
$FFFF-FFFF-FFFF-FFFF
如果您的字段是无符号 64 位,您将达到其限制。

【讨论】:

  • 这是字段ID int(11) NOT NULL AUTO_INCREMENT,并且该表中只有200行,字段ID的最大值为200
  • @ash:导出你的数据库(或简单的表),删除现有表并创建一个新表;然后将数据导入回来注意不要触摸自动增量值...
  • 实际上现在在删除表时遇到问题,因为字段 ID 用作外键我无法删除表。
  • @ash: 如果需要,请导出您的数据库并通过电子邮件发送给我...我会看看...
  • @Marco 我有这个问题,我的系统是64位的,如果我安装一个64位的mysql,这个问题是否已经解决了?
【解决方案3】:

几周前我在运行插入语句时开始收到此错误:

Duplicate entry '127' for key 'PRIMARY'

...即使我的表设置为自动递增。我进去并将 auto_increment 值从 127 更改为 128 然后我开始收到此错误:

1467 - Failed to read auto-increment value from storage engine

我最终发现该表最初是使用用于 ID 而非标准整数的 tinyint 列创建的......所以基本上它无法理解大于 127 的数字。我将列类型切换为正确的整数并解决了问题。

希望对某人有所帮助:)

【讨论】:

  • 帮了我!我整天都在用头撞这个,这让我更加头痛。
  • 这太完美了。确保检查数字的大小,因为 smallint 和 tinyint 的限制相对较小。
  • 你是救世主。
  • 与我遇到的错误序列完全相同。谢谢@Mike
【解决方案4】:

就我而言,我犯了一个愚蠢的错误。我之前更改了我的表并将AUTO_INCREMENT 列的名称从ID 更改为id。因此,给定列名区分大小写,后续插入无法找到原始列。

【讨论】:

    【解决方案5】:

    实际上,您可以简单地更改列以删除其auto_increament 属性并再次将其设置为auto_increment。就我而言,这种方式确实有效。

    【讨论】:

    • 然后在插入记录时会出现重复键错误(假设该列是唯一的和/或主键)。干得好。
    • @tombom,我想你可能误解了他的解决方案,但它确实有效并且不会导致重复键错误。
    【解决方案6】:

    我也犯了同样的错误。我只是更改表并增加我的自动增量字段的大小,然后运行以下查询 -

    ALTER TABLE `table_name`  AUTO_INCREMENT = 6221;
    

    其中 6221 是 Auto_increment 字段的最后一个值。

    【讨论】:

      【解决方案7】:

      不到一个小时前,我第一次遇到此错误。在 PHP MyAdmin 中使用 SQL 语句重置 auto_increment 失败。在寻找解决方案后,我放下桌子并创建了一个替代品。错误仍然存​​在。仔细观察发现 auto_increment 设置为 0 即使我在创建字段时专门设置了 primary_key 和 auto_increment。再次使用 PHP MyAdmin 手动将 auto_increment 重置为 1,消除了错误。对我来说幸运的是,我只使用了一个包含几行测试数据的 3 列表。

      【讨论】:

        【解决方案8】:

        我通过删除自动增量,保存表然后再次添加自动增量来修复它。

        【讨论】:

          【解决方案9】:

          我今天也遇到了这个问题。我有一个包含超过 200 万行的表,并在发生此错误时尝试使用 LOAD DATA 添加另外 140K 行。我切换到 MyISAM 引擎,一切正常。

          【讨论】:

            【解决方案10】:

            我遇到了同样的问题,解决方法是将列从 smallint(6) 更改为 int。

            【讨论】:

              【解决方案11】:

              我遇到了问题,auto_increment 设置为 0,但显式设置 auto_increment 不起作用(保持为 0)。 我手动输入了一个带有 ID 的条目,在此之后,值设置正确。

              【讨论】:

                【解决方案12】:

                我解决了这个问题,取消选中该字段的选项 AUTO_INCREMENT 并再次检查

                【讨论】:

                  【解决方案13】:

                  我的解决方法是更改​​表并将其重命名为 orignal_backup 并保存,然后再次将其重命名为原始表,这个技巧对我有用。

                  【讨论】:

                    【解决方案14】:

                    很容易修复它。截断表格并再次上传数据,错误消失。

                    【讨论】:

                      【解决方案15】:

                      今天,当我尝试将记录插入到名为 mytablename 的表中时,我遇到了同样的错误:

                      ERROR 1467 (HY000): Failed to read auto-increment value from storage engine
                      

                      在表中我只有 52269 条记录,max(id) = 52269。 我在 mysql 命令控制台下尝试了以下命令,但没有任何反应,错误仍然存​​在:

                      #
                      # set  AUTO_INCREMENT  = max(id) + 1: not work:
                      #
                      ALTER TABLE mytablename AUTO_INCREMENT = 52270;
                      

                      我必须找到另一个解决方案。当我这样做时:

                      SHOW TABLE STATUS FROM mydatabase WHERE `name` LIKE 'mytablename' ;
                      

                      说明我的Auto_Increment值为0,这明显是错误的,一定要大于等于1。

                      我修改了表格中的任何列,例如:

                      ALTER TABLE mytablename CHANGE COLUMN mycharfield mycharfield varchar(255) DEFAULT NULL AFTER id;
                      

                      我再次执行 show table status 命令,

                      Auto_Increment 的值已经自动改成了 52270,这个值不错。

                      从那以后一切都过去了……

                      【讨论】:

                        【解决方案16】:

                        我遇到了同样的问题。

                        原因:我用主键和自动增量属性更改了我的表字段名称,因此自动增量停止工作并出现错误1467。

                        对我有用的是重置 phpmyadmin 中的主键,如下所示:

                        1. 转到表的“结构”选项卡,然后单击“indexex”,如图 1 所示。
                        2. 现在编辑主键,如图 1 所示。
                        3. 只需点击图 2 中的 Go。

                        Image 1

                        Image 2

                        它对我有用。

                        【讨论】:

                        • 请在您的帖子中嵌入图片。如果从外部托管中移动或删除外部资源的链接,它们可能很容易被破坏。
                        【解决方案17】:

                        我发现该参数已启用。根据 DB-experts,它不应超过 '1'....

                        在我的例子中,它被设置为“4”,如下所示。

                        mysql> 选择@@innodb_force_recovery; +--------------+ | @@innodb_force_recovery | +--------------+ | 4 | +--------------+

                        因此,我确实在启动过程中没有传递参数就重新启动了mysql,

                        后来我能够插入或更新表格...希望它会帮助某人..

                        【讨论】:

                        • 你说的是什么参数?您是如何重新启动的?命令是什么?如何在启动期间启用/禁用参数?这个答案不清楚。
                        【解决方案18】:

                        我也有同样的问题。我有一张包含数千条记录的表。我只是将字段的类型从 int 更改为 bigint

                        【讨论】:

                          猜你喜欢
                          • 2014-02-11
                          • 2013-12-06
                          • 2015-01-27
                          • 2016-07-01
                          • 2013-07-15
                          • 2013-07-07
                          • 2010-12-14
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多