在mysql中插入数据时出现此错误:
错误号码:1467 无法从存储引擎读取自动增量值
我现在不知道如何解决这个问题,欢迎任何帮助。
答案 0 :(得分:9)
经过一番搜索后,我找到了答案并解决了我的问题。
运行此sql查询它将解决问题
ALTER TABLE `YOUR_TABLE` AUTO_INCREMENT =1
答案 1 :(得分:5)
我也收到了这条消息。我的问题是我的表没有按索引排序。请尝试使用以下内容:
ALTER TABLE `YOUR-TABLE` ORDER BY `index` ;
答案 2 :(得分:4)
为kiddingmu的答案添加一点评论:它不仅仅是数字的问题,而且还是数据类型范围的问题。 如果列是INT(11),则11表示11位用于显示;但是这不会释放INT只能在签名时编码范围-2147483648:2147483647,以及在无符号时编码范围为0:4294967295的约束。
所以:对于INT(11)列,AUTO_INCREMENT为10000000000将起作用; AUTO_INCREMENT为90000000000不会,尽管它是11位数。
如果需要更大的范围,则应使用其他类型,例如BIGINT。
答案 3 :(得分:3)
此行为的一种可能解释是自动增量值已达到数据类型的最大值,并且数据库引擎无法将其递增1。
我建议你查看当前值。一种相对简单的方法是运行SHOW CREATE TABLE mytable;
,表定义将显示当前值。 (您还可以查询information_schema.tables视图,以获取相同的信息。)
答案 4 :(得分:1)
正如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。
答案 5 :(得分:0)
正确检查数据库结构。 我也遇到过这个问题,但我在数据库结构中发现了一些错误。修复结构后,问题得到解决。
答案 6 :(得分:0)
此错误的另一种可能性是您已经在ID字段(通常是INT)中达到最大值。当我们的ID值接近4294967295时,我们遇到了这个错误。我们最终不得不从表中删除ID以便解决问题。此答案中提到了各种INT字段:https://stackoverflow.com/a/5634147/4573630
答案 7 :(得分:0)
在将ID列更改为id之后,并且在导出数据库之后,我遇到了同样的问题,所以我只是将列切换回ID,然后又重新切换回id,之后一切正常。在laravel中使用elequent orm时,它期望列ID并且我具有列ID,这就是为什么我首先更改它的原因
答案 8 :(得分:0)
**对我来说是自动递增 ID(列)导致了错误 ** 我只是做来解决它是我删除(删除)ID 列并再次添加它。
答案 9 :(得分:-1)
import javax.management.openmbean.*;