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

Der Unterschied und die Verwendung von distinct und row_number() over() in SQL

1 Einleitung Wenn wir SQL-Anweisungen schreiben, ...

Zusammenfassung der Grundlagen der Vue-Komponenten

Komponentengrundlagen 1 Wiederverwendung von Komp...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.20 winx64

In diesem Artikel erfahren Sie mehr über die Inst...

Detaillierter Code zum Hinzufügen von Electron zum Vue-Projekt

1. Fügen Sie package.json hinzu "Haupt"...

So verwenden Sie Vuex in einem Vue-Projekt

Inhaltsverzeichnis Was ist Vuex? Vuex-Nutzungszyk...

Drei Möglichkeiten zum Teilen der Komponentenlogik in React

Ohne weitere Umschweife sind dies diese drei Meth...

Zusammenfassung der bei der Arbeit häufig verwendeten Linux-Befehle

Verwenden Sie bei der Arbeit mehr Open-Source-Too...

So verwenden Sie Dockerfile zum Erstellen von Images in Docker

Erstellen des Images Früher haben wir verschieden...

Three.js-Beispielcode zur Implementierung des Tautropfen-Animationseffekts

Vorwort Hallo zusammen, hier ist der CSS-Assisten...

Detaillierte Analyse von MySQL-Deadlock-Problemen

Vorwort Wenn sich unser Geschäft in einem sehr fr...

So legen Sie einen gepunkteten Rahmen in HTML fest

Verwenden Sie CSS-Stile und HTML-Tag-Elemente Um ...