MySQLs konzeptionelles Verständnis verschiedener Sperren

MySQLs konzeptionelles Verständnis verschiedener Sperren

Optimistisches Sperren

Optimistisches Sperren wird meist basierend auf einem Mechanismus zur Aufzeichnung von Datenversionen implementiert, im Allgemeinen durch Hinzufügen eines Felds „Version“ zur Datenbanktabelle. Beim Einlesen von Daten wird die Versionsnummer mit ausgelesen, bei einem späteren Update wird die Versionsnummer um eins erhöht. Zu diesem Zeitpunkt werden die Versionsdaten der übermittelten Daten mit den aktuellen Versionsinformationen des entsprechenden Datensatzes in der Datenbanktabelle verglichen. Wenn die Versionsnummer der übermittelten Daten größer als die aktuelle Versionsnummer der Datenbanktabelle ist, werden sie aktualisiert, andernfalls gelten sie als abgelaufene Daten.

Beispiel: Eine Bestellung aufgeben:

Produktinformationen abfragen.

auswählen (Menge, Version)
von t_goods
wobei id = #{id}

Generieren Sie Bestellungen auf Grundlage von Produktinformationen.

Verringern Sie die Artikelmenge um 1.

t_goods aktualisieren
eingestellte Menge = Menge - 1
wobei id = #{id} und version = #{version}

Pessimistische Sperre

Die pessimistische Sperre wird durch den von der Datenbank bereitgestellten Sperrmechanismus implementiert. Sowohl gemeinsam genutzte Sperren als auch exklusive Sperren in MySQL sind pessimistische Sperren. Standardmäßig werden durch das Hinzufügen, Löschen und Ändern von Datenbanken exklusive Sperren hinzugefügt, während durch Abfragen keine Sperren hinzugefügt werden.

Gemeinsame Sperre (Lesesperre)

Eine gemeinsame Sperre bedeutet, dass mehrere verschiedene Transaktionen die gleiche Sperre für eine Ressource gemeinsam nutzen. Indem Sie einer Ressource ein gemeinsam genutztes Schloss hinzufügen, können Sie die Ressource selbst lesen und auch andere können die Ressource lesen (Sie können auch ein weiteres gemeinsam genutztes Schloss hinzufügen, d. h. das gemeinsam genutzte Schloss teilt mehrere Speicher), es kann jedoch nicht geändert werden. Wenn Sie es ändern möchten, müssen Sie warten, bis alle gemeinsam genutzten Sperren freigegeben sind. Syntax: select * from table lock in share mode; .

Zum Beispiel:

Fenster 1: Fügen Sie einem Datenelement in einer unvollendeten Transaktion eine gemeinsame Sperre hinzu.

BEGINNEN;
Wählen Sie * aus t_red_packet, wobei id = 1 im Freigabemodus gesperrt ist.

Fenster 2 fügt denselben Daten eine gemeinsame Sperre hinzu und die Sperre ist erfolgreich.

Wählen Sie * aus t_red_packet, wobei id = 1 im Freigabemodus gesperrt ist.

Beim Aktualisieren [Err] 1205 - Lock wait timeout exceeded; try restarting transaction die Transaktion neu zu starten, angezeigt. Sie müssen warten, bis alle gemeinsam genutzten Sperren freigegeben sind, bevor Sie den Aktualisierungsvorgang durchführen können.

AKTUALISIEREN Sie t_red_packet
SET Benutzer-ID = 2

Exklusive Sperre (Schreibsperre)

Eine exklusive Sperre bedeutet, dass für mehrere unterschiedliche Transaktionen nur eine Sperre für dieselbe Ressource vorhanden sein kann. Durch das Hinzufügen einer exklusiven Sperre zu einer Ressource können Sie Hinzufügungs-, Lösch-, Änderungs- und Abfragevorgänge an ihr durchführen, andere können sie jedoch nicht sperren, geschweige denn Hinzufügungs-, Lösch- und Änderungsvorgänge durchführen. Syntax: select * from table for update .

Fenster 1: In einer nicht abgeschlossenen Transaktion wird einem Datenelement eine exklusive Sperre hinzugefügt.

BEGINNEN;
Wählen Sie * aus t_red_packet, wobei id = 1 für Update ist.

Fenster 1, Zeilendaten erfolgreich aktualisiert.

AKTUALISIEREN Sie t_red_packet
SET Benutzer-ID = 2

Fragen Sie in Fenster 2 die Datenzeile ab und Sie können sie finden.

Wählen Sie * aus t_red_packet, wobei id = 1 ist.

Fenster 2 sperrt die Daten und zeigt die Meldung [Err] 1205 - Lock wait timeout exceeded; try restarting transaction .

Wählen Sie * aus t_red_packet, wobei id = 1 für Update ist.

Zusammenfassend bedeutet eine gemeinsame Sperre, dass alle gemeinsam lesen und die Sperre gemeinsam nutzen, aber niemand die gesperrten Daten ändern kann. Eine exklusive Sperre bedeutet, dass ich sie nur ändern möchte, Sie sie lesen können, aber Sie können sie nicht sperren oder die Daten ändern.

Zeilensperre

Mit der Zeilensperre wird eine Datenzeile gesperrt.

Tabellensperre

Eine Tabellensperre dient zum Sperren einer Tabelle.

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 fragt die ausgeführten Transaktionen ab und wie auf Sperren gewartet werden soll
  • Grundlegendes zu MySQL-Sperren basierend auf Update-SQL-Anweisungen
  • PHP verwendet Mysql Lock, um hohe Parallelität zu lösen
  • Lösung für das Problem der gesperrten Transaktionsverarbeitung mit hoher Parallelität in PHP+MySQL
  • Analyse des MySQL-Sperrmechanismus und der Verwendung
  • So überprüfen Sie, wo die Metadatensperre in MySQL blockiert ist
  • Analyse der Implementierung der MySQL-Anweisungssperre
  • Mysql verwendet den Kill-Befehl, um das Deadlock-Problem zu lösen (eine bestimmte SQL-Anweisung, die ausgeführt wird, abzubrechen).
  • Einführung in die MySQL-Entsperr- und Sperrtabelle
  • Eine vollständige Aufzeichnung eines Mysql-Deadlock-Fehlerbehebungsprozesses

<<:  So erstellen Sie Ihren eigenen privaten Nexus-Server unter Linux

>>:  Spezifische Verwendung der Schnittstelle wx.getUserProfile im Applet

Artikel empfehlen

JavaScript zum Hinzufügen und Löschen von Nachrichten im Message Board

Dieser Artikel zeigt ein kleines Beispiel für das...

Vue implementiert das Methodenbeispiel der Tab-Routing-Umschaltkomponente

Vorwort In diesem Artikel wird die Verwendung des...

Docker verpackt das lokale Image und stellt es auf anderen Maschinen wieder her

1. Verwenden Sie Docker-Images, um alle Image-Dat...

So löschen Sie Tabellendaten in MySQL

Es gibt zwei Möglichkeiten, Daten in MySQL zu lös...

Detaillierte Erläuterung des MySQL InnoDB-Sekundärindex-Sortierbeispiels

Sortierproblem Ich habe kürzlich auf Geek Time „4...

So erzwingen Sie die vertikale Anzeige auf mobilen Seiten

Ich habe kürzlich bei der Arbeit eine mobile Seit...

Detaillierter Installationsprozess der MySQL 8.0 Windows-ZIP-Paketversion

Der Installationsprozess von MySQL 8.0 Windows Zi...

Unterschied zwischen HTML ReadOnly und Enabled

Das Textfeld mit dem ReadOnly-Attribut wird auf de...