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'
UPDATE
istruzione invece sulla riga esistente con la qualeINSERT
dichiarazione 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.