MySQL sollte niemals Update-Anweisungen wie diese schreiben

MySQL sollte niemals Update-Anweisungen wie diese schreiben

Vorwort

Heute werde ich Ihnen eine sehr klassische MySQL-„Falle“ verraten. MySQL-UPDATE-Anweisungen dürfen nicht so geschrieben werden!

Ursache

Kürzlich haben mir mehrere Entwickler auf DingTalk Fragen gestellt, wie beispielsweise das folgende Bild:

Das Problem lässt sich wie folgt zusammenfassen: Beim Aktualisieren eines Datensatzes in MySQL ist die Syntax korrekt, aber der Datensatz wird nicht aktualisiert...

Fazit: Wenn Sie in einer UPDATE-Anweisung mehrere Felder aktualisieren möchten, dürfen Sie zwischen den Feldern kein „AND“ verwenden, sondern müssen diese durch Kommas trennen.

Phänomen

Als ich zum ersten Mal auf dieses Problem stieß, nahm ich diese Anweisung und führte sie direkt in der Testbibliothek aus. Ich stellte fest, dass es tatsächlich ein Problem gab, aber es unterschied sich immer noch von der Entwicklungsbeschreibung. Hier verwende ich Testdaten, um es zu simulieren.

Die problematische SQL-Anweisung:

Update-Apps setzen Owner_Code='43212' und Owner_Name='李四', wobei 
Eigentümercode = '13245' und Eigentümername = 'Name';

Der Datensatz vor der Ausführung lautet wie folgt:

Der Datensatz nach der Ausführung lautet wie folgt:

Wie Sie sehen, ist das Ergebnis nicht, wie der Entwickler sagte, „es scheint keine Wirkung zu haben“, sondern es hat tatsächlich eine Wirkung:

Der Wert von owner_name hat sich nicht geändert, aber owner_code wurde 0!

warum? Analyse

Es scheint, dass es kein Problem mit der Syntax gibt. Ich habe die Update-Syntax in der offiziellen MySQL-Dokumentation nachgeschlagen:

Als klar wurde, dass das Format der Zuweisungsliste eine durch Kommas getrennte Liste mit Spaltennamen=Werten ist, war plötzlich klar, dass die vom Entwickler gewünschte Aktualisierungsanweisung für mehrere Felder folgendermaßen geschrieben werden sollte:

Update-Apps setzen Owner_Code='43212' , Owner_Name='李四' wobei 
Eigentümercode = '13245' und Eigentümername = 'Name'; 

Gehen Sie zurück und versuchen Sie es erneut:

Und tatsächlich habe ich dieses Mal das gewünschte Ergebnis erzielt!

Zusammenfassung: Wenn Sie in einer UPDATE-Anweisung mehrere Felder aktualisieren möchten, können Sie zwischen den Feldern kein „AND“ verwenden, sondern müssen sie durch Kommas trennen.

Nachtrag: Als ich später etwas Zeit hatte, habe ich zurückgeblickt und mich gefragt, warum das seltsame Ergebnis „owner_code=0“ erschien, als sie durch „AND“ getrennt wurden.

Nach vielen Versuchen habe ich Folgendes herausgefunden:

Update-Apps setzen Owner_Code='43212' und Owner_Name='李四', wobei 
Eigentümercode = '13245' und Eigentümername = 'Name'; 

ist gleichbedeutend mit:

Aktualisieren Sie Apps, indem Sie owner_code=('43212' und owner_name='李四') festlegen, wobei 
Eigentümercode = '13245' und Eigentümername = 'Name'; 

Und ('43212' und owner_name='李四') ist ein logischer Ausdruck, und es ist nicht schwer zu erkennen, dass owner_name nicht '李四' ist.

Daher ist das Ergebnis dieses logischen Ausdrucks falsch, was in MySQL 0 entspricht!

Zusammenfassen

Dies ist das Ende dieses Artikels darüber, wie man in MySQL niemals Update-Anweisungen schreibt. Weitere Informationen zum Schreiben von Update-Anweisungen in MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Verwendung der MySQL-Update-Anweisung
  • Zusammenfassung der MySQL-Cross-Table-Update-SQL-Anweisung für Multi-Table-Update
  • Anwendungsbeispiele für MySQL-SELECT-FOR-UPDATE-Anweisungen
  • Ausführliche Erläuterung der MySQL UPDATE-Anweisung
  • PHP+MySQL-Methode zur Ermittlung, ob die Update-Anweisung erfolgreich ausgeführt wurde
  • Beispiel-Tutorial zur Verwendung der UPDATE-Anweisung in MySQL
  • SQL-Anweisung erläutert die korrekte Verwendung von MySQL-Updates
  • Detaillierte Erläuterung der Insert- und Update-Anweisungen in MySQL-Datenbanken
  • Detaillierte Erläuterung des Ausführungsprozesses der MySQL-Update-Anweisung
  • Richtige Verwendung der MySQL-Update-Anweisung

<<:  Dieser Artikel zeigt Ihnen, wie Sie mit CSS-Rahmen spielen

>>:  Grundlegende Hinweise zu HTML (empfohlen)

Artikel empfehlen

Neue Funktionen von JS ES: Einführung in Erweiterungsoperatoren

1. Spread-Operator Der Spread-Operator besteht au...

So installieren Sie Nginx an einem bestimmten Ort im Centos-System

Wie installiere ich Nginx an einem bestimmten Ort...

MySQL-Datenmigration mit dem Befehl MySQLdump

Die Vorteile dieser Lösung liegen in der Einfachh...

So verwenden Sie vw+rem für das mobile Layout

Verwenden Sie immer noch das flexible Rem-Layout?...

Mysql-Indextypen und grundlegende Anwendungsbeispiele

Inhaltsverzeichnis Index - Allgemeiner Index - Ei...

js, um einen einfachen Kalendereffekt zu erzielen

In diesem Artikel wird der spezifische Code von j...

Ideen und Codes zur Realisierung des Lupeneffekts in js

In diesem Artikelbeispiel wird der spezifische Co...

Detailliertes Tutorial zur Installation des Quellcodes von CentOS6.9+Mysql5.7.18

Bei der Installation des Quellcodes von CentOS6.9...

Vue verwendet E-Charts, um ein Organigramm zu zeichnen

Gestern habe ich einen Blog über den kreisförmige...