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

¿Por qué aumenta el autoincremento de MySQL en las inserciones fallidas?

InnoDB es un motor transaccional.

Esto significa que en el siguiente escenario:

  1. Session A inserta registro 1
  2. Session B inserta registro 2
  3. Session A retrocede

, existe la posibilidad de una brecha o session B bloquearía hasta la session A confirmado o revertido.

InnoDB los diseñadores (como la mayoría de los otros diseñadores de motores transaccionales) optaron por permitir brechas.

De la documentación :

Al acceder al contador de incremento automático, InnoDB utiliza un AUTO-INC especial a nivel de tabla bloqueo que mantiene hasta el final del SQL actual estado de cuenta, no hasta el final de la transacción. La estrategia de liberación de bloqueo especial se introdujo para mejorar la concurrencia de inserciones en una tabla que contiene un AUTO_INCREMENT columna

InnoDB utiliza el contador de incremento automático en memoria mientras se ejecuta el servidor. Cuando el servidor se detiene y reinicia, InnoDB reinicializa el contador de cada tabla para el primer INSERT a la mesa, como se describió anteriormente.

Si tienes miedo del id columna envolviendo, hazlo BIGINT (8 bytes de largo).