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

So implementieren Sie das Singleton-Muster in Javascript

Inhaltsverzeichnis Überblick Code-Implementierung...

Element Tabelle Tabellenkomponente Mehrfeld (Mehrspalten) Sortiermethode

Inhaltsverzeichnis brauchen: Aufgetretene Problem...

Was sind die Attribute des JSscript-Tags

Was sind die Attribute des JS-Skript-Tags: charse...

So zeigen Sie Serverhardwareinformationen in Linux an

Hallo zusammen, heute ist Double 12, habt ihr sch...

So verwenden Sie den VIM-Editor unter Linux

Als leistungsstarker Editor mit umfangreichen Opt...

Beispielcode für ein großes Dropdown-Menü, implementiert in reinem CSS

Dies ist ein großes Dropdown-Menü, das rein in CS...

Vue realisiert den Prozentbalkeneffekt

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

So implementieren Sie eine MySQL-Datenbanksicherung in Golang

Hintergrund Navicat ist das beste MySQL-Visualisi...

Der Unterschied zwischen char und varchar in MySQL

CHAR- und VARCHAR-Typen sind ähnlich und untersch...

Benutzerdefinierte Docker-Netzwerkimplementierung

Inhaltsverzeichnis 1. Passen Sie das Netzwerk an,...