INSERT INTO … ON DUPLICATE KEY UPDATE
funguje takto:
- pokusí se vložit řádek jako obvykle
- Pokud dojde k porušení omezení v kterémkoli sloupci, provede se
UPDATE
místo toho na existující řádek, se kterýmINSERT
prohlášení se střetlo
To jednoduše znamená, že UPDATE
samotný příkaz by byl úspěšný, jeho ON DUPLICATE KEY UPDATE
ekvivalent bude také fungovat. To znamená, že zjevně nemůžete porušit žádná omezení v UPDATE
buďto, nebo celá věc selže (např. pokus o nastavení hodnoty na UNIQUE
sloupec, který již existuje v jiném řádku).
Pokud znovu nastavíte stejnou hodnotu na stejném sloupci, je to v podstatě nefunkční. Hodnota ve sloupci se nemění, a proto také nemůže způsobit žádné chyby (předpokládejme, že BEFORE UPDATE
nemáte žádné opravdu funky spouštěče, které se mohou chovat špatně). Počet sloupců je zde irelevantní, v jednom příkazu můžete změnit tolik nebo jen málo sloupců, jak chcete.