INSERT INTO … ON DUPLICATE KEY UPDATE funziona in questo modo:
- tenta di inserire una riga come al solito
- se si verifica una violazione del vincolo in una qualsiasi colonna, esegue l'
UPDATEistruzione invece sulla riga esistente con la qualeINSERTdichiarazione si è scontrata
Ciò significa semplicemente se il UPDATE l'istruzione da sola avrebbe successo, il suo ON DUPLICATE KEY UPDATE equivalente funzionerà anche. Ciò significa che ovviamente non puoi violare alcun vincolo in UPDATE istruzione o l'intera operazione fallirà (ad esempio cercando di impostare un valore su un UNIQUE colonna che esiste già in un'altra riga).
Se imposti di nuovo lo stesso valore sulla stessa colonna, è essenzialmente un no-op. Il valore nella colonna non cambia e quindi non può nemmeno causare errori (supponiamo che tu non abbia un BEFORE UPDATE davvero originale trigger che possono comportarsi male). Il numero di colonne è irrilevante qui, puoi cambiarne quante o poche in un'istruzione come vuoi.