INSERT INTO … ON DUPLICATE KEY UPDATE
funktioniert so:
- es versucht, wie gewohnt eine Zeile einzufügen
- Wenn eine Beschränkungsverletzung in irgendeiner Spalte auftritt, führt es das
UPDATE
aus Anweisung stattdessen auf die vorhandene Zeile, mit der dieINSERT
Anweisung kollidiert
Das heißt einfach, wenn das UPDATE
Anweisung alleine erfolgreich wäre, deren ON DUPLICATE KEY UPDATE
Äquivalent wird auch funktionieren. Das bedeutet, dass Sie offensichtlich keine Beschränkungen im UPDATE
verletzen können Anweisung entweder, oder das Ganze wird fehlschlagen (z. B. der Versuch, einen Wert auf eine UNIQUE
Spalte, die bereits in einer anderen Zeile vorhanden ist).
Wenn Sie denselben Wert erneut in derselben Spalte festlegen, ist dies im Wesentlichen ein No-Op. Der Wert in der Spalte ändert sich nicht und kann daher auch keine Fehler verursachen (nehmen wir an, Sie haben kein wirklich abgefahrenes BEFORE UPDATE
Auslöser, die sich falsch verhalten können). Die Anzahl der Spalten spielt dabei keine Rolle, Sie können beliebig viele oder wenige in einer Anweisung ändern.