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

Export- und Importvorgänge für Docker-Images

Was ist, wenn die Basis-Images bereits konfigurie...

Beispiele für Clearfix und Clear

In diesem Artikel wird hauptsächlich die Verwendun...

Tutorial zur Installation von MySQL auf Alibaba Cloud Centos 7.5

Es scheint, dass die MySQL-Server-Datei zur norma...

So installieren und implementieren Sie Zabbix 5.0 für Nginx

Inhaltsverzeichnis Experimentelle Umgebung Instal...

Zusammenfassung der Methoden zur Änderung des Git-Commit-Protokolls

Fall 1: Letzte Übermittlung und kein Push Führen ...

Ausführliche Erklärung des Sperrmechanismus in MySQL InnoDB

Vorne geschrieben Eine Datenbank ist im Wesentlic...

So exportieren und importieren Sie SQL-Dateien unter einem Linux-Befehl

Dieser Artikel beschreibt, wie Sie SQL-Dateien mi...

So richten Sie ein Bereitstellungsprojekt unter einem Linux-System ein

1. Ändern Sie die Firewall-Einstellungen und öffn...

Detaillierte Erklärung des wunderbaren CSS-Attributs MASK

Dieser Artikel stellt eine sehr interessante Attr...

js canvas realisiert kreisförmige Wasseranimation

In diesem Artikelbeispiel wird der spezifische Co...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.17

Dieser Artikel enthält das grafische Tutorial zur...

Die Grundprinzipien und die detaillierte Verwendung des Ansichtsfensters

1. Übersicht über das Ansichtsfenster Mobile Brow...