sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué mysql omite algunas identificaciones de incremento automático?

Es un ejemplo de bloqueo de incremento automático en InnoDB:mientras ejecuta 2 declaraciones simultáneamente en la misma sesión:el bloqueo de incremento automático se obtiene mediante la primera consulta, y la generación de valor de incremento automático no se intercala entre las declaraciones, ese es el punto de transacción.

Esto siempre sucederá por diseño:si no fuera así, la forma en que funcionan las transacciones en InnoDB, bueno, no funcionaría. La escalabilidad bajo cargas de tipo OLTP sería horrible, ya que cada inserción tendría que esperar a que las demás inserciones terminaran, se comprometieran o, lo que es peor, se revirtieran.

Es decir:si su primera inserción se ejecuta 5 veces más que la segunda, y falla y se revierte, la segunda aún se completa y se ha confirmado. De lo contrario, tendrías que esperar a ea. consulta para ser completa después de la otra.

Si necesita números de identificación secuenciales y absolutamente únicos, extráigalos de otra fuente. Las columnas AutoInc simplemente garantizan un valor único, no necesariamente una monosecuencia, que es un punto de serialización y un cuello de botella.

Una forma de evitar esto si se requiere lo contrario:

establecer innodb_autoinc_lock_mode = 0 en su my.cnf/mysql.ini

Descripción de auto inc bloqueo en InnoDB y Opciones