Dico che non lo fai, per due motivi:
- i messaggi di errore non sono chiari:ERRORE 1062 (23000):voce duplicata 'xxx' per la chiave 1 . Sei sempre sicuro al 100% di quale chiave sia 1?
- ti blocca su un fornitore di database specifico
Trovo più semplice transazionalmente :
- verifica l'esistenza della riga;
- genera un'eccezione se la riga esiste già;
- inserisci la nuova riga.
Problemi di prestazioni :
Dico misura due volte, taglia una volta . Profila l'utilizzo per il tuo caso d'uso specifico. In cima alla mia testa direi che le prestazioni non saranno un problema tranne che per gli scenari di utilizzo intenso del db.
Il motivo è che una volta eseguito un SELECT
su quella riga specifica, i suoi dati verranno inseriti nelle cache del database e immediatamente utilizzato per il controllo dell'inserimento eseguito sull'indice per INSERT
dichiarazione. Inoltre, tenere presente che questo accesso è supportato da un indice porta alla conclusione che la performance non sarà un problema.
Ma, come sempre, misura.