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

Einführung in den Löschvorgang von B-Tree

Im vorherigen Artikel https://www.jb51.net/articl...

VUE+Canvas realisiert den gesamten Prozess eines einfachen Gobang-Spiels

Vorwort In Bezug auf das Layout ist Gobang viel e...

Implementierungscode für die adaptive IFrame-Größe

Seitendomänenbeziehung: Die Hauptseite a.html gehö...

Tipps zum Schreiben prägnanter React-Komponenten

Inhaltsverzeichnis Vermeiden Sie die Verwendung d...

Detaillierte Erklärung der Interaktion zwischen React Native und IOS

Inhaltsverzeichnis Voraussetzungen RN übergibt We...

CSS3-Radarscan-Kartenbeispielcode

Verwenden Sie CSS3, um coole Radar-Scan-Bilder zu...

So verwenden Sie die Typerweiterung ohne Typingscript

Vorwort Aufgrund der schwachen Typisierung von JS...

Grafische Erklärung des Funktionsaufrufs der Protodatei in Vue

1. Proto kompilieren Erstellen Sie einen neuen Pr...

Detaillierte Erklärung des Marquee-Attributs in HTML

Dieses Tag ist nicht Teil von HTML3.2 und wird nu...