Molti sviluppatori eseguono ancora una query per verificare se un campo è presente in una tabella e quindi eseguono una query di inserimento o aggiornamento in base al risultato della prima query. Prova a utilizzare la sintassi SU CHIAVE DUPLICATA, è molto più veloce e migliore quindi eseguire 2 query. Maggiori informazioni sono disponibili qui
se vuoi mantenere lo stesso valore per c puoi fare un aggiornamento con lo stesso valore
la differenza tra "sostituisci" e "su chiave duplicata":
se la tua tabella non ha una chiave primaria o una chiave univoca, la sostituzione non ha alcun senso.
Puoi anche utilizzare i VALUES
funzione per evitare di dover specificare due volte i valori effettivi. Per esempio. invece di
INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=6;
puoi usare
INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(c);
Dove VALUES(c)
valuterà il valore specificato in precedenza (6).