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

Vorteile und Prinzipien der MySQL-Replikation im Detail erklärt

Bei der Replikation werden die DDL- und DML-Opera...

Detailliertes Tutorial zur Installation von Mysql5.7.19 auf Centos7 unter Linux

1. MySQL herunterladen URL: https://dev.mysql.com...

So finden und löschen Sie doppelte Datensätze in MySQL

Hallo zusammen, ich bin Tony, ein Lehrer, der nur...

Implementierungsschritte zum Erstellen eines lokalen Webservers auf Centos8

1 Übersicht System CentOS8, verwenden Sie httpd, ...

Gängige Methoden und Probleme der Docker-Bereinigung

Wenn Sie Docker für die Entwicklung im großen Maß...

Installationsschritte für das grafische MySQL-Verwaltungstool Navicat

Inhaltsverzeichnis Vorwort 1. Stellen Sie das Ins...

So verwenden Sie CSS-Medienabfragen mit einem geringeren Seitenverhältnis

CSS-Medienabfragen haben ein sehr praktisches Sei...

So verwenden Sie Node zum Implementieren des statischen Datei-Cachings

Inhaltsverzeichnis Cache Klassifizierung des Cach...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.12

Notieren Sie die Installations- und Konfiguration...