Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi l'auto-incrémentation de MySQL augmente-t-elle en cas d'échec d'insertion ?

InnoDB est un moteur transactionnel.

Cela signifie que dans le scénario suivant :

  1. Session A insère l'enregistrement 1
  2. Session B insère l'enregistrement 2
  3. Session A recule

, il y a soit une possibilité d'écart soit une session B se verrouillerait jusqu'à la session A validé ou annulé.

InnoDB les concepteurs (comme la plupart des autres concepteurs de moteurs transactionnels) ont choisi d'autoriser des espaces.

À partir de la documentation :

Lors de l'accès au compteur auto-incrémenté, InnoDB utilise un AUTO-INC spécial au niveau de la table verrou qu'il conserve jusqu'à la fin du SQL courant relevé, et non jusqu'à la fin de la transaction. La stratégie spéciale de déverrouillage a été introduite pour améliorer la simultanéité des insertions dans une table contenant un AUTO_INCREMENT colonne

InnoDB utilise le compteur d'auto-incrémentation en mémoire tant que le serveur fonctionne. Lorsque le serveur est arrêté et redémarré, InnoDB réinitialise le compteur de chaque table pour le premier INSERT à la table, comme décrit précédemment.

Si vous avez peur de l'id la colonne s'enroule autour, rendez-la BIGINT (8 octets de long).