MySQL Auto_increment va de 2 en 2


8

Instalé MySQL Workbench el otro día, accedí a la base de datos de mi empresa y me hice una mesa para trabajar. Hasta aquí todo bien. El problema es que noté que mi auto_increment está incrementando 2 por 2. Por ejemplo:

ID    NAME
1     Paul
3     Jack
5     Louis
7     John
...

Cuando lo hago SHOW VARIABLES LIKE 'auto_inc%'me sale esto:

'auto_increment_increment', '2'
'auto_increment_offset', '1'

Así que intenté establecerlo auto_increment_incrementen 1 con:

SET @@auto_increment_increment=1

Y después de verificar nuevamente con SHOW VARIABLES LIKE 'auto_inc%'Confirmé que "funcionó" con el resultado:

'auto_increment_increment', '1'
'auto_increment_offset', '1'

Pero mis identificaciones todavía se están incrementando en 2 por 2 .

La primera vez que lo hice, funcionó bien y luego cerré MySQL Workbench para darme cuenta de que cuando lo abrí nuevamente, auto_increment_incrementestaba configurado en 2 nuevamente. Ahora estoy tratando de hacerlo de nuevo, pero parece que ya no funciona.

¿Puede alguien ayudarme con esto, por favor?

Gracias chicos.


2
Tendría cuidado de cambiar este valor sin comprender completamente por qué el entorno de nuestra empresa establece eso. Es una variable común cambiar cuando se ejecuta en una configuración de replicación multimaestro, por ejemplo. Además, ¿podemos obtener una declaración SHOW CREATE TABLE para la tabla con la que está probando (probar en producción también es una mala idea, por cierto)
Derek Downey,

Esto merece ser una respuesta, creo. O para ser agregado en uno existente, lo que prefiera. La mejor acción es la acción cautelosa, o ninguna acción en absoluto, para los DBA que desean mantener su trabajo.
ypercubeᵀᴹ

Respuestas:


7

El prefijo que se usó:

SET @@auto_increment_increment=1;

Es lo mismo que:

SET @@SESSION.auto_increment_increment=1;

Al modificar esta configuración, solo se vuelve relevante en su sesión actual.

Para hacer una solución más permanente, intente:

SET GLOBAL auto_increment_increment=1;

Es lo mismo que:

SET @@GLOBAL.auto_increment_increment=1;

Huh, pensé que @@ era el atributo de la sesión. Del manual de mysql: "Para indicar explícitamente que una variable es una variable de sesión, preceda su nombre por SESSION, @@ session., O @@" dev.mysql.com/doc/refman/5.1/en/set-option. html
Derek Downey

Hmm ... así es. Restaurando mi primera respuesta.
Morgan Tocker

Hola Morgan, gracias por la respuesta! ¿Pero qué pasa si no quiero o no puedo hacer un SET GLOBAL? ¿Puedo configurarlo solo para mi tabla / base de datos muy específica sin tener que usar las variables de sesión?
Bernardo Oliveira

Si no puede SET GLOBAL, cada sesión que no desee este comportamiento ejecute SET auto_increment_increment = 1;
Morgan Tocker

2

Ambas variables tienen valores globales y de sesión. Por lo tanto, es muy probable que solo haya cambiado el valor de la sesión que desapareció cuando cerró MySQL Workbench.

Otra advertencia a la que prestar atención es que

Estas variables controlan el comportamiento de todas las columnas AUTO_INCREMENT en todas las tablas del servidor MySQL. Si se establece el valor global de cualquiera de las variables, sus efectos persisten hasta que el valor global se cambie o se anule al establecer el valor de la sesión, o hasta que se reinicie mysqld. Si se establece el valor local, el nuevo valor afecta a las columnas AUTO_INCREMENT para todas las tablas en las que el usuario actual inserta nuevas filas durante la sesión, a menos que los valores se cambien durante esa sesión.

Lo que también podría engañarte es la forma en que se calcula el siguiente valor de incremento automático cuando cambias el tamaño del incremento. No usa el último valor de columna almacenado, pero está calculando el siguiente valor más alto usando la fórmula

auto_increment_offset + N × auto_increment_increment

mientras que N es un entero, de modo que el nuevo valor es mayor que el mayor existente.

Consulte la documentación de auto_increment_increment cómo funciona en detalle.


Esa es información muy útil. Gracias MicSim! De hecho, solo estaba cambiando el valor de la sesión. Intentando descubrir cómo cambiarlo permanentemente, pero solo para una base de datos o una tabla. ¿Algunas ideas?
Bernardo Oliveira

Como dice la documentación, no es posible configurarlo db o table-wise. Lo siento, no puedo ayudarte aquí. Quizás esté tratando de lograr algo con la función de aumento automático para la que no estaba destinada.
MicSim
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.