Heim  >  Artikel  >  Datenbank  >  Datenbank – Eine kurze Diskussion der vier Transaktionsisolationsstufen

Datenbank – Eine kurze Diskussion der vier Transaktionsisolationsstufen

黄舟
黄舟Original
2017-03-13 16:46:521265Durchsuche

Die Datenbank bietet vier Isolationsstufen mit unterschiedlichen Sperrklassen.

Unter den vier Isolationsstufen ist „Read Uncommitted“ die niedrigste 🎜>Die Standardisolationsstufe der meisten Datenbanken ist: Read Committed, wie z. B. SQL Server, Oracle
Die Standardisolationsstufe einiger Datenbanken ist Repeatable Read, wie z. B.
MySQL InnoDB-Speicher-Engine Sogar Es handelt sich um die niedrigste Ebene, und die erste Art von verlorenen Aktualisierungsproblemen tritt nicht auf
1. Dirty Read (die Transaktion wird nicht festgeschrieben, im Voraus gelesen): Dirty Read bedeutet, dass eine Transaktion auf Daten zugreift Die Daten wurden geändert und diese Änderung wurde noch nicht an die Datenbank übermittelt. Zu diesem Zeitpunkt greift auch eine andere Transaktion auf diese Daten zu und verwendet diese Daten.
2. Nicht wiederholbares Lesen (Inkonsistenz zwischen zwei Lesevorgängen): bezieht sich auf das mehrmalige Lesen derselben Daten innerhalb einer Transaktion. Bevor diese Transaktion endet, greift auch eine andere Transaktion auf dieselben Daten zu. Dann können zwischen den beiden Lesevorgängen der Daten in der ersten Transaktion aufgrund der Änderung der zweiten Transaktion die von der ersten Transaktion zweimal gelesenen Daten unterschiedlich sein. Auf diese Weise sind die innerhalb einer Transaktion zweimal gelesenen Daten unterschiedlich und werden daher als nicht wiederholbares Lesen bezeichnet. Beispielsweise liest ein Redakteur dasselbe Dokument zweimal, aber zwischen den Lesevorgängen schreibt der Autor das Dokument neu. Wenn der Redakteur das Dokument ein zweites Mal liest, hat sich das Dokument geändert. Rohlesevorgänge sind nicht wiederholbar. Dieses Problem kann vermieden werden, wenn Redakteure das Dokument erst dann lesen können, wenn der Autor mit dem Schreiben fertig ist.
3. Phantom-Lesen: bezieht sich auf ein Phänomen, das auftritt, wenn Transaktionen nicht unabhängig voneinander ausgeführt werden. Beispielsweise ändert die erste Transaktion die Daten in einer Tabelle und diese Änderung betrifft alle Datenzeilen in der Tabelle. Gleichzeitig werden durch die zweite Transaktion auch die Daten in dieser Tabelle geändert. Durch diese Änderung wird eine Zeile mit neuen Daten in die Tabelle eingefügt. Dann wird der Benutzer, der die erste Transaktion ausführt, in Zukunft feststellen, dass die Tabelle immer noch unveränderte Datenzeilen enthält, als ob eine Halluzination aufgetreten wäre. Beispielsweise ändert ein Redakteur ein von einem Autor eingereichtes Dokument, aber wenn die Produktion seine Änderungen in die Masterkopie des Dokuments einfügt, stellt sich heraus, dass der Autor dem Dokument neues, unbearbeitetes Material hinzugefügt hat. Dieses Problem kann vermieden werden, wenn niemand neues Material zum Dokument hinzufügen kann, bis die Redaktion und die Produktionsabteilung die Arbeit am Originaldokument abgeschlossen haben.
4. Die erste Art von Aktualisierungsverlust (Rollback-Verlust):
Wenn zwei Transaktionen dieselbe Datenquelle aktualisieren und die erste Transaktion festgeschrieben und die andere Transaktion widerrufen wird, wird die erste Transaktion durchgeführt der Firma wurden ebenfalls storniert. Mit anderen Worten: Die Ergebnisse der ersten Transaktion gehen verloren.
5. Die zweite Art von Aktualisierungsverlust (Überschreibverlust):
Die zweite Art von Aktualisierungsverlust ist ein Parallelitätsproblem, das häufig in praktischen Anwendungen auftritt. Es handelt sich im Wesentlichen um die gleiche Art von Parallelitätsproblem wie beim nicht wiederholbaren Lesen. Normalerweise wird es als Sonderfall nicht wiederholbarer Lesevorgänge betrachtet: Wenn zwei oder mehr Transaktionen denselben Datensatz
abfragen und dann jeweils die Zeile basierend auf den ursprünglichen Abfrageergebnissen aktualisieren, tritt die zweite Art von verlorener Aktualisierung auf . Da jede Transaktion die Existenz anderer Transaktionen nicht kennt, überschreiben die von der letzten Transaktion am Datensatz vorgenommenen Änderungen die festgeschriebenen Aktualisierungen, die von anderen Transaktionen am Datensatz vorgenommen wurden ...Ergänzung: Frühlingserklärung basierend auf Metadaten Sexuelle Angelegenheiten: Das

Isolation
-Attribut unterstützt insgesamt fünf Transaktionseinstellungen. Die Details lauten wie folgt:

l          DEFAULT 使用数据库设置的隔离级别 ( 默认 ) ,由 DBA 默认的设置来决定隔离级别 . 
l          READ_UNCOMMITTED 会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 ) 
l          READ_COMMITTED  会出现不可重复读、幻读问题(锁定正在读取的行) 
l          REPEATABLE_READ 会出幻读(锁定所读取的所有行) 
l          SERIALIZABLE 保证所有的情况不会发生(锁表)

Der Schwerpunkt des nicht wiederholbaren Lesens liegt auf der Änderung:
Unter den gleichen Bedingungen lesen Sie die Daten, die Sie gelesen haben, erneut und stellen fest, dass der Wert unterschiedlich ist.
Der Schwerpunkt des Phantomlesens liegt auf hinzufügen oder löschen
Unter den gleichen Bedingungen ist die Anzahl der beim ersten und zweiten Mal ausgelesenen Datensätze unterschiedlich

--------------------------------- ----- -----------------------------------
Verhaltenstypen für die Transaktionsweitergabe

Spring in TransactionDefinition Interface spezifiziert 7 Arten von Transaktionsweitergabeverhalten

Sie geben Transaktionsmethoden an und wie Transaktionen weitergegeben werden, wenn verschachtelte Aufrufe von Transaktionsmethoden auftreten:

Tabelle 1 Verhaltenstyp der Transaktionsweitergabe

Verhaltenstyp der Transaktionsweitergabe
Beschreibung

PROPAGATION_REQUIRED
Wenn keine aktuelle Transaktion vorhanden ist, erstellen Sie eine neue Transaktion. Wenn bereits eine Transaktion vorhanden ist, fügen Sie diese hinzu zu dieser Transaktion. Dies ist die häufigste Wahl.

PROPAGATION_SUPPORTS
Unterstützt die aktuelle Transaktion. Wenn derzeit keine Transaktion vorhanden ist, wird sie auf nicht-transaktionale Weise ausgeführt.

PROPAGATION_MANDATORY
Verwenden Sie die aktuelle Transaktion. Wenn keine aktuelle Transaktion vorhanden ist, lösen Sie eine Ausnahme aus.

PROPAGATION_REQUIRES_NEW
Erstellen Sie eine neue Transaktion. Wenn derzeit eine Transaktion vorhanden ist, unterbrechen Sie die aktuelle Transaktion.

PROPAGATION_NOT_SUPPORTED
Führen Sie Vorgänge auf nicht-transaktionale Weise aus. Wenn derzeit eine Transaktion vorhanden ist, unterbrechen Sie die aktuelle Transaktion.

PROPAGATION_NEVER
Wird nicht transaktional ausgeführt. Wenn derzeit eine Transaktion vorhanden ist, wird eine Ausnahme ausgelöst.

PROPAGATION_NESTED
Wenn aktuell eine Transaktion existiert, wird sie innerhalb der verschachtelten Transaktion ausgeführt. Wenn keine aktuelle Transaktion vorhanden ist, führen Sie ähnliche Vorgänge wie PROPAGATION_REQUIRED aus.

-------------------------------------------- ------ -------------
Einfach bedeutet, dass keine Vorlagen erforderlich sind. xhtml ist die Standardeinstellung, bei einigen von struts2 bereitgestellten Modulen ist dies beispielsweise möglich um < Schauen Sie sich struts.properties oder


an. Letzteres wird, wie der Name schon sagt, mit CSS kombiniert, um diese Inhalte zu verarbeiten. Wenn Sie ein Anfänger sind, müssen Sie diese nicht berücksichtigen. Wenn Sie nicht möchten, dass diese Vorlageninhalte Auswirkungen auf Ihre Entwicklung haben, können Sie sie in „einfach“ ändern.
Wenn Ihre Seite CSS-Layout verwendet und Sie die erweiterten Funktionen von struts2 nutzen möchten, verwenden Sie css_xhtml, um eine bessere Benutzererfahrung zu erzielen.

org/apache/struts2/default.properties
struts.ui.theme=xhtml  
struts.ui.templateDir=template  
struts.ui.templateSuffix=ftl  
你可以在struts.xml中添加
<constant name="struts.ui.theme" value="simple" />来修改这个参数

Das obige ist der detaillierte Inhalt vonDatenbank – Eine kurze Diskussion der vier Transaktionsisolationsstufen. 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