主键上的auto_increment损坏了吗?

时间:2015-01-30 03:57:29

标签: mysql

我不知道如何解决这个问题,我已经转储并重新创建数据库(根据其他地方的答案),尝试手动插入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' 

2 个答案:

答案 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;