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

MySQL-Join-Abfrage (Left Join, Right Join, Inner Join)

1. Allgemeine Verbindungen für MySQL INNER JOIN (...

So verwenden Sie Vue zum Implementieren von CSS-Übergängen und Animationen

Inhaltsverzeichnis 1. Der Unterschied zwischen Üb...

HTML+CSS zur Realisierung einer einfachen Navigationsleistenfunktion

Ohne weitere Umschweife komme ich gleich zum Code...

Eine ausführliche Einführung in React-Referenzen

1. Was ist Refs wird in Computern als Resilient F...

MySQL-Paket für Abfrage ist zu groß – Problem und Lösung

Problembeschreibung: Fehlermeldung: Ursache: com....

W3C Tutorial (1): W3C verstehen

Das W3C, eine 1994 gegründete Organisation, zielt...

Vue integriert Tencent Map zur Implementierung der API (mit DEMO)

Inhaltsverzeichnis Hintergrund zum Schreiben Proj...

Methoden und Vorschläge zur Uniapp-Projektoptimierung

Inhaltsverzeichnis 1. Kapseln Sie komplexe Seiten...

JS verwendet die Methode „reduce()“, um Baumstrukturdaten zu verarbeiten

Inhaltsverzeichnis Definition Grammatik Beispiele...

Der Quellcode zeigt, warum Vue2 Daten und Methoden direkt abrufen kann

Inhaltsverzeichnis 1. Beispiel: Hiermit können Da...

So verwenden Sie http und WebSocket in CocosCreator

Inhaltsverzeichnis 1. HttpGET 2. HTTP POST WebSoc...

Implementierungsprinzip und Prozessanalyse der TCP-Leistungsoptimierung

Drei-Wege-Handshake-Phase Anzahl der Wiederholung...

Zusammenfassung der grundlegenden Wissenspunkte der Linux-Gruppe

1. Grundlegende Einführung in die Linux-Gruppe Un...