Maison > base de données > tutoriel mysql > Pourquoi AUTO_INCREMENT de MySQL se comporte-t-il de manière incohérente avec INSERT ... ON DUPLICATE KEY UPDATE ?

Pourquoi AUTO_INCREMENT de MySQL se comporte-t-il de manière incohérente avec INSERT ... ON DUPLICATE KEY UPDATE ?

Linda Hamilton
Libérer: 2024-12-05 16:51:10
original
646 Les gens l'ont consulté

Why Does MySQL's AUTO_INCREMENT Behave Inconsistently with INSERT ... ON DUPLICATE KEY UPDATE?

ON DUPLICATE KEY AUTO INCREMENT Problème dans MySQL

Problème :

Lors de l'utilisation de INSERT... ON DUPLICATE KEY Instruction UPDATE avec une table contenant une colonne à incrémentation automatique (id), la valeur de l'identifiant semble s'incrémenter bizarrement lorsqu'une clé en double est rencontrés. Lors de l'insertion initiale (sans clé en double), l'identifiant s'incrémente normalement. Cependant, lorsque la clause ON DUPLICATE KEY se déclenche et qu'une nouvelle ligne est insérée, la valeur de l'identifiant devient incohérente.

Réponse :

Ce comportement est intentionnel et documenté par MySQL . Lorsqu'une ligne est insérée qui entraînerait une valeur en double dans un index unique ou une clé primaire, MySQL effectue une mise à jour de l'ancienne ligne au lieu d'en insérer une nouvelle. Cela signifie que même si l'instruction INSERT est tentée en premier, la valeur de l'identifiant est déjà incrémentée à ce stade.

La mise à jour qui suit n'incrémente pas la valeur de l'identifiant car les colonnes à incrémentation automatique ne sont pas mises à jour par l'instruction UPDATE. . Au lieu de cela, la valeur id de la ligne d'origine (maintenant mise à jour) est conservée.

Solution :

Pour maintenir l'incrémentation automatique sans espaces, il est nécessaire d'utiliser un autre approche. Une option consiste à calculer des valeurs incrémentielles sur la sortie plutôt que de s'appuyer sur la colonne d'auto-incrémentation. Alternativement, une approche plus complexe impliquant des verrous de table et des déclencheurs peut être utilisée pour renuméroter les lignes et garantir l'absence de lacunes dans les valeurs d'identification.

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