Heim >häufiges Problem >Was ist pessimistisches Sperren?

Was ist pessimistisches Sperren?

Guanhui
GuanhuiOriginal
2020-06-28 09:52:594537Durchsuche

Pessimistisches Sperren bezieht sich auf eine konservative Einstellung gegenüber der Änderung von Daten durch die Außenwelt. Dies bedeutet, dass die Daten während des Datenverarbeitungsprozesses gesperrt werden müssen, andernfalls muss diese Funktion auf den von der Datenbank bereitgestellten Sperrmechanismus angewiesen sein Selbst wenn es im System implementiert ist, kann der Sperrmechanismus nicht garantieren, dass externe Systeme die Daten nicht ändern.

Was ist pessimistisches Sperren?

Sperrmodus

LockMode.NONE

Kein Sperrmechanismus

LockMode.READ

Hibernate erhält die Sperre automatisch, wenn der Datensatz gelesen wird

Das heißt, gemeinsame Sperre: (gemeinsame Sperre, S-Sperre), gemeinsame Sperre wird auch Lesesperre genannt. Wenn Transaktion T die gemeinsame Sperre für Datenobjekt A erhält (d. h. eine gemeinsame Sperre zu A hinzufügt), können andere Transaktionen nur die gemeinsame Sperre (S-Sperre) für A erwerben, aber keine exklusive Sperre (X-Sperre) hinzufügen. Bis A alle gemeinsam genutzten Sperren freigibt. Transaktionen, denen gemeinsame Sperren gewährt werden, können nur Daten lesen und keine Daten ändern.

LockMode.WRITE

Hibernate erhält automatisch die Sperre, wenn der Aktualisierungsdatensatz eingefügt wird

Das heißt, exklusive Sperre: (Exklusive Sperre, X-Sperre), exklusive Sperre wird auch aufgerufen Schreibsperre. Wenn Transaktion T die exklusive Sperre für Daten A erhält, kann T A sowohl lesen als auch schreiben, aber bis T die X-Sperre für A aufhebt, können andere Transaktionen weder die gemeinsame Sperre für A noch die exklusive Sperre erwerben.

LockMode.UPGRADE

Wenn das Datenbanksystem pessimistisches Sperren unterstützt (z. B. Oracle und MySQL), führen Sie die Select...for-Update-Anweisung aus (Sperren auf Zeilenebene, andere Transaktionen können nicht aktualisiert werden oder Wenn die Datenbank kein pessimistisches Sperren unterstützt (z. B. Sybase), wird eine gewöhnliche SELECT-Anweisung ausgeführt.

LockMode.UPGRADE_NOWAIT

hat die gleiche Funktionalität wie LockMode.UPGRADE. Führen Sie außerdem die Anweisung „select...for update nowait“ für die Oracle-Datenbank aus. „nowait“ bedeutet, dass die Transaktion, die die Select-Anweisung ausführt, die pessimistische Sperre nicht sofort erhalten kann, nicht darauf wartet, dass andere Transaktionen die Sperre aufheben, sondern sofort eine Sperrausnahme auslöst.

Demonstration der Sperre

Hinweis: Die Sperre funktioniert nur für die in einer Transaktion betriebenen Datenobjekte und nicht für die gesamte Datenbank.

Öffnen Sie zwei SQL-Befehlszeilenschnittstellen, die zwei Transaktionen T1 und T2 darstellen können. Wir führen zunächst die Befehle in den beiden Schnittstellen aus: Transaktion starten;

In der Transaktion T1 die Studierendeninformationen mit der Studierendennummer „2015“ in der Datenbank abfragen und eine pessimistische Sperre zu den bearbeiteten Daten hinzufügen: select * from stu_info wobei stu_no="2015" für update;. Zu diesem Zeitpunkt können wir die entsprechenden Informationen abfragen.

„zur Aktualisierung“ bedeutet das Hinzufügen einer pessimistischen Sperre. Die Transaktion wird nach dieser Abfrage nicht übermittelt, was bedeutet, dass die Sperre noch nicht aufgehoben wurde

In Transaktion T2 die Studierendeninformationen mit der Studierendennummer „2016“ in der Datenbank abfragen und eine pessimistische Sperre hinzufügen Betriebsdaten: Wählen Sie * aus stu_info, wobei stu_no="2016" für die Aktualisierung ist. Zu diesem Zeitpunkt können wir auch die entsprechenden Informationen abfragen.

Die Transaktion wurde noch nicht übermittelt

Fragen Sie in Transaktion T2 die Studenteninformationen mit der Studentennummer „2015“ in der Datenbank ab. Führen Sie diesmal eine normale Auswahlabfrage ohne Sperre durch: Wählen Sie aus * aus stu_info wobei stu_no=“2015“;. Zu diesem Zeitpunkt können wir auch die entsprechenden Informationen abfragen.

Die Transaktion wurde noch nicht festgeschrieben

Versuchen Sie in Transaktion T2, die Schülerinformationen der Mittelschulnummer „2015“ in der Datenbank abzufragen und den verarbeiteten Daten eine pessimistische Sperre hinzuzufügen: Wählen Sie * aus stu_info, wobei stu_no=" 2015" für update; ist. Zu diesem Zeitpunkt können wir feststellen, dass die relevanten Informationen nicht angezeigt werden, sondern warten. Wenn wir Transaktion T1 einreichen (dh festschreiben), gibt das Datenobjekt „2015“ die pessimistische Sperre in T1 frei, sodass Transaktion T2 die relevanten Informationen abfragen und die pessimistische Sperre erhalten kann.

Wenn wir Schritt 5 ändern. Im fünften Schritt haben wir gerade die Studentennummer in Transaktion T1 auf „2016“ geändert, aber keine pessimistische Sperre hinzugefügt, da wir zuvor in Transaktion T2 eine pessimistische Sperre zum Datensatz hinzugefügt hatten und diese nicht freigegeben wurde, also haben wir Die Änderung kann nur erfolgreich sein, nachdem T2 übermittelt wurde.

Empfohlenes Tutorial: „MySQL-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist pessimistisches Sperren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn