Jag säger att du inte gör det av två anledningar:
- felmeddelandena är lite otydliga:ERROR 1062 (23000):Dubblettpost 'xxx' för nyckel 1 . Är du alltid 100 % säker på vilken nyckel som är 1?
- det låser dig till en specifik databasleverantör
Jag tycker att det är enklare att transaktionellt :
- kontrollera om raden existerar;
- kasta ett undantag om raden redan finns;
- infoga den nya raden.
Prestandaproblem :
Jag säger mät två gånger, skär en gång . Profilera användningen för ditt specifika användningsfall. Högst upp i huvudet skulle jag säga att prestandan inte kommer att vara ett problem förutom för de tunga db-användningsscenarierna.
Anledningen är att när du utför en SELECT
över den specifika raden kommer dess data att placeras i databasens cacheminne och omedelbart används för infogningskontroll utförd på indexet för INSERT
påstående. Att också komma ihåg att denna åtkomst stöds av ett index leder till slutsatsen att prestanda inte kommer att vara ett problem.
Men, som alltid, mät.