mysql无法从存储引擎读取自动增量值

时间:2011-09-08 10:56:14

标签: mysql database auto-increment

我正在使用一个id字段作为自动增量的mysql表。

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

  

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

此外show table status向我显示自动增量字段

18446744073709551615为Auto_increment值。

任何人都能帮助我的问题是什么??

18 个答案:

答案 0 :(得分:27)

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

ALTER TABLE `table_name`  AUTO_INCREMENT = 1

答案 1 :(得分:14)

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

答案 2 :(得分:13)

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

Duplicate entry '127' for key 'PRIMARY'

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

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

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

希望能帮助某人:)

答案 3 :(得分:7)

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

答案 4 :(得分:5)

实际上,您只需更改列即可删除其auto_increament属性,并再次将其设置为auto_increment。在我这边,这种方式确实有效。

答案 5 :(得分:3)

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

ALTER TABLE `table_name`  AUTO_INCREMENT = 6221;

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

答案 6 :(得分:2)

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

我通过删除自动增量,保存了表,然后再次添加自动增量来解决了这个问题。

答案 9 :(得分:0)

今天,当我尝试将记录插入名为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,这是个好值。

此后一切...

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

答案 12 :(得分:0)

我已解决此问题,请取消选中该字段的AUTO_INCREMENT选项,然后再次检查

答案 13 :(得分:0)

我遇到了问题,将auto_increment设置为0,但是显式设置auto_increment无效(保持为0)。 我手动输入了带有ID的条目,然后此值被正确设置。

答案 14 :(得分:0)

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

答案 15 :(得分:-1)

我发现参数已启用。它不应该超过' 1'根据数据库专家......

在我的情况下,它被设置为' 4',如下所示。

的MySQL>选择@@ innodb_force_recovery; + ------------------------- + | @@ innodb_force_recovery | + ------------------------- + | 4 | + ------------------------- +

因此,我确实重启了mysql而没有在启动时传递参数,

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

答案 16 :(得分:-1)

我遇到了同样的问题。

原因:我已使用主键和自动增量属性更改了表格字段的名称,因为自动增量已停止工作且出现错误1467.

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

  1. 转到'结构'表格的标签,然后点击' indexex'如图1所示。
  2. 现在编辑主键,如图1所示。
  3. 只需单击图像2中的Go。
  4. Image 1

    Image 2

    它对我有用。

答案 17 :(得分:-2)

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