Maison  >  Article  >  base de données  >  Comment puis-je empêcher l'incrémentation automatique de MySQL sur les insertions en double ?

Comment puis-je empêcher l'incrémentation automatique de MySQL sur les insertions en double ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-21 06:38:09482parcourir

How Can I Prevent MySQL Auto-Increment on Duplicate Inserts?

Empêcher l'incrémentation automatique sur les insertions en double MySQL

Lors de l'utilisation de MySQL 5.1.49, insertion de lignes en double dans une table InnoDB avec une incrémentation automatique la clé primaire peut entraîner l'incrémentation du champ ID même si l'insertion est ignorée. Cela peut entraîner des lacunes indésirables dans la séquence d'identification.

Solution

Pour empêcher l'incrémentation automatique lors des insertions en double, vous pouvez utiliser une instruction INSERT modifiée :

INSERT INTO tablename (tag)
SELECT $tag
FROM tablename
WHERE NOT EXISTS(
    SELECT tag
    FROM tablename
    WHERE tag = $tag
)
LIMIT 1

Où $tag est la valeur de balise que vous souhaitez insérer. Cette approche vérifie si la balise existe déjà avant de tenter une insertion. Si la balise n'existe pas, l'insertion est effectuée et le compteur d'incrémentation automatique n'est pas affecté.

Avantages de cette approche :

  • Empêche l'incrémentation automatique sur les doublons : Il garantit que le compteur d'incrémentation automatique n'est incrémenté que lorsqu'une nouvelle balise est insérée.
  • Rapide : La vérification EXISTS est exécutée efficacement si la table est correctement indexé.
  • Gère le premier cas de balise : Vous pouvez amorcer la table avec une balise d'espace réservé ou effectuer une vérification séparée pour une table vide afin de gérer l'insertion de la première balise.

En utilisant cette instruction INSERT modifiée, vous pouvez empêcher le compteur d'incrémentation automatique d'incrémenter les insertions en double, garantissant ainsi une séquence d'identification séquentielle et sans interruption.

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!

Déclaration:
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