VorwortHeute werde ich Ihnen eine sehr klassische MySQL-„Falle“ verraten. MySQL-UPDATE-Anweisungen dürfen nicht so geschrieben werden! UrsacheKü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änomenAls 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:
warum? AnalyseEs 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! ZusammenfassenDies 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:
|
<<: Dieser Artikel zeigt Ihnen, wie Sie mit CSS-Rahmen spielen
>>: Grundlegende Hinweise zu HTML (empfohlen)
Im vorherigen Artikel https://www.jb51.net/articl...
Vorwort In Bezug auf das Layout ist Gobang viel e...
Vorwort Durch die Verwendung von Docker und VS Co...
Seitendomänenbeziehung: Die Hauptseite a.html gehö...
Laden Sie MySQL 5.7.20 / 5.7.21 herunter, install...
Inhaltsverzeichnis Vermeiden Sie die Verwendung d...
Inhaltsverzeichnis Voraussetzungen RN übergibt We...
Verwenden Sie CSS3, um coole Radar-Scan-Bilder zu...
Inhaltsverzeichnis 1. Lokalen Speicher erstellen ...
Vorwort Aufgrund der schwachen Typisierung von JS...
Während des Front-End-Entwicklungsprozesses trat e...
1. Proto kompilieren Erstellen Sie einen neuen Pr...
Wirkung demo.html <html> <Kopf> <m...
Das Jahr ist zu Ende und es gibt weniger Aufgaben...
Dieses Tag ist nicht Teil von HTML3.2 und wird nu...