INSERT ... ON DUPLICATE KEY UPDATE: Bedingte Aktualisierungen
Beim Ausführen einer INSERT ... ON DUPLICATE KEY UPDATE-Operation ist dies der Fall Manchmal ist es erforderlich, das Update basierend auf bestimmten Bedingungen bedingt auszuführen. Die WHERE-Klausel ist jedoch mit dem UPDATE-Teil dieser Anweisung nicht zulässig.
Problemumgehung mit IF()
Um bedingte Aktualisierungen zu erreichen, besteht eine Lösung darin, die zu verwenden IF()-Funktion. Durch die Auswertung einer Bedingung innerhalb des IF()-Ausdrucks können Sie basierend auf dem Ergebnis einen anderen Wert für die aktualisierte Spalte angeben.
Beispiel
Beachten Sie die folgende Tabelle:
CREATE TABLE daily_events ( created_on DATE, last_event_id INT, last_event_created_at DATETIME );
Um die Spalte last_event_id nur dann bedingt zu aktualisieren, wenn sich die Spalte last_event_created_at geändert hat, können Sie die folgende Abfrage verwenden:
INSERT INTO daily_events (created_on, last_event_id, last_event_created_at) VALUES ('2010-01-19', 23, '2010-01-19 10:23:11') ON DUPLICATE KEY UPDATE last_event_id = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_id), last_event_id);
In dieser Abfrage prüft die Funktion IF(), ob Der Wert von last_event_created_at in der Datenbank ist kleiner als der eingefügte Wert. Wenn „true“, wird die last_event_id auf den eingefügten Wert aktualisiert; andernfalls bleibt der vorhandene Wert erhalten.
Replikationskompatibilität
Dieser Ansatz ist mit der Replikation kompatibel, da keine zusätzlichen Abfragen oder Änderungen am Datenbankschema erforderlich sind.
Das obige ist der detaillierte Inhalt vonWie führe ich bedingte Aktualisierungen in INSERT ... ON DUPLICATE KEY UPDATE-Anweisungen durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!