Mysql 主键上的自动增量已损坏?

Mysql 主键上的自动增量已损坏?,mysql,Mysql,我不知道如何解决这个问题,我已经转储并重新创建了数据库(根据其他地方的答案),尝试手动插入128。。。并尝试删除127,然后重试。:/我想不出来 Copied this from the query I just tried: INSERT INTO `bestofthebest2`.`Topics` (`topicid`, `category`, `topic`) VALUES ('128', '', ''), (NULL , '', '') MySQL said: Documentat

我不知道如何解决这个问题,我已经转储并重新创建了数据库(根据其他地方的答案),尝试手动插入128。。。并尝试删除127,然后重试。:/我想不出来

Copied this from the query I just tried:
INSERT INTO  `bestofthebest2`.`Topics` (`topicid`, `category`, `topic`)
VALUES ('128', '', ''), (NULL ,  '',  '')
MySQL said: Documentation

#1062 - Duplicate entry '127' for key 'topicid' 
第一:

然后将结果作为$result:

ALTER TABLE `bestofthebest2`.`Topics` AUTO_INCREMENT = $RESULT;

topicid
a
TINYINT
的数据类型是偶然的吗?有符号tinyint可以保存的最大值为127。此外,MySQL有一个相当奇怪的(在我看来)溢出行为,它只是对溢出进行取整,而不是出错。发生的事情是,它试图增加到128,但是溢出了,所以它变为127。因为127已经存在,所以它会出错

这可以很容易地重新创建:

CREATE TABLE test ( id TINYINT AUTO_INCREMENT PRIMARY KEY );
INSERT INTO test (id) VALUES (128);
-- A select will show you a row with id = 127
INSERT INTO test (id) VALUES (128);
-- ERROR 1062 (23000): Duplicate entry '127' for key 'PRIMARY'
最简单的修复方法是使用更大的数据类型。有符号整数将为您提供2^31-1个值,因此,除非您计划拥有超过20亿个主题,否则它应该可以很好地工作:

ALTER TABLE bestofthebest2 CHANGE topicid topicid INT NOT NULL; 

还尝试删除整个id列并将其重新添加为主、自动增量。。。这为我多买了几行,因为我删除了一些行,但在1270处再次停止,可能是重复的,可能是我做错了#1064-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“$RESULT”附近使用的正确语法。您需要插入第一个查询的结果,而不是第二个查询的$RESULT。我试图将其作为子选择提供给您,但我的MySQL不接受ALTER TABLE查询的子选择,它没有返回任何行。嗯。。。我想我现在把事情搞砸了。我想也许我应该删除id,然后尝试完成获取主题,然后添加它,但是#1062年的今天,ALTER TABLE导致自动增量重新排序,导致键“PRIMARY”的重复条目“127”,这到底是怎么发生的?它会在我的其他桌子上这样做吗?ughhhs从
bestofbest2
主题中选择MAX(topicid)+1;不返回任何行?除非我不理解或做得不对。现在我甚至不能添加主键。我讨厌这个项目。哈哈。我不明白为什么它会停在127或“重新排序”,就像你在读我们关于另一个答案的对话;)@trex005我真的很幸运(以一种扭曲的方式),因为我不久前遇到了这个问题。我有一个表,该表的int主键达到最大值,在长时间注视一条非常奇怪的错误消息后,我意识到“复制”键正好出现在一个有符号整数的最大值上。MySQL真的应该在这种情况下出错,而不是四舍五入:/。你真是个天才!在这里,我只是疯狂地删除表格,并重新创建它,以为我会得到不同的结果。:)多谢各位
ALTER TABLE bestofthebest2 CHANGE topicid topicid INT NOT NULL;