INSERT INTO … ON DUPLICATE KEY UPDATE działa w ten sposób:
- próbuje wstawić wiersz jak zwykle
- jeśli wystąpi jakiekolwiek naruszenie ograniczenia w dowolnej kolumnie, wykonuje
UPDATEzamiast tego w istniejącym wierszu, za pomocą któregoINSERToświadczenie sprzeczne
Oznacza to po prostu, jeśli UPDATE sama instrukcja powiodłaby się, jej ON DUPLICATE KEY UPDATE odpowiednik również zadziała. Oznacza to, że oczywiście nie możesz naruszać żadnych ograniczeń w UPDATE albo cała sprawa się nie powiedzie (np. próba ustawienia wartości na UNIQUE kolumna, która już istnieje w innym wierszu).
Jeśli ponownie ustawisz tę samą wartość w tej samej kolumnie, jest to w zasadzie brak operacji. Wartość w kolumnie nie zmienia się i dlatego nie może powodować żadnych błędów (załóżmy, że nie masz żadnego naprawdę fajnego BEFORE UPDATE wyzwalacze, które mogą źle się zachowywać). Liczba kolumn jest tutaj nieistotna, możesz zmienić tyle lub tylko kilka w jednej instrukcji, ile chcesz.