Nicht standardmäßiger Implementierungscode für die MySQL UPDATE-Anweisung

Nicht standardmäßiger Implementierungscode für die MySQL UPDATE-Anweisung

Heute werde ich Ihnen einen Unterschied zwischen der UPDATE-Anweisung in der MySQL-Datenbank und dem SQL-Standard (und anderen Datenbanken) vorstellen. Wenn wir diesem Problem keine Aufmerksamkeit schenken, kann es zu unerwarteten Ergebnissen führen.

Beginnen wir mit der Erstellung einer einfachen Beispieltabelle:

TABELLE ERSTELLEN t1(
 Ich würde int, 
 col1 int, 
 col2 int
); 

EINFÜGEN IN t1 WERTE (1, 1, 1);

WÄHLEN SIE * VON t1;
ID|Spalte1|Spalte2|
--|----|----|
 1| 1| 1|
————————————————
Copyright-Erklärung: Dieser Artikel ist ein Originalartikel des CSDN-Bloggers „Teacher Tony Who Doesn't Cut Hair“ und unterliegt der CC 4.0 BY-SA-Urheberrechtsvereinbarung. Bitte fügen Sie beim Nachdruck den Link zur Originalquelle und diese Erklärung bei.
Ursprünglicher Link: https://blog.csdn.net/horses/article/details/110238573CREATE TABLE t1(
 Ich würde int, 
 col1 int, 
 col2 int
); 

EINFÜGEN IN t1 WERTE (1, 1, 1);

WÄHLEN SIE * VON t1;
ID|Spalte1|Spalte2|
--|----|----|
 1| 1| 1|

Dann aktualisieren wir die Daten in Tabelle t1:

AKTUALISIERUNG t1 
SETZE col1 = col1 + 1,
  Spalte2 = Spalte1
WO id = 1;

Wählen Sie Spalte1, Spalte2 aus. 
VON t1;

Was sind die Ergebnisse der von der Abfrageanweisung zurückgegebenen Felder col1 und col2?

  • Für den SQL-Standard und andere Datenbankimplementierungen lauten die Ergebnisse 2 bzw. 1 .
  • Aber mit MySQL sind die Ergebnisse 2 bzw. 2 !

Wenn bei MySQL eine UPDATE-Anweisung eine zuvor aktualisierte Spalte (col1) in einem Ausdruck (col2 = col1) verwendet, wird der aktualisierte Wert der Spalte (2) anstelle des ursprünglichen Werts (1) verwendet.

Beachten Sie, dass diese Implementierung in MySQL vom SQL-Standard abweicht. Wir haben auch andere Datenbanken getestet, darunter Oracle, Microsoft SQL Server, PostgreSQL und SQLite, deren Implementierungen dem SQL-Standard folgen.

Wenn wir in MySQL den gleichen Effekt wie in Standard-SQL erzielen möchten, können wir die Reihenfolge der aktualisierten Felder in der UPDATE-Anweisung anpassen. Zum Beispiel:

AKTUALISIERUNG t1 
SETZE Spalte2 = Spalte1,
  col1 = col1 + 1
WO id = 1;

Auf diese Weise wird die Spalte col2 vor col1 mit dem alten Wert von col1 (1) aktualisiert und das Ergebnis entspricht dem SQL-Standard.

Fazit: Im Allgemeinen müssen wir uns beim Schreiben von UPDATE-Anweisungen keine Gedanken über die Aktualisierungsreihenfolge mehrerer Felder machen. Aufgrund von MySQL-Implementierungsproblemen müssen wir jedoch auf ihre grammatikalische Reihenfolge achten.

Dies ist das Ende dieses Artikels über die nicht standardmäßige Implementierung der MySQL UPDATE-Anweisung. Weitere nicht standardmäßige Inhalte zur MySQL UPDATE-Anweisung finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Praktisches MySQL + PostgreSQL Batch-Insert-Update insertOrUpdate
  • Unterschied zwischen MySQL-Update-Set und und
  • MySQL-Update-Fall Update-Feldwert ist keine feste Operation
  • Zusammenfassung der gemeinsamen Updatemethode für MySQL-Updates mehrerer Tabellen
  • Erläuterung der MySQL-Transaktionsauswahl für die Aktualisierung und Datenkonsistenzverarbeitung
  • Eine "klassische" Falle der MySQL UPDATE-Anweisung

<<:  Zusammenfassung mehrerer Methoden zur Implementierung der vertikalen Zentrierung mit CSS

>>:  Vue implementiert einen Wasserfallfluss mit unendlichem Laden

Artikel empfehlen

So starten Sie Tomcat mit jsvc (als normaler Benutzer ausführen)

Einführung in jsvc In der Produktion sollte Tomca...

JavaScript implementiert Konstellationsabfragefunktion mit detailliertem Code

Inhaltsverzeichnis 1. Titel 2. Code 3. Ergebnisse...

Erläuterung des Arbeitsmechanismus von Namenode und SecondaryNameNode in Hadoop

1) Prozess 2) FSImage und Bearbeitungen Nodenode ...

Fallbeispiel zur TypeScript-Schnittstellendefinition

Die Rolle der Schnittstelle: Schnittstelle, auf E...

Einführung in die Verwendung von Alt- und Titelattributen von HTML-Img-Tags

Wenn Browser-Anbieter die Standards umgehen und ei...

Überlegungen zur Partitionierung von MySQL-Datenbanktabellen [empfohlen]

Die Tabellenpartitionierung unterscheidet sich vo...

So testen Sie die maximale Anzahl von TCP-Verbindungen in Linux

Vorwort Es besteht ein Missverständnis bezüglich ...

Eine kurze Erläuterung zur Verwendung von Slots in Vue

Definition und Verwendung: Verwenden Sie die Slot...

Upgrade von MySQL 5.1 auf 5.5.36 in CentOS

Dieser Artikel beschreibt den Upgrade-Prozess von...

Detaillierte Erklärung des CSS-Pseudoelements::marker

Dieser Artikel stellt ein interessantes Pseudoele...

CSS3 realisiert den grafischen Fallanimationseffekt

Sehen Sie zuerst den Effekt Implementierungscode ...