Kursinhalt
Fortgeschrittene Techniken in SQL
Fortgeschrittene Techniken in SQL
Isolation. Gelesene und Nicht Gelesene Ebenen
Im Kontext von Datenbanken bezieht sich Isolation auf die Fähigkeit eines Datenbanksystems, die Sichtbarkeit von Änderungen zu steuern, die durch gleichzeitige Transaktionen vorgenommen werden. Es stellt sicher, dass Transaktionen unabhängig voneinander arbeiten, um Störungen zu vermeiden und die Datenintegrität zu wahren.
Es gibt 4 Isolationsstufen in SQL:
- read uncommitted;
- read committed;
- repeatable read;
- serializable.
Read uncommitted
Dies ist die niedrigste Isolationsstufe, bei der Transaktionen Änderungen sehen können, die von anderen Transaktionen vorgenommen wurden, selbst bevor sie festgeschrieben sind. Diese Stufe erlaubt dirty reads, was bedeutet, dass eine Transaktion Daten lesen kann, die von einer anderen Transaktion geändert, aber noch nicht festgeschrieben wurden.
Dirty reads
Implementierung
Um das Isolationslevel für die Transaktion festzulegen, können wir den folgenden Befehl in unserer Abfrage verwenden:
-
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
: Diese Anweisung ändert das Isolationslevel für die aktuelle Transaktion auf "Read Uncommitted", wodurch die Transaktion möglicherweise Daten lesen kann, die von anderen nicht abgeschlossenen Transaktionen geändert wurden; -
dieser Befehl muss nur innerhalb des Transaktionsblocks verwendet werden! Andernfalls hat er keine Wirkung und es wird ein Standard-Isolationslevel verwendet.
Wir können das aktuelle Isolationslevel auch mit dem folgenden Befehl überprüfen:
SHOW TRANSACTION ISOLATION LEVEL;
Read Committed
Das Read Committed Isolationslevel stellt sicher, dass eine Transaktion nur Daten sieht, die von anderen Transaktionen abgeschlossen wurden.
Das bedeutet, dass nicht abgeschlossene Änderungen, die von anderen Transaktionen vorgenommen wurden, für Transaktionen, die unter Read Committed Isolation arbeiten, nicht sichtbar sind.
Infolgedessen verhindert es Dirty Reads, indem es einer Transaktion erlaubt, nur abgeschlossene Daten zu lesen. Dieses Transaktionslevel hat jedoch Probleme mit nicht wiederholbaren Lesevorgängen.
Nicht wiederholbare Lesevorgänge
Das Isolationslevel "Read committed" erlaubt nicht wiederholbare Lesevorgänge, da es den Lesevorgang auf Werte sperrt, die sich in nicht abgeschlossenen Transaktionen befinden, aber den Schreibvorgang nicht sperrt.
Infolgedessen können wir neue Daten in die Zeile schreiben, die derzeit von einer anderen Transaktion gelesen wird.
Verlorenes Update
Aufgrund des Fehlens der Schreibsperre gibt es ein weiteres Problem mit dem Isolationslevel "Read committed" - verlorene Updates.
Die verlorenen Updates treten auf, wenn zwei parallele Transaktionen versuchen, dieselbe Zeile zu ändern. Infolgedessen überschreibt die Transaktion, die später festgeschrieben wird, die von anderen Transaktionen festgeschriebenen Werte.
Implementierung
Wir können dieses Isolationslevel auch mit den folgenden Befehlen festlegen:
Es ist wichtig zu beachten, dass Read Committed das Standard-Isolationslevel für die meisten Datenbankverwaltungssysteme ist, weshalb wir es nicht angeben müssen.
Danke für Ihr Feedback!