Идентификатор автоматического увеличения MySQL внезапно перешел на MAXINT, в чем может быть причина?

У меня есть таблица MySQL с около 2 000 000 записей, с первичным ключом, который автоматически увеличивается. Однако в какой-то момент значение автоинкремента внезапно подскочило с того, что было (около 2 000 000) до максимального целочисленного значения (2 147 483 647). Излишне говорить, что все последующие вставки в эту таблицу не удалось. Когда я заметил это, я изменил тип первичного ключа с int на bigint, и сейчас он работает нормально.

Поэтому мой вопрос: почему это могло произойти? И есть ли какие-то меры предосторожности, которые я мог бы предпринять, чтобы этого не случилось в будущем?

 N.B.06 апр. 2012 г., 12:16
использованиеunsigned Кроме того, я сомневаюсь, что вам нужны отрицательные auto_increments.

Ответы на вопрос(2)

Решение Вопроса

Неудачная вставка может привести к увеличению столбца автоинкремента. Если ваша программа вошла в бесконечный цикл сбоев, это может привести к достижению предела.

Также возможно программно установить автоинкремент на конкретное значение.

ALTER TABLE yourtable AUTO_INCREMENT = 12345;

Одной из причин этого может быть

Если вы ввели случайные числа в столбец автоинкремента, то это может быть потому, чтоauto_increment работает только в порядке возрастания. Поэтому, когда вы вставили число, близкое к максимальному пределу, оно вскоре достигло максимального предела, и вы больше ничего не могли ввести.

 06 апр. 2012 г., 14:16
Это не имеет никакого смысла. Вы говорите, что из-за того, что автоинкремент всегда увеличивается, оно увеличивается до последнего при вставке случайного числа? Если это то, что вы говорите, это не правильно.
 06 апр. 2012 г., 14:27
@DMac извините за то, что я пропустил несколько слов, и вы неправильно поняли мой ответ, прочитайте его снова.
 06 апр. 2012 г., 14:39
@ N.B. Спасибо за хорошее объяснение моего неправильно написанного ответа ...
 06 апр. 2012 г., 14:35
@DMac - несмотря на то, что он объяснил это немного неуклюже, он прав, но ответ, скорее всего, были неудачные вставки, и они использовали цифры, которыеauto_increment производит. Голосование против этого отрицания, поскольку сам по себе ответ не является плохим.

Ваш ответ на вопрос