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

Zusammenfassung zur Anwendung dekorativer Elemente im Webdesign

<br />Vorwort: Bevor Sie dieses Tutorial les...

So lösen Sie das Problem, dass der Docker-Container keinen Vim-Befehl hat

Finden Sie das Problem Als ich heute versuchte, d...

Erkunden Sie die gängigen VMware ESXI CLI-Befehle

Inhaltsverzeichnis 【Allgemeine Befehle】 [Zusammen...

So verwenden Sie das JQuery-Editor-Plugin tinyMCE

Ändern Sie die vereinfachte Dateigröße und laden ...

Natives JS zur Implementierung der Dropdown-Box-Auswahlkomponente

In diesem Artikelbeispiel wird der spezifische JS...

Eine detaillierte Einführung in den wget-Befehl in Linux

Inhaltsverzeichnis Installieren Sie zuerst wget H...

Implementierungsprinzip und Skriptcode der HTML-Rabattpreisberechnung

Code kopieren Der Code lautet wie folgt: <!DOC...

Flex-Grow-, Flex-Shrink-, Flex-Basis- und Neun-Raster-Layout verstehen

1. Flex-Grow-, Flex-Shrink- und Flex-Basis-Eigens...

So implementieren Sie verschiebbare Komponenten in Vue

In diesem Artikel erfahren Sie, wie Sie ziehbare ...

Der Unterschied zwischen Float- und Positionsattributen im CSS-Layout

CSS-Layout – Positionseigenschaft Das Positionsat...

Verwendung von MySQL DDL-Anweisungen

Vorwort Die Sprachklassifikation von SQL umfasst ...

Dynamische Vue-Komponente

Inhaltsverzeichnis 1. Komponente 2. Keep-Alive-Mo...