sql >> Base de Datos >  >> RDS >> Mysql

Evitar el incremento automático en la inserción duplicada de MySQL

Podrías modificar tu INSERT para que sea algo como esto:

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

Donde $tag es la etiqueta (debidamente citada o como marcador de posición, por supuesto) que desea agregar si aún no está allí. Este enfoque ni siquiera activará una INSERCIÓN (y el posterior desperdicio de incremento automático) si la etiqueta ya está allí. Probablemente podría encontrar un SQL mejor que ese, pero lo anterior debería funcionar.

Si su tabla está correctamente indexada, el SELECT adicional para la verificación de existencia será rápido y la base de datos tendrá que realizar esa verificación de todos modos.

Sin embargo, este enfoque no funcionará para la primera etiqueta. Puede sembrar su tabla de etiquetas con una etiqueta que cree que siempre terminará siendo utilizada o puede hacer una verificación por separado para una tabla vacía.