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!