Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Isolation: Wiederholbare Lese- und Serialisierbare Ebenen | Acid
SQL-Optimierung und Abfragefunktionen

Isolation: Wiederholbare Lese- und Serialisierbare Ebenen

Swipe um das Menü anzuzeigen

Repeatable Read

Die Repeatable Read-Isolationsstufe in Datenbanken stellt sicher, dass beim Starten einer Transaktion ein Schnappschuss der Datenbank angezeigt wird, der während der gesamten Aufgabe unverändert bleibt.
Das bedeutet, dass selbst wenn während der Arbeit andere Änderungen an der Datenbank vorgenommen werden, nur die Daten sichtbar sind, wie sie zu Beginn waren.
Transaktionen unter Repeatable Read-Isolation halten Lesesperren auf allen referenzierten Zeilen und Schreibsperren auf Zeilen, die sie einfügen, aktualisieren oder löschen. Dies verhindert verlorene Updates, Dirty Reads und Non-Repeatable Reads.
Ein Problem tritt jedoch weiterhin bei dieser Isolationsart auf – das Phantom Read.

Phantom Read

Note
Mehr erfahren

Phantom Reads treten auf, wenn eine Transaktion eine Abfrage erneut ausführt und unterschiedliche Mengen von Zeilen findet, die die ursprüngliche Filterbedingung der Abfrage erfüllen.

Beispielsweise fragt eine Transaktion alle Bestellungen mit einem Gesamtbetrag von mehr als $1000 ab. Wenn eine andere Transaktion zwischen der ersten und zweiten Ausführung der Abfrage eine neue Bestellung mit entsprechendem Gesamtbetrag einfügt, sieht die erste Transaktion diese zusätzliche Zeile bei der zweiten Ausführung, was zu einem Phantom Read führt.

Ein Phantom Read kann auftreten, wenn eine Transaktion Daten liest und eine andere Transaktion neue Datensätze zur Datenbank hinzufügt. Dadurch können bei zwei aufeinanderfolgenden Lesevorgängen unterschiedliche Ergebnismengen entstehen.

phantom_read

Nicht wiederholbares Lesen vs. Phantomlesen

Nicht wiederholbares Lesen tritt auf, wenn dieselbe Abfrage, die von Benutzer A ausgeführt wird, unterschiedliche Werte für dieselbe Zeile zwischen aufeinanderfolgenden Lesevorgängen zurückgibt, typischerweise aufgrund von Änderungen durch Benutzer B.

Phantomlesen hingegen tritt auf, wenn dieselbe Abfrage, die von Benutzer A ausgeführt wird, unterschiedliche Mengen von Zeilen zwischen aufeinanderfolgenden Lesevorgängen zurückgibt, auch wenn die einzelnen Zeilen selbst nicht aktualisiert wurden.

Wir können diese Isolationsstufe in unserer SQL-Abfrage mit folgendem Befehl festlegen:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Serializable

Die Serializable-Isolationsstufe ist die höchste Isolationsstufe in Datenbanken und gewährleistet die strengste Form der Parallelitätskontrolle.
Auf dieser Stufe werden Transaktionen so ausgeführt, als ob sie seriell verarbeitet würden, eine nach der anderen, auch wenn sie tatsächlich gleichzeitig ausgeführt werden. Dies stellt sicher, dass das Ergebnis der Transaktionen dem entspricht, als wären sie in einer bestimmten seriellen Reihenfolge ausgeführt worden, wodurch Konsistenz gewährleistet und alle bekannten Parallelitätsanomalien verhindert werden.

Hinweis

Die Verwendung dieser Isolationsstufe kann aufgrund erhöhter Sperrungen zu einer geringeren Performance führen.

Wir können die folgende Anweisung verwenden, um dieses Isolationslevel in unserer SQL-Abfrage festzulegen:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

question-icon

Ordnen Sie die Isolationsstufen ihren Beschreibungen zu.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

Klicken oder ziehen Sie Elemente und füllen Sie die Lücken aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 7

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Isolation: Wiederholbare Lese- und Serialisierbare Ebenen

Repeatable Read

Die Repeatable Read-Isolationsstufe in Datenbanken stellt sicher, dass beim Starten einer Transaktion ein Schnappschuss der Datenbank angezeigt wird, der während der gesamten Aufgabe unverändert bleibt.
Das bedeutet, dass selbst wenn während der Arbeit andere Änderungen an der Datenbank vorgenommen werden, nur die Daten sichtbar sind, wie sie zu Beginn waren.
Transaktionen unter Repeatable Read-Isolation halten Lesesperren auf allen referenzierten Zeilen und Schreibsperren auf Zeilen, die sie einfügen, aktualisieren oder löschen. Dies verhindert verlorene Updates, Dirty Reads und Non-Repeatable Reads.
Ein Problem tritt jedoch weiterhin bei dieser Isolationsart auf – das Phantom Read.

Phantom Read

Note
Mehr erfahren

Phantom Reads treten auf, wenn eine Transaktion eine Abfrage erneut ausführt und unterschiedliche Mengen von Zeilen findet, die die ursprüngliche Filterbedingung der Abfrage erfüllen.

Beispielsweise fragt eine Transaktion alle Bestellungen mit einem Gesamtbetrag von mehr als $1000 ab. Wenn eine andere Transaktion zwischen der ersten und zweiten Ausführung der Abfrage eine neue Bestellung mit entsprechendem Gesamtbetrag einfügt, sieht die erste Transaktion diese zusätzliche Zeile bei der zweiten Ausführung, was zu einem Phantom Read führt.

Ein Phantom Read kann auftreten, wenn eine Transaktion Daten liest und eine andere Transaktion neue Datensätze zur Datenbank hinzufügt. Dadurch können bei zwei aufeinanderfolgenden Lesevorgängen unterschiedliche Ergebnismengen entstehen.

phantom_read

Nicht wiederholbares Lesen vs. Phantomlesen

Nicht wiederholbares Lesen tritt auf, wenn dieselbe Abfrage, die von Benutzer A ausgeführt wird, unterschiedliche Werte für dieselbe Zeile zwischen aufeinanderfolgenden Lesevorgängen zurückgibt, typischerweise aufgrund von Änderungen durch Benutzer B.

Phantomlesen hingegen tritt auf, wenn dieselbe Abfrage, die von Benutzer A ausgeführt wird, unterschiedliche Mengen von Zeilen zwischen aufeinanderfolgenden Lesevorgängen zurückgibt, auch wenn die einzelnen Zeilen selbst nicht aktualisiert wurden.

Wir können diese Isolationsstufe in unserer SQL-Abfrage mit folgendem Befehl festlegen:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Serializable

Die Serializable-Isolationsstufe ist die höchste Isolationsstufe in Datenbanken und gewährleistet die strengste Form der Parallelitätskontrolle.
Auf dieser Stufe werden Transaktionen so ausgeführt, als ob sie seriell verarbeitet würden, eine nach der anderen, auch wenn sie tatsächlich gleichzeitig ausgeführt werden. Dies stellt sicher, dass das Ergebnis der Transaktionen dem entspricht, als wären sie in einer bestimmten seriellen Reihenfolge ausgeführt worden, wodurch Konsistenz gewährleistet und alle bekannten Parallelitätsanomalien verhindert werden.

Hinweis

Die Verwendung dieser Isolationsstufe kann aufgrund erhöhter Sperrungen zu einer geringeren Performance führen.

Wir können die folgende Anweisung verwenden, um dieses Isolationslevel in unserer SQL-Abfrage festzulegen:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 7
some-alt