Dependiendo de SQL mode que esté utilizando, MySQL hace una de estas dos cosas cuando el valor de una columna numérica AUTO_INCREMENT
crece fuera del rango. Se obtiene un error en cualquier caso, pero por diferentes razones.
En modo estricto MySQL rechaza el valor fuera de rango, arroja un error de valor no válido y el INSERT
falla. En el modo predeterminado no estricto MySQL reduce el valor al más alto permitido para el tipo de datos, y realiza el INSERT
. Pero el INSERT
falla porque el atributo AUTO_INCREMENT
ha causado todos los valores posibles para estar ya en uso, y se obtiene este error (sin firmar SMALLINT
ejemplo):
MySQL said:
#1062 - Duplicate entry '65535' for key 1
Para el ejemplo BIGINT
aquí, sustituya el "65535" con 18 quintillones, aunque no es probable que este error haya ocurrido alguna vez en una base de datos de producción.
Pero con TINYINT
sy SMALLINT
s puede suceder muy fácilmente si se subestiman los posibles valores de clave (número de INSERT
s) durante la vida útil de una aplicación. Imagine que está haciendo cambios en su código y prueba que sus datos se inserten correctamente. De repente, su aplicación deja de funcionar con el error anterior. Retira los cambios al código bueno conocido, pero el error no desaparecerá ... muy frustrante.
Ok. No creo que mi aplicación dure tanto => 500 años. – ashitaka
Del mismo modo, si solo inserta una vez por segundo, su aplicación se ejecutará durante 68 años con un int. Firmado de 32 bits. Ahórrese 4 bytes por registro y use int int de 32 bits si puede. – jmucchiello
En segundo lugar. Hay cosas que necesitan más precaución al construir una base de datos. – Tomalak