2015-01-30 3 views
1

Я понятия не имею, как это исправить, я сбросил и воссоздал базу данных (за какой-то ответ в другом месте), попытался вручную вставить 128 ... и попытался просто удалить 127 и попытался снова. :/Не могу понять это.Неисправность auto_increment на первичном ключе?

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

попытался также удалить весь столбец ID и повторно добавить его в качестве основного , auto_increment ... Это купило мне еще несколько строк из-за того, что я удалил, но остановился снова на 127 –

ответ

0

Первое:

SELECT MAX(topicid)+1 FROM `bestofthebest2`.`Topics`; 

Затем с результатом в $ РЕЗУЛЬТАТ:

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

Возможно, я сделал это неправильно? # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «$ RESULT» в строке 1 –

+0

Вам нужно подключить то, что вы получили в качестве результата от первого запроса вместо $ RESULT во втором запросе , Я попытался предоставить его вам как подзапрос, но мой MySQL не принял подзапрос для запроса ALTER TABLE. – trex005

+0

Он не возвращал никаких строк. Хм ... Думаю, я испортил это плохо. Я подумал, может быть, я удалю идентификатор и попытаюсь закончить получение тем, а затем добавить его, но ... # 1062 - ALTER TABLE вызывает повторное выравнивание auto_increment, в результате чего дублируется запись '127' для ключа 'PRIMARY' Как это происходит в мире? Будет ли это делать на моих других столах? UGHHHH –

2

тип данных topicid в 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 значения, так что если вы не планируете иметь более чем 2 темы billionish, он должен хорошо работать:

ALTER TABLE bestofthebest2 CHANGE topicid topicid INT NOT NULL; 
+1

Как будто вы читали нашу беседу по другому ответу;) – trex005

+0

@ trex005 Мне действительно повезло (в скрученном виде), в котором я столкнулся с этим Некоторое время назад. У меня была таблица с первичным ключом int до максимального значения, и после долгого момента, когда вы смотрели на очень странное сообщение об ошибке, я понял, что ключ «duplicate» произошел с максимальным значением целого числа со знаком. MySQL в этом случае должен ошибаться, а не округлять: /. – Corbin

+0

Ты гений! Здесь я просто дико удалял стол и воссоздавал его, думая, что у меня получится другой результат. :) Огромное спасибо –

Смежные вопросы