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

Forhindre automatisk stigning på MySQL duplikatindsættelse

Du kan ændre din INSERT til at være sådan her:

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

Hvor $tag er tagget (korrekt citeret eller som pladsholder selvfølgelig), som du vil tilføje, hvis det ikke allerede er der. Denne tilgang vil ikke engang udløse en INSERT (og det efterfølgende autoincrement-spild), hvis tagget allerede er der. Du kunne sikkert finde på en bedre SQL end det, men ovenstående burde gøre tricket.

Hvis din tabel er korrekt indekseret, vil den ekstra SELECT for eksistenskontrollen være hurtig, og databasen bliver alligevel nødt til at udføre denne kontrol.

Denne tilgang virker dog ikke for det første tag. Du kan se din tag-tabel med et tag, som du tror altid vil ende med at blive brugt, eller du kan foretage en separat check for en tom tabel.



  1. Smukke blokke af kedelplade

  2. Hvordan opretter man en PostgreSQL-partitioneret sekvens?

  3. Sådan konverteres XMLTYPE i VARCHAR i ORACLE?

  4. Konverter et månedsnummer til månedsnavnet i SQL Server (T-SQL)