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
UPDATEaus Anweisung stattdessen auf die vorhandene Zeile, mit der dieINSERTAnweisung 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.