sql >> Database >  >> RDS >> Mysql

Voorkom automatische verhoging op MySQL dubbele invoeging

Je zou je INSERT kunnen aanpassen om er ongeveer zo uit te zien:

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

Waar $tag is de tag (correct geciteerd of als tijdelijke aanduiding natuurlijk) die u wilt toevoegen als deze er nog niet is. Deze aanpak activeert niet eens een INSERT (en de daaropvolgende verspilling van auto-increment) als de tag er al is. Je zou waarschijnlijk een mooiere SQL kunnen bedenken dan dat, maar het bovenstaande zou het lukken.

Als uw tabel correct is geïndexeerd, zal de extra SELECT voor de bestaanscontrole snel zijn en zal de database die controle toch moeten uitvoeren.

Deze aanpak werkt echter niet voor de eerste tag. U kunt uw tagtabel voorzien van een tag waarvan u denkt dat deze altijd zal worden gebruikt, of u kunt een aparte controle uitvoeren op een lege tabel.



  1. Meerdere rijen invoegen in Oracle

  2. Aanbevolen procedures voor de lengte van SQL-varchar-kolommen

  3. Fout ORA-00932 bij gebruik van een select met unie- en CLOB-velden

  4. Hoe de grootste tabel in de MySQL-database te vinden?