Heim >Datenbank >MySQL-Tutorial >SQL-UPDATE: Spiegelt „p = q' den ursprünglichen oder aktualisierten „q'-Wert wider?

SQL-UPDATE: Spiegelt „p = q' den ursprünglichen oder aktualisierten „q'-Wert wider?

Barbara Streisand
Barbara StreisandOriginal
2024-12-26 21:32:10929Durchsuche

SQL UPDATE: Does `p = q` Reflect the Original or Updated `q` Value?

SQL UPDATE-Auswertungsreihenfolge

In einer SQL UPDATE-Anweisung kann die Reihenfolge, in der Ausdrücke ausgewertet werden, erhebliche Auswirkungen auf das Ergebnis haben. Sehen wir uns die folgende Abfrage an:

UPDATE tbl SET q = q + 1, p = q;

Hier stellt sich die Frage: Wird „tbl“.„p“ auf q oder q 1 gesetzt? Wird die Auswertungsreihenfolge durch einen SQL-Standard geregelt?

Implementierungen variieren

Trotz der Unklarheit im SQL-Standard handhaben verschiedene Datenbankimplementierungen die Auswertungsreihenfolge unterschiedlich. Tests haben unterschiedliche Verhaltensweisen bei Firebird, InterBase, MySQL, Oracle, PostgreSQL, SQLite und SQL Server ergeben. In den meisten Fällen wird der Wert von „p“ auf q 1 gesetzt, was eine Auswertung von links nach rechts anzeigt.

Standardinterpretation

Allerdings ist eine Interpretation von Die SQL92-Spezifikationen legen nahe, dass der Standard vorsieht, dass Ausdrücke ausgewertet werden, bevor Zeilen aktualisiert werden. Dies würde dazu führen, dass „p“ auf q gesetzt wird.

Der einzigartige Ansatz von MySQL

MySQL ist die einzige getestete Datenbank, die die neuen Werte währenddessen „sieht“. Auswertung. Dieses Verhalten unterscheidet sich von den meisten anderen Implementierungen und kann zu unerwarteten Ergebnissen führen.

Schlussfolgerung

Während der SQL-Standard keine explizite Anleitung zur Auswertungsreihenfolge enthält, wird dies allgemein angenommen dass Ausdrücke ausgewertet werden sollten, bevor Aktualisierungen angewendet werden. Allerdings variieren die Implementierungen und Entwickler sollten sich möglicher Diskrepanzen bewusst sein. In Fällen, in denen die Auswertungsreihenfolge von entscheidender Bedeutung ist, wird empfohlen, Zwischenvariablen zu verwenden, um die gewünschte Reihenfolge der Operationen explizit zu definieren.

Das obige ist der detaillierte Inhalt vonSQL-UPDATE: Spiegelt „p = q' den ursprünglichen oder aktualisierten „q'-Wert wider?. 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