Mysql
 sql >> Datenbank >  >> RDS >> Mysql

INSERT INTO ... ON DUPLICATE UPDATE alle Werte

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 die INSERT 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.