Heim >Datenbank >MySQL-Tutorial >MySQL-UPDATE mit CASE: Warum werden alle Zeilen aktualisiert und wie lässt sich das Problem beheben?

MySQL-UPDATE mit CASE: Warum werden alle Zeilen aktualisiert und wie lässt sich das Problem beheben?

Susan Sarandon
Susan SarandonOriginal
2024-12-01 07:52:14290Durchsuche

MySQL UPDATE with CASE: Why Does it Update All Rows and How to Fix It?

MySQL-Update mit CASE: Unerwartetes Verhalten und unerwartete Lösung

Bei der Verwendung der CASE-Anweisung in MySQL UPDATE-Abfragen ist es wichtig, deren Auswirkungen zu verstehen Daten. Im bereitgestellten Beispiel zielte die ursprüngliche Abfrage darauf ab, bestimmte Zeilen basierend auf ihrem ID-Feld zu aktualisieren. Die Abfrage hat jedoch unerwartet alle 25 Millionen Zeilen aktualisiert und NULL-Werte eingeführt.

Dieses Verhalten ist auf die Art der CASE-Anweisung zurückzuführen. Ohne eine ELSE-Klausel interpretiert MySQL alle fehlenden Bedingungen als gleich NULL. Daher wurden alle Zeilen, die nicht mit den angegebenen ID-Werten übereinstimmten, mit NULL für die UID-Spalte aktualisiert.

Um dieses Problem zu beheben und bestimmte Zeilen selektiv zu aktualisieren und gleichzeitig andere Daten beizubehalten, sollten Sie die Verwendung einer ELSE-Klausel zur Bereitstellung eines Standardwerts in Betracht ziehen Wert ändern oder den vorhandenen Wert beibehalten. Geben Sie außerdem mithilfe der WHERE-Klausel die Zeilen an, die aktualisiert werden müssen.

Die folgende geänderte Abfrage geht beispielsweise auf diese Probleme ein:

UPDATE `table` SET `uid` = CASE
    WHEN id = 1 THEN 2952
    WHEN id = 2 THEN 4925
    WHEN id = 3 THEN 1592
    ELSE `uid`
    END
WHERE id  in (1,2,3)

Diese Abfrage aktualisiert jetzt nur Zeilen mit ID-Werten von 1, 2 und 3, wobei die übrigen Zeilen unberührt bleiben. Durch die Kombination der CASE-Anweisung mit der ELSE-Klausel und der WHERE-Klausel können Sie bestimmte Zeilen effizient aktualisieren, ohne versehentlich andere Daten in der Tabelle zu ändern.

Das obige ist der detaillierte Inhalt vonMySQL-UPDATE mit CASE: Warum werden alle Zeilen aktualisiert und wie lässt sich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn