Los entresijos de la falla son más o menos así: en una noche negra de fuertes vientos, el programador presionado se despertó con un mensaje de alarma repentino, que era un problema con la base de datos, aunque la operación de consulta era normal. Sin embargo, la operación de creación no se realizó correctamente. Después de la depuración, el motivo fue que la tabla se insertó con una fila de datos de problemas y el valor del campo de autoincremento se estableció explícitamente en el valor máximo del entero, lo que provocó que no se obtuvieran los datos insertados subsiguientes por defecto. Ir a un valor de clave primaria legal.
También podríamos crear una tabla de prueba para ilustrar el problema:
CREAR TABLA SI NO EXISTE `test` (` id` int (11) NOT NULL AUTO_INCREMENT, `name` varchar (100) NOT NULL , TECLA PRINCIPAL (`id`)) MOTOR = InnoDB;Luego inserte una fila de datos de problemas:
INSERT INTO test (id, nombre) VALUES (2147483647, 'x');resultados No se puede ejecutar la instrucción de inserción normal:
INSERT INTO test (name) VALUES ('y');La base de datos informará un error:
# 1062 – Entrada duplicada ‘ 2147483647 &rsquo Para la clave ‘ PRIMARIA ’
En otras palabras, el tipo de tabla InnoDB mantiene internamente un contador para el campo Incremento automático para proporcionar un identificador único necesario para las siguientes inserciones. Cada vez que se insertan nuevos datos, el valor del contador se actualiza a MAX + 1. Si inserta datos identificados de forma exclusiva como 2147483647, el contador no se actualizará correctamente porque ha alcanzado el límite superior del tipo de datos INT.
Dado que se ha aclarado el motivo del problema, el primer sentimiento es restablecer el contador del campo Incremento automático a un valor razonable. Podemos intentar ejecutar la siguiente declaración después de eliminar los datos del problema:
< Pre> ALTER TABLE test AUTO_INCREMENT = 123;Sin duda, este método puede lograr el objetivo, pero hay una desventaja: en MySQL, cuando ALTER una tabla, ¡en realidad es equivalente a recrear una tabla! Si los datos originales son grandes, el proceso será muy lento.
Consideremos otros métodos. Dado que el problema radica en la configuración implícita del identificador único, es posible que deseemos cambiar la idea y establecer explícitamente el identificador único, por ejemplo, mediante "SELECT MAX … FOR UPDATE". La forma en que la consulta directa obtiene un identificador único y se establece explícitamente en la instrucción INSERT que se ejecuta más adelante.
Sin embargo, este método no es lo suficientemente transparente para modificar el código de negocio. Un método más transparente es usar un activador:
CREAR TABLA seq (`id` int (11) NOT NULL AUTO_INCREMENT,` created `timestamp NOT NULL, PRIMARY KEY (` id`)) Motor = InnoDB; DELIMITER
win7 Hay muchos trucos. Si lo usas bien, puedes hacer que el sistema win7 obtenga una pequeña opt
La cola de espera en el kernel de Linux tiene muchos usos para el manejo de interrupciones, sincroni
busybox es un cuadro de comando de Linux que integra muchas herramientas y comandos que comprimen Li
Cómo realizar eficazmente la administración de parches de Linux Red Hat Linux OS El parche de
Git y Github primero usan tutoriales básicos
administración de sistemas Linux y mantenimiento de mando -fsck
Explique brevemente los cuatro niveles de intrusión del servidor Linux
Hable sobre el shell "> /dev /null 2 > &1"
Conocimiento relacionado con el arranque del sistema Linux
Cómo ver rápidamente el proceso pid
Arista Networks es un poco diferente
Yum instala el tutorial básico de Tomcat
Modificar la zona horaria utilizando la línea de comandos en Linux
Comandos comunes para la supervisión del rendimiento de Linux
Configurar la tabla de enrutamiento NIC dual en el sistema Linux
Windows 8.1 Actualización de accesos directos exclusivos gran inventario
Win10 RS1 Preview Edition 11082 Push! Soporte para extensiones Edge
Win10 servidor muestra de tecnología de imagen 10147 sistema para descargar
Los pasos específicos para instalar el sistema Windows XP de disco duro
El sistema Win8 elimina archivos grandes y siempre pregunta "eliminar completamente" cómo hacerlo
Actualización del sistema XP a Windows7 forma de elegir
Sistema Win7 instalado VMware-viclient error código 1935 solución