Maison > base de données > tutoriel mysql > Pourquoi l'auto-incrémentation de MySQL s'incrémente-t-elle même en cas d'insertion échouée ?

Pourquoi l'auto-incrémentation de MySQL s'incrémente-t-elle même en cas d'insertion échouée ?

Mary-Kate Olsen
Libérer: 2024-11-25 10:08:20
original
132 Les gens l'ont consulté

Why Does MySQL's Autoincrement Increment Even on Failed Inserts?

Anomalies d'auto-incrémentation dans MySQL avec des insertions ayant échoué

Dans MySQL, les tables avec un champ auto_increment couplé à des contraintes uniques présentent un comportement particulier lorsque les opérations d'insertion échouent en raison de valeurs uniques en double . Bien que l'insertion échoue comme prévu, la valeur auto_increment est néanmoins incrémentée, un phénomène déclenché par l'accès au compteur d'auto-incrémentation.

Au cœur de ce comportement se trouve la nature transactionnelle d'InnoDB. Pour garantir la simultanéité des insertions, InnoDB utilise un verrou AUTO-INC spécial au niveau de la table qui reste verrouillé jusqu'à la fin de l'instruction SQL en cours plutôt que jusqu'à la fin de la transaction.

Cela signifie que même si une insertion échoue en raison d'une valeur unique en double, le compteur d'auto-incrémentation est incrémenté car le LOCK est libéré à la fin de l'instruction. Les insertions suivantes récupéreront la valeur incrémentée, entraînant des écarts dans la séquence d'auto-incrémentation.

La décision d'InnoDB d'autoriser les écarts vise à améliorer la concurrence pour les insertions dans les tables avec des colonnes auto_increment. Cependant, cela soulève des inquiétudes quant à une corruption potentielle de la table si la colonne id à incrémentation automatique s'enroule autour de sa valeur maximale.

Pour atténuer ce risque, envisagez d'utiliser un type de données BIGINT pour la colonne id, qui offre un 8- capacité de stockage en octets et une probabilité considérablement réduite de problèmes de bouclage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal