Beispiele für die Verwendung von pessimistischem und optimistischem Sperren in MySQL

Beispiele für die Verwendung von pessimistischem und optimistischem Sperren in MySQL

Pessimistische Sperre

Pessimistische Sperre, betrachtet die Daten als pessimistisch. Wenn wir die Daten abfragen, fügen wir eine Sperre hinzu. Verhindern Sie, dass andere Threads Manipulationen vornehmen, bis sie die Sperre erhalten.

Als Beispiel sei die folgende Tabelle genannt. Status=1 bedeutet, dass die Bestellung aufgegeben werden kann, und Status=2 bedeutet, dass die Bestellung nicht aufgegeben werden kann. Wenn während des parallelen Prozesses zwei Benutzer gleichzeitig den Status = 1 prüfen, können zwar beide Benutzer logischerweise neue Bestellungen hinzufügen, dies führt jedoch zu einem Überverkauf des Produkts.

Das folgende Beispiel

CREATE TABLE `Waren` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `name` varchar(255) DEFAULT NULL,
 `status` tinyint(4) DEFAULT NULL,
 `version` int(11) DEFAULT NULL,
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4
INSERT INTO demo.goods (ID, Name, Status, Version) VALUES (1, „Test“, 1, 1);

Ausführung von session1

setze Autocommit=0;
beginnen;
wählen *
von Waren, wobei ID=1 und Warenstatus=1 für Aktualisierung;
Warensatzstatus aktualisieren=2, wobei ID=1;

session2 Ausführung

beginnen;
Wählen Sie * aus Waren mit ID=1 für Aktualisierung;

Zu diesem Zeitpunkt ist Sitzung 2 blockiert, da sich die Sperre noch in Sitzung 1 befindet und die Sperre daher immer wartet. Wenn session1 nicht übermittelt wird, wird session2 nach einer bestimmten Zeit unterbrochen und die Verbindung getrennt und meldet

(1205, 'Wartezeit für Sperre überschritten; versuchen Sie, die Transaktion neu zu starten') Fehler,

Die spezifische Wartezeit für die Sperre kann durch Festlegen des Parameters innodb_lock_wait_timeout gesteuert werden.

Wenn der Commit-Vorgang zu diesem Zeitpunkt in Sitzung1 ausgeführt wird, erhält Sitzung2 die Abfrageergebnisse und die Sperre wird an Sitzung2 vergeben.

Wir können auch

Status wie „innodb_row_lock_%“ anzeigen;

Um weitere Informationen zur Sperre anzuzeigen.

Optimistisches Sperren

Optimistisches Sperren unterscheidet sich vom pessimistischen Sperren. Optimistisches Sperren wird durch ein eigenes Programm und nicht durch mySql selbst implementiert.

Optimistisches Sperren sperrt die Abfrage nicht und überprüft beim Aktualisieren nur die Versionsnummer.

Wenn wir beispielsweise die Tabelle „goods“ abfragen und feststellen, dass die Version 1 ist, dann wird SQL beim Aktualisieren dieser Tabelle

Wählen Sie * aus Waren mit ID=1;
Warensatzstatus aktualisieren=2, Version=Version+1 wobei ID=1 und Version=1;

Die Version ist hier die Versionsnummer zum Zeitpunkt der Abfrage und jede Änderung führt zu Version+1. Wenn die Versionsnummern nicht übereinstimmen, ist das Update nicht erfolgreich.

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.

Das könnte Sie auch interessieren:
  • Beispiele für optimistisches und pessimistisches Sperren in MySQL
  • Verständnis und Anwendungsanalyse der pessimistischen und optimistischen Sperre von MySQL
  • Umfassende Analyse von optimistischer Sperre, pessimistischer Sperre und MVCC in MySQL
  • Pessimistisches Sperren und optimistisches Sperren in MySQL
  • MySQL-Implementierung für pessimistisches und optimistisches Sperren

<<:  Detaillierte Erklärung zur Ausführung von Skripten oder Anweisungen durch Zabbix auf Remote-Hosts

>>:  Detaillierte Beispiele für die Ausführung von Zabbix-Remotebefehlen

Artikel empfehlen

So verwenden Sie JSONP in Vue

Inhaltsverzeichnis 1. Einleitung 2. Installation ...

Implementierung der Nginx-Flusskontrolle und Zugriffskontrolle

Nginx-Verkehrskontrolle Die Ratenbegrenzung ist e...

Tutorial zur Installation von phpMyAdmin unter Linux centos7

yum install httpd php mariadb-server –y Notieren ...

Detailliertes Tutorial zur Installation eines PXC-Clusters mit Docker

Inhaltsverzeichnis Vorwort Vorbereitende Vorberei...

Docker-Bindung mit fester IP/Hostübergreifender Container-Gegenzugriffsvorgang

Vorwort Bisher waren statische IPs, die über Pipe...

Installieren Sie JDK1.8 in einer Linux-Umgebung

Inhaltsverzeichnis 1. Installationsumgebung 2. In...

Lösungen für Websites mit hohem Datenverkehr

Erstens: Stellen Sie zunächst sicher, dass die Ser...

Methode zur Wiederherstellung von Betriebs- und Wartungsdaten der MySQL-Datenbank

In den vorherigen drei Artikeln wurden gängige Si...

Verwenden von JS zum Implementieren eines einfachen Rechners

Verwenden Sie JS, um einen einfachen Rechner für ...

So laden Sie die Kamera in HTML

Wirkungsdiagramm: Gesamtwirkung: Video wird gelad...