So handhaben Sie gleichzeitige Aktualisierungen von MySQL-Daten

So handhaben Sie gleichzeitige Aktualisierungen von MySQL-Daten

Wird UPDATE gesperrt?

Wird die SQL-Anweisung gesperrt, wenn sie wie folgt lautet?

UPDATE Tabelle1 SET Num = Num + 1 WHERE id=1;

Die Antwort ist nein

Tatsächlich unterstützt MySQL das Sperren von Datenzeilen (InnoDB) und fügt während UPDATE/DELETE-Vorgängen automatisch exklusive Sperren hinzu. Allerdings werden nicht alle Sperren angewendet, solange ein UPDATE-Schlüsselwort vorhanden ist . Für die obige MySQL-Anweisung ist es nicht nur eine UPDATE-Anweisung, sondern sollte zwei SQL-Anweisungen ähneln (Pseudocode):

a = AUSWÄHLEN * AUS Tabelle1 WO id=1;
UPDATE Tabelle1 SET Num = a.num + 1 WHERE id=1;

Beim Ausführen einer SELECT-Anweisung erfolgt keine Sperre, nur beim Ausführen eines UPDATE wird eine Sperre vorgenommen. Daher kommt es bei gleichzeitigen Vorgängen zu inkonsistenten Aktualisierungsdaten. Ist die Ursache gefunden, ist die Lösung des Problems nicht mehr weit. Es gibt zwei Möglichkeiten, diese Art von Problem zu lösen:

  • SELECT explizit über Transaktionen sperren
  • Verwenden Sie einen optimistischen Sperrmechanismus

SELECT explizit

Es gibt zwei Möglichkeiten, SELECT zu sperren:

SELECT ... LOCK IN SHARE MODE #Gemeinsame Sperre, andere Transaktionen können lesen, aber nicht aktualisieren SELECT ... FOR UPDATE #Exklusive Sperre, andere Transaktionen können weder lesen noch schreiben

Wenn Sie diese beiden Anweisungen nicht verwenden, wird die SELECT-Anweisung standardmäßig nicht gesperrt. Und für die oben genannten Szenarien müssen exklusive Sperren verwendet werden. Darüber hinaus sind die beiden oben genannten Aussagen nur innerhalb einer Transaktion wirksam, da sie sonst keine Wirkung entfalten. So verwenden Sie Transaktionen in der MySQL-Befehlszeile:

AUTOCOMMIT SETZEN=0; 
MIT DER ARBEIT BEGINNEN; 
 a = SELECT num FROM table1 WHERE id=2 FOR UPDATE; 
 UPDATE Tabelle1 SET Num = a.num + 1 WHERE id=2; 
ARBEIT VERPFLICHTEN;

Auf diese Weise verwenden Sie bei zukünftigen Datenaktualisierungen diese Transaktion zum Ausführen des Vorgangs. Im Falle einer Parallelität wird die später ausgeführte Transaktion blockiert, bis die aktuelle Transaktion abgeschlossen ist. (Parallelität wird durch Sperren in sequentielle Ausführung geändert)

Verwenden optimistischer Sperren

Optimistisches Sperren ist ein Mechanismus zur Sperrimplementierung, der naiv davon ausgeht, dass bei allen zu ändernden Daten keine Konflikte auftreten. Daher werden die Daten vor der Aktualisierung nicht gesperrt, sondern es wird nur die Versionsnummer der Datenzeile abgefragt (die Versionsnummer ist hier ein benutzerdefiniertes Feld, für das basierend auf der Geschäftstabelle ein zusätzliches Feld hinzugefügt werden muss, und es wird bei jeder Aktualisierung automatisch erhöht oder aktualisiert).

Bei einer Datenaktualisierung werden den Aktualisierungsbedingungen Informationen zur Versionsnummer hinzugefügt.

  • Wenn sich die Versionsnummer nicht ändert, bedeutet dies, dass die Datenzeile nicht aktualisiert wurde und die Aktualisierungsbedingungen erfüllt sind, sodass die Aktualisierung erfolgreich ist.
  • Wenn sich die Versionsnummer ändert, kann die Datenzeile nicht aktualisiert werden, da die Bedingung nicht erfüllt ist. Zu diesem Zeitpunkt ist ein SQL-Vorgang erforderlich. (Datensatzzeile erneut abfragen und Daten mit der neuen Versionsnummer noch einmal aktualisieren)

üben

Üben Sie die Updatesperre einmal an einer Schülertabelle, die eine Datenmenge enthält.

Öffnen Sie zwei Clients

Ausgeführt nach der ersten offenen Transaktion

Wählen Sie zum Aktualisieren den Namen des Studenten mit der ID = 1 aus. 

Nachdem die zweite Transaktion geöffnet wurde, wird dieselbe Anweisung ausgeführt und es wird festgestellt, dass die Daten durch die erste Transaktion blockiert sind.

Zu diesem Zeitpunkt führt die erste Transaktion die Änderung aus und führt ein Commit durch.

Die ausgewählte Ausführung der zweiten Transaktion war länger als 4 Sekunden blockiert

Zusammenfassung

Im Allgemeinen können beide Methoden gleichzeitige Aktualisierungsvorgänge an der Datenbank unterstützen. Welche Methode verwendet wird, hängt jedoch vom tatsächlichen Anwendungsszenario ab und davon, welche Methode das Anwendungsszenario besser unterstützt und die geringsten Auswirkungen auf die Leistung hat.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Ein praktischer Bericht über die Prüfung und Bearbeitung doppelter MySQL-Datensätze vor Ort
  • MySQLs Methode zum Umgang mit doppelten Daten (Verhindern und Löschen)
  • MySQL-Lernnotizen zum Umgang mit doppelten Daten
  • Detaillierte Erläuterung des MySQL-Ausführungsprinzips, der logischen Schichtung und der Änderung der Datenbankverarbeitungs-Engine
  • Einige Methoden zur Optimierung der Abfragegeschwindigkeit bei der Verarbeitung großer Datenmengen durch MySQL
  • Sortieren der MySQL-Datenverarbeitung und Erläuterung der Vorgänge zum Hinzufügen, Löschen und Ändern

<<:  Zabbix3.4-Methode zum Überwachen des MongoDB-Datenbankstatus

>>:  Routing-Wiederverwendungsfunktion für mehrere Tabs der Ant Design Blazor-Komponentenbibliothek

Artikel empfehlen

Detaillierte Erläuterung der Verwendung der MySQL-Verkettungsfunktion CONCAT

In den vorherigen Artikeln wurden die Ersetzungsf...

Erläuterung der Methode zum Schreiben von SQL-Anweisungen zum Einfügen

Methode 1: INSERT INTO t1(Feld1,Feld2) VALUE(v001...

Klassischer Beispielcode für JavaScript-Funktionsaufrufe

Inhaltsverzeichnis Klassisches Beispiel für einen...

Die große Rolle von HTML-Meta

Es gibt zwei Metaattribute: Name und http-equiv. D...

Analyse der HTTP-Dienstschritte auf einer virtuellen VMware-Maschine

1. Verwenden Sie xshell, um eine Verbindung mit d...

Funktionsprinzip und Implementierungsmethode der Vue-Anweisung

Einführung in Vue Die aktuelle Ära der großen Fro...

Detaillierte Erklärung zur Verwendung der Linux-lseek-Funktion

Hinweis: Wenn der Artikel Fehler enthält, hinterl...

Detaillierte Erklärung des Ungültigkeitsprozesses des VUE-Tokens

Inhaltsverzeichnis Ziel Gedankenanalyse Code-Land...