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

Empêcher l'incrémentation automatique sur l'insertion dupliquée MySQL

Vous pouvez modifier votre INSERT pour qu'il ressemble à ceci :

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

$tag est la balise (correctement entre guillemets ou en tant qu'espace réservé bien sûr) que vous souhaitez ajouter si elle n'y est pas déjà. Cette approche ne déclenchera même pas un INSERT (et le gaspillage d'auto-incrémentation qui s'ensuit) si la balise est déjà là. Vous pourriez probablement trouver un SQL plus agréable que cela, mais ce qui précède devrait faire l'affaire.

Si votre table est correctement indexée, le SELECT supplémentaire pour la vérification de l'existence sera rapide et la base de données devra de toute façon effectuer cette vérification.

Cette approche ne fonctionnera pas pour la première balise cependant. Vous pouvez ensemencer votre table de balises avec une balise qui, selon vous, finira toujours par être utilisée ou vous pouvez effectuer une vérification séparée pour une table vide.