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

Mehrere Elemente in derselben Zeile unter Div in CSS rechtsbündig ausrichten

Methode 1: schweben: rechts Darüber hinaus wird d...

Schiebemenü mit CSS3 implementiert

Ergebnis:Implementierungscode: <!DOCTYPE html&...

So zeigen Sie die IP-Adresse des Docker-Containers an

Ich dachte immer, Docker hätte keine IP-Adresse. ...

Detaillierter Prozess der Installation von nginx1.9.1 auf centos8

1.17.9 Wirklich leckerer Nginx-Download-Adresse: ...

Verwenden Sie Docker, um den Kong-Clusterbetrieb aufzubauen

Es ist sehr einfach, einen Kong-Cluster unter dem...

So verwenden Sie Docker-Compose, um Django-Anwendungen offline bereitzustellen

Inhaltsverzeichnis Installieren Sie Docker-ce für...

Führen Sie die Schritte zur Installation von MySQL 5.5 auf CentOS aus

Inhaltsverzeichnis 1. Vorbereitung vor der Instal...

jQuery verwendet das Canvas-Tag, um den Bestätigungscode zu zeichnen

Das <canvas>-Element ist für clientseitige ...

vue verwendet Ele.me UI, um die Filterfunktion von Teambition zu imitieren

Inhaltsverzeichnis Problembeschreibung Die allgem...

Welcher Befehl eignet sich besser für die unscharfe Suche nach Dateien in Linux?

1. Einleitung In diesem Artikel wird hauptsächlic...

Einrichten von VMware vSphere in VMware Workstation (Grafisches Tutorial)

VMware vSphere ist die branchenführende und zuver...

Analyse mehrerer Gründe, warum Iframe weniger verwendet werden sollte

Die folgende Grafik zeigt, wie zeitaufwändig es is...