В зависимости от того, какой режим SQL вы используете, MySQL делает одну из двух вещей, когда значение числового столбца AUTO_INCREMENT
выходит за пределы диапазона. Вы получаете ошибку в любом случае, но по разным причинам.
В строгом режиме MySQL отклоняет значение вне диапазона, выдает ошибку недопустимого значения, и INSERT
завершается ошибкой. В стандартном нестрогом режиме MySQL уменьшает значение до максимально допустимого для типа данных и выполняет INSERT
. Но INSERT
терпит неудачу, потому что атрибут AUTO_INCREMENT
привел к тому, что все возможные значения уже используются, и вы получаете эту ошибку (неподписанный SMALLINT
пример):
MySQL said:
#1062 - Duplicate entry '65535' for key 1
Для примера BIGINT
замените «65535» на 18 квинтиллионов, хотя вряд ли эта ошибка когда-либо возникала в производственной базе данных.
Но с TINYINT
s и SMALLINT
s это может произойти очень легко, если вы недооцените возможные значения ключа (число INSERT
s) в течение срока службы приложения. Представьте, что вы вносите изменения в свой код и проверяете, что ваши данные вставляются правильно. Внезапно ваше приложение перестает работать с ошибкой выше. Вы откатываете изменения в известный хороший код, но ошибка не исчезнет ... очень расстраивает.