我不知道如何解决这个问题,我已经转储并重新创建数据库(根据其他地方的答案),尝试手动插入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'
答案 0 :(得分:2)
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;
答案 1 :(得分:0)
首先:
SELECT MAX(topicid)+1 FROM `bestofthebest2`.`Topics`;
然后结果为$ RESULT:
ALTER TABLE `bestofthebest2`.`Topics` AUTO_INCREMENT = $RESULT;