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

Zusammenfassung der 7 Protokolltypen in MySQL

In MySQL gibt es folgende Protokolldateien: 1: Pr...

So erzielen Sie mit Vue3 beispielsweise einen Lupeneffekt

Inhaltsverzeichnis Vorwort 1. Die Bedeutung der K...

Vue3.0 implementiert die Fallstudie zum Lupeneffekt

Der zu erzielende Effekt ist: Festes Vergrößern a...

Architektur und Komponentenbeschreibung der privaten Docker-Bibliothek Harbor

In diesem Artikel wird die Zusammensetzung der Ha...

Implementierung der Docker-Bereitstellung von Webprojekten

Im vorherigen Artikel wurde der Docker-Dienst ins...

Implementierung der MVCC-Mehrversions-Parallelitätskontrolle von MySQL

1 Was ist MVCC Der vollständige Name von MVCC lau...

Implementierung des Vue-Zählers

Inhaltsverzeichnis 1. Implementierung des Zählers...

Mit CSS3 können Sie eine schwebende Wolkenanimation erzielen

Wirkung der Operation html <Kopf> <meta ...

CSS Houdini erzielt einen dynamischen Welleneffekt

CSS Houdini gilt als die aufregendste Innovation ...

Das Erlebnis gestalten: Was auf dem Knopf liegt

<br />Vor Kurzem hat UCDChina eine Artikelse...

Lassen Sie uns im Detail darüber sprechen, wie der NodeJS-Prozess beendet wird

Inhaltsverzeichnis Vorwort Aktiver Rückzug Ausnah...