Heim >Datenbank >MySQL-Tutorial >SQL-UPDATE: Spiegelt „p = q' den ursprünglichen oder aktualisierten „q'-Wert wider?
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!