Mehrere Möglichkeiten zum Aktualisieren von Batches in MySQL

Mehrere Möglichkeiten zum Aktualisieren von Batches in MySQL

Normalerweise verwenden wir die folgende SQL-Anweisung, um Feldwerte zu aktualisieren:

UPDATE meineTabelle SET meinFeld='Wert' WHERE anderes_Feld='anderer_Wert';

Aber was würden Sie tun, wenn Sie mehrere Datenzeilen aktualisieren möchten und die Feldwerte in jeder Zeile unterschiedlich sind? Zunächst denken Sie vielleicht an die Verwendung einer Schleife zur Ausführung mehrerer UPDATE-Anweisungen, wie im folgenden Python-Programmbeispiel:

für x in xrange(10):
  sql = ''' UPDATE meineTabelle SET meinFeld='Wert' WHERE anderes_Feld='anderer_Wert'; '''

An dieser Methode ist nichts auszusetzen, und der Code ist einfach und leicht zu verstehen, aber in der Schleifenanweisung werden mehr als eine SQL-Abfrage ausgeführt. Bei der Optimierung des Systems möchten wir die Anzahl der Datenbankabfragen immer so weit wie möglich reduzieren, um den Ressourcenverbrauch zu verringern und die Systemgeschwindigkeit zu verbessern. Glücklicherweise gibt es eine bessere Lösung. Die SQL-Anweisung ist etwas komplizierter, aber Sie müssen nur eine Abfrage ausführen. Die Syntax lautet wie folgt:

AKTUALISIEREN Sie meine Tabelle
  SET meinFeld = CASE anderes_Feld
    WENN 1, DANN 'Wert'
    WENN 2, DANN 'Wert'
    WENN 3, DANN 'Wert'
  ENDE
WO id IN (1,2,3)

Diese SQL-Anweisung ist leicht zu verstehen. Sie verwendet das in vielen Programmiersprachen übliche Schlüsselwort CASE, um Typentscheidungen für verschiedene Zweige basierend auf dem Wert des ID-Felds vorzunehmen.

Wenn Sie mehrere Felder in einer Zeile aktualisieren müssen, können Sie die folgende SQL-Anweisung verwenden:

UPDATE-Kategorien
  SET display_order = CASE-ID
    WENN 1, DANN 3
    WENN 2, DANN 4
    Wenn 3, dann 5
  ENDE,
  Titel = Fall-ID
    WENN 1, DANN „Neuer Titel 1“
    WENN 2, DANN „Neuer Titel 2“
    WENN 3, DANN „Neuer Titel 3“
  ENDE
WO id IN (1,2,3)

Das obige Schema reduziert die Anzahl der Datenbankabfragevorgänge erheblich und spart viel Systemressourcen.

Dies hat jedoch einen Nachteil: Das Problem, das beachtet werden muss, ist die Länge der SQL-Anweisung. Dabei muss die von der Programmausführungsumgebung unterstützte Zeichenfolgenlänge berücksichtigt werden. Dies kann natürlich auch durch Aktualisieren der MySQL-Einstellungen erweitert werden.

Natürlich bietet uns Python, eine so leistungsstarke Sprache, auch eine so leistungsstarke Methode wie ExecuteMany, mit der wir nicht nur Daten einfügen, sondern auch Daten aktualisieren können. Als Person, die häufig Dinge tut, müssen diese Dinge häufig verwendet werden, um die Ergebnisse zu vergleichen.

update_sql = ''' AKTUALISIEREN mayi_order_image 
setze order_city = %s
wobei user_ip = %s und dt = %s und id = %s 
 und user_ip ist nicht null und (order_city ist null oder order_city = '')
 '''
pp = []
für x in xrange(len(Ergebnis)):
  ip = Ergebnis[x][0]
  id_ = Ergebnis[x][1]
  hinzufügen = dbip.lookup(str(ip))
  fügt hinzu = hinzufügen.split('\t')
  Adresse = str(fügt hinzu[0]) + ','+str(fügt hinzu[1] )+ ','+ str(fügt hinzu[2])
  pp.append((Adresse,IP,Ende,ID_))
  wenn x%5000 == 0:
    saveLog_many(update_sql,pp)
    pp = []
saveLog_many(update_sql,pp)

Ist das bequemer? Aber was die Geschwindigkeit betrifft, denke ich, dass es zum Vergleich besser wäre, es mit der zweiten Methode zu kombinieren.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • MySQL-Batch-Update und Batch-Update unterschiedlicher Werte mehrerer Datensätze
  • Zusammenfassung der gemeinsamen Updatemethode für MySQL-Updates mehrerer Tabellen
  • Stapelverarbeitung von Feldinhalten, Löschen, Kopieren und anderen Aktualisierungsbefehlen für MySQL-Datentabellen
  • MySQL implementiert Batch-Update von Daten in verschiedenen Tabellen

<<:  Axios-Projekt mit 77,9 K GitHub-Repository: Welche Dinge sind es wert, gelernt zu werden?

>>:  So überprüfen Sie die PCIe-Version und -Geschwindigkeit unter Linux

Artikel empfehlen

Einführung in die Verwendung von exists und except in SQL Server

Inhaltsverzeichnis 1. existiert 1.1 Beschreibung ...

vue-cli4.5.x erstellt schnell ein Projekt

1. Installieren Sie vue-cli npm ich @vue/cli -g 2...

Untersuchung des Wertes des Positionsattributs in CSS (Zusammenfassung)

Das CSS-Positionsattribut gibt den Positionierung...

Bootstrap3.0-Studiennotizentabelle bezogen auf

In diesem Artikel werden hauptsächlich Tabellen e...

Verwenden Sie Docker, um ein verteiltes lnmp-Image zu erstellen

Inhaltsverzeichnis 1. Verteilte LNMP-Image-Produk...

Details der MySQL-Berechnungsfunktion

Inhaltsverzeichnis 2. Feldverkettung 2. Geben Sie...

JavaScript zur Implementierung eines einfachen Einkaufsformulars

In diesem Artikel wird der spezifische JavaScript...

Nginx-Anti-Crawler-Strategie, um UA am Crawlen von Websites zu hindern

Anti-Crawler-Richtliniendatei hinzugefügt: vim /u...

JavaScript zum Implementieren einer einfachen Uhr

In diesem Artikelbeispiel wird der spezifische Co...