Mysql
 sql >> Database >  >> RDS >> Mysql

Impedisci l'incremento automatico sull'inserimento duplicato di MySQL

Potresti modificare il tuo INSERT in modo che sia qualcosa del genere:

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

Dove $tag è il tag (correttamente citato o ovviamente come segnaposto) che vuoi aggiungere se non è già presente. Questo approccio non attiverà nemmeno un INSERT (e il successivo spreco di incremento automatico) se il tag è già presente. Probabilmente potresti trovare un SQL migliore di quello, ma quanto sopra dovrebbe fare il trucco.

Se la tua tabella è indicizzata correttamente, il SELECT aggiuntivo per il controllo di esistenza sarà veloce e il database dovrà comunque eseguire quel controllo.

Tuttavia, questo approccio non funzionerà per il primo tag. Potresti inserire nella tua tabella dei tag un tag che pensi finirà per essere utilizzato o potresti fare un controllo separato per una tabella vuota.