Ik zeg dat je dat niet doet, om twee redenen:
- de foutmeldingen zijn een beetje onduidelijk:ERROR 1062 (23000):Dubbele invoer 'xxx' voor sleutel 1 . Weet je altijd 100% zeker welke sleutel 1 is?
- het sluit u aan bij een specifieke databaseleverancier
Ik vind het eenvoudiger om transactioneel :
- controleer op het bestaan van rij;
- gooi een uitzondering als de rij al bestaat;
- voeg de nieuwe rij in.
Prestatieproblemen :
Ik zeg twee keer meten, één keer knippen . Profileer het gebruik voor uw specifieke gebruiksscenario. Ik zou zeggen dat de prestaties geen probleem zullen zijn, behalve in de zware db-gebruikscenario's.
De reden is dat zodra u een SELECT
boven die specifieke rij, worden de gegevens in de databasecaches geplaatst en onmiddellijk gebruikt voor invoegcontrole gedaan op de index voor de INSERT
uitspraak. Als u er ook rekening mee houdt dat deze toegang wordt ondersteund door een index, leidt dit tot de conclusie dat prestaties geen probleem zullen zijn.
Maar meet zoals altijd.