In diesem Artikel werden die Vor- und Nachteile verschiedener Datenaktualisierungsvorgänge anhand einer Fallstudie zur Aktualisierung des Kontostands eines Benutzerkontos analysiert. Ich hoffe, das hilft euch allen 🐶. Datenbankversion: mysql 5.7.23 Fallstudie DDL zum Erstellen einer Datenbank: Tabelle „hw_account“ erstellen ( `id` int(11) NICHT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `balance` int(11) DEFAULT NULL, `status` varchar(20) DEFAULT NULL, `create_time` datetime NICHT NULL STANDARD CURRENT_TIMESTAMP, `update_time` Zeitstempel NULL DEFAULT CURRENT_TIMESTAMP BEI UPDATE CURRENT_TIMESTAMP, PRIMÄRSCHLÜSSEL (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; Kontostand aktualisieren Direktes Update Lösung 1: Update nach Abfrage # Datenabfrage select * from hw_account where id = 1; # Daten aktualisieren, hw_account aktualisieren, Guthaben festlegen = 5, wobei ID = 1; Das Problem besteht darin, dass das Update verloren gehen kann, wenn der Vorgang in zwei Teile aufgeteilt und gleichzeitig ausgeführt wird. Optimistisches Sperrschema Verwenden Sie die Versionsnummernoperation, d. h. fügen Sie der Datenbank eine optimistische Sperre hinzu. # Datenabfrage select * from hw_account where id = 1; # Daten aktualisieren update hw_account set balance = 5 , version = version + 1 wobei ID = 1 und Version = n; # Bestimmen Sie, ob es erfolgreich war, wenn Zeile < 1 { Rollback} Das bestehende Problem besteht darin, dass andere Anfragen fehlschlagen, wenn dieses Datenelement gleichzeitig verarbeitet wird. Wenn der Front-End-Link dieser Anforderung relativ lang ist, sind die Rollback-Kosten relativ hoch. Schlossfreie Lösung Es ist keine Abfrage erforderlich, es wird eine Datenbankberechnung verwendet und es ist kein Versionsnummernvorgang erforderlich. Die Gültigkeit wird direkt anhand der Domänenwerte beurteilt. Das spezifische SQL lautet wie folgt: # Daten aktualisieren update hw_account set balance = balance + @change_num , version = version + 1 wobei ID = 1 und Version = n; # Bestimmen Sie, ob es erfolgreich war, wenn Zeile < 1 { Rollback} Diese Lösung lässt sich zwar relativ einfach modifizieren, basiert jedoch auf Datenberechnungen und ist nicht besonders benutzerfreundlich. Warteschlangenvorgänge Datenanforderungen werden über die verteilten Sperren von Redis oder ZK in die Warteschlange gestellt. Aktualisieren Sie anschließend die Daten. # Pseudocode if (verteilte Sperre abrufen) { Aktualisiere hw_account, setze Guthaben = @balance, wobei ID = 1; } anders { # Warten eingeben oder drehen, um die Sperre zu erhalten} Häufig gestellte Fragen Wenn das Feld „update_time“ in den Daten vorhanden ist, wie viele Zeilen sind betroffen? Das Feld update_time wird wie folgt definiert. Wenn die Daten id = 1, status = 1 sind und die SQL-Anweisung zum Aktualisieren der Daten lautet Aktualisiere hw_account, setze „Status“ = 1, wobei ID = 1; Die Anzahl der zurückgegebenen betroffenen Zeilen ist 0; Wenn ein Update ausgeführt wird, die Anzahl der betroffenen Zeilen jedoch 0 ist, wird dann eine Zeilensperre hinzugefügt? Ja, alle Update-Anweisungen fügen Zeilensperren hinzu (Voraussetzung, innerhalb einer Transaktion) Verweise mysql.com Dies ist das Ende dieses Artikels über die Fallanalyse mehrerer MySQL-Aktualisierungsvorgänge. Weitere relevante Inhalte zu MySQL-Aktualisierungsvorgängen finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Einführung in häufig verwendete MySQL-Befehle in der Linux-Umgebung
Anti-Crawler-Richtliniendatei hinzugefügt: vim /u...
Inhaltsverzeichnis Vorne geschrieben Was genau is...
Inhaltsverzeichnis Vorwort 1. Anwendungsbeispiele...
Bereits in den CSS2-Empfehlungen von 1998 verschwa...
Inhaltsverzeichnis Überblick Überprüfen von setTi...
Inhaltsverzeichnis Überblick Die Geschichte der C...
Schritte zur Linux-Installation von JDK1.8 1. Übe...
Letzte Woche gab mir der Lehrer eine kleine Hausa...
Einführung Beginnen wir wie immer mit einer Szene...
Inhaltsverzeichnis Konfiguration hinzufügen JSON-...
Methode 1: Verwenden Sie den Befehl SET PASSWORD ...
Hinweis: Es wird empfohlen, dass der Speicher der...
Inhaltsverzeichnis Überblick Filter definieren Ve...
Vorwort In diesem Artikel untersuchen wir die Ent...
In diesem Artikel wird der spezifische Code von J...