sql >> Databasteknik >  >> RDS >> Mysql

Förhindra automatisk inkrement på MySQL dubblett infogning

Du kan ändra din INSERT så att den blir ungefär så här:

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

Där $tag är taggen (korrekt citerad eller som platshållare förstås) som du vill lägga till om den inte redan finns där. Det här tillvägagångssättet kommer inte ens att utlösa en INSERT (och det efterföljande autoincrement-slöseri) om taggen redan finns där. Du skulle förmodligen kunna komma på bättre SQL än så, men ovanstående borde göra susen.

Om din tabell är korrekt indexerad kommer den extra SELECT för existenskontrollen att vara snabb och databasen kommer att behöva utföra den kontrollen ändå.

Detta tillvägagångssätt fungerar dock inte för den första taggen. Du kan se din taggtabell med en tagg som du tror alltid kommer att användas eller så kan du göra en separat kontroll för en tom tabell.



  1. UTLÄNDSK NYCKEL PÅ DELETE RESTRICT Fel - Oracle

  2. Hur SQLite Ltrim() fungerar

  3. 2 sätt att returnera servernamnet i SQL Server (T-SQL)

  4. Hur man kör SQL Server 2017 &2019 samtidigt på en Mac