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
UPDATE
zamiast tego w istniejącym wierszu, za pomocą któregoINSERT
oś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.