2016-07-19 19 views
1

Gibt es überhaupt einen Unterschied zwischen diesen beiden? Ich arbeite an etwas Code, der sie austauschbar zu verwenden scheint, und ein schneller Test zeigt mir, dass sie die gleichen Dinge zu tun scheinen.ON DUPLICATE KEY UPDATE a = WERTE (b) vs. a = b

INSERT INTO... 
... 
ON DUPLICATE KEY UPDATE a=VALUES(b) 

gegen

INSERT INTO... 
... 
ON DUPLICATE KEY UPDATE a=b 

Antwort

2

Ja. Sie sind anders. Nehmen wir an, das würde eine Zeile aktualisieren, in der b=100.

1. INSERT INTO foo SET a='42', b='69' ON DUP ... SET a=b 
2. INSERT INTO foo SET a='42', b='69' ON DUP ... SET a=VALUES(b) 

(1) wird die Zeile aktualisieren und a wird 100 werden, denn das ist der Wert in dem b Feld ist für diesen Datensatz.

(2) wird die Zeile aktualisieren und a wird 69 werden, denn das ist der Wert im Feld/Wert Liste der Update-Abfrage selbst, unabhängig vom Wert in b bereits in der Aufzeichnung zur Verfügung gestellt ist.

b von selbst ist das Feld in dem bereits gespeicherten Datensatz, VALUES(b) ist der Wert, der das Feld TO aktualisiert würde, wenn der doppelte Fehler nicht aufgetreten wäre.

+0

Die Abfragen sollten 'INSERT', nicht' UPDATE' sein. – Barmar

+0

Woops. richtig .. danke. –

1

a = VALUES(b) bedeutet, den neuen Wert zu erhalten, der in die Spalte b eingefügt worden wäre, wenn kein doppelter Schlüssel vorhanden wäre, und ihn beim Aktualisieren der Zeile der Spalte a zuzuweisen.

a = b bedeutet, den alten Wert der Spalte b in die Spalte a in der Zeile zu kopieren, die den doppelten Schlüssel enthält.

Verwandte Themen