2008-10-15 10 views
30

Tengo un par de tablas en las que creé un ID de objeto como Int o Bigint, y en ambos casos, parecen autoincrementarse por 10 (es decir, el primer inserto es el objeto ID 1, el segundo es el objeto ID 11, el tercero es el objeto ID 21, etc.). Dos preguntas:La columna de autoincrement de MySQL salta por 10, ¿por qué?

  1. ¿Por qué lo hace?

  2. ¿Eso es un problema?

+0

No es un problema, aunque podría indicar la desea tener la capacidad de insertar valores entre los demás y, por lo tanto, confiar en la identificación como criterio de pedido. Eso no es bueno. –

+0

También podría ser un problema si te preocupaba por quedarte sin ID demasiado rápido (si esperas MUCHOS registros), ya que solo estás utilizando 1/10 del rango para el que tienes almacenamiento. – acrosman

+2

Supongo que su auto_increment_increment está configurado en algo más que 1 debido a la replicación. Con las tablas replicadas, uno no puede usar 1 debido a posibles colisiones de claves. – mayu

Respuesta

42

Compruebe el valor de inicialización del incremento automático no está ajustado a 10.

Puede comprobar por:

SELECT Auto_increment FROM information_schema.tables WHERE table_name='the_table_you_want'; 

como se ha señalado en otros lugares se puede cambiar mediante el uso de la variable de sistema @@ set_auto_increment_increment

SET @@auto_increment_increment=1; 

Si desea iniciar los valores a un número distinto al yo u puede ir: valor de incremento

ALTER TABLE tbl AUTO_INCREMENT = 100; 
+0

Oh, encontré mi problema, es cómo se establece auto_increment_increment. ¡Gracias! –

+1

HQ dice que no hay que cambiar nada, y los documentos de MySQL dicen que no se puede modificar por tabla. Así que supongo que tendré que vivir con un límite superior de 1.8 quintillones de ID en lugar de 18.4 quintillones. –

+8

Su primera instrucción de selección parece mostrar cuál es el siguiente valor de la secuencia, no cuánto aumenta. –

12

Gracias @Jim Fiorato para proporcionar el enlace.

para comprobar cuánto los incrementos del valor del incremento automático por, utilice la siguiente consulta:

SHOW VARIABLES LIKE 'auto_inc%'; 

+--------------------------+-------+ 
| Variable_name   | Value | 
+--------------------------+-------+ 
| auto_increment_increment | 10 | 
| auto_increment_offset | 4  | 
+--------------------------+-------+ 
30

Por favor, no cambie el auto_increment_increment.

ClearDB está haciendo esto a propósito: https://www.cleardb.com/developers/help/faq#general_16

+1

genial. Esto me ayuda mucho. Gracias. – Kabkee

+1

* * No * técnicamente * responde la pregunta, pero sí información muy útil. –

+0

Esta respuesta debe combinarse con la respuesta aceptada, es tan importante como la explicación actualmente aceptada. – Todd

1

valor autoincriment puede saltar si se utiliza inserto con IGNORE atributo en caso de que registro no fue creado

insert IGNORE into my_table set column=1 
Cuestiones relacionadas