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

Spezifische Verwendung von MySQL-Fensterfunktionen

Inhaltsverzeichnis 1. Was ist eine Fensterfunktio...

Detaillierte Installation und Konfiguration von hadoop2.7.2 unter Ubuntu15.10

Im Internet und in vielen Büchern gibt es viele T...

Detaillierter Prozess der Vue-Front-End-Verpackung

Inhaltsverzeichnis 1. Verpackungsbefehl hinzufüge...

Eine kurze Diskussion zur Verwendung von React.FC und React.Component

Inhaltsverzeichnis 1. Reagieren.FC<> 2. Kla...

Implementierung eines einfachen Rechners mit Javascript

In diesem Artikelbeispiel wird der spezifische Ja...

Implementierung des gemeinsamen Grid-Layouts

Keine Lücken auf beiden Seiten, Lücken zwischen j...

Verwendung von MySQL-Triggern

Trigger können dazu führen, dass vor oder nach de...

MySQL-Serververbindung, Trennung und cmd-Bedienung

Verwenden Sie den Befehl mysql, um eine Verbindun...

Lösung für Win10 ohne Hyper-V

Suchen Sie immer noch nach einer Möglichkeit, Hyp...

Empfohlene Plugins und Anwendungsbeispiele für Vue-Unit-Tests

Inhaltsverzeichnis rahmen Erstklassiges Fehlerrep...

Import-, Export-, Sicherungs- und Migrationsvorgänge für Docker-Images

Export: docker save -o centos.tar centos:latest #...

Tutorial zum Importieren und Exportieren von Docker-Containern

Hintergrund Die Popularität von Docker hängt eng ...