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.
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!