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

bookIsolation

Im Kontext von Datenbanken bezeichnet Isolation die Fähigkeit eines Datenbanksystems, die Sichtbarkeit von Änderungen durch gleichzeitig ablaufende Transaktionen zu steuern. Sie stellt sicher, dass Transaktionen unabhängig voneinander ausgeführt werden, wodurch Beeinträchtigungen vermieden und die Datenintegrität gewahrt bleibt.

Es gibt 4 Isolationsstufen in SQL:

  • Read Uncommitted;
  • Read Committed;
  • Repeatable Read;
  • Serializable.

Read Uncommitted

Dies ist die niedrigste Isolationsstufe, bei der Transaktionen Änderungen anderer Transaktionen sehen können, selbst bevor diese bestätigt wurden. Diese Stufe erlaubt Dirty Reads, was bedeutet, dass eine Transaktion Daten lesen kann, die von einer anderen Transaktion geändert, aber noch nicht bestätigt wurden.

Dirty Reads

Implementierung

Um die Isolationsstufe für eine Transaktion festzulegen, kann folgender Befehl in der Abfrage verwendet werden:

-- Start transaction
BEGIN;
-- Set the isolation level for the transaction
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

/* Transaction query */
COMMIT;
  • SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;: Diese Anweisung ändert die Isolationsstufe für die aktuelle Transaktion auf "Read Uncommitted" und ermöglicht es der Transaktion, möglicherweise Daten zu lesen, die von anderen, noch nicht bestätigten Transaktionen geändert wurden;

  • Dieser Befehl muss ausschließlich innerhalb eines Transaktionsblocks verwendet werden! Andernfalls hat er keine Wirkung und es wird die Standard-Isolationsstufe verwendet.

Die aktuelle Isolationsstufe kann mit folgendem Befehl überprüft werden:
SHOW TRANSACTION ISOLATION LEVEL;

Read Committed

Die Isolationsstufe Read Committed stellt sicher, dass eine Transaktion nur Daten sieht, die von anderen Transaktionen bestätigt wurden.
Das bedeutet, dass nicht bestätigte Änderungen anderer Transaktionen für Transaktionen mit Read Committed-Isolation nicht sichtbar sind.
Dadurch werden Dirty Reads verhindert, da eine Transaktion nur bestätigte Daten lesen kann. Allerdings treten bei dieser Transaktionsstufe Probleme mit Non-Repeatable Reads auf.

Non-Repeatable Reads

Die Isolationsstufe "Read committed" erlaubt nicht wiederholbare Lesevorgänge, da sie den Lesevorgang für Werte sperrt, die sich in nicht abgeschlossenen Transaktionen befinden, jedoch den Schreibvorgang nicht sperrt.
Daher ist es möglich, neue Daten in die Zeile zu schreiben, die gerade von einer anderen Transaktion gelesen wird.

Verlorenes Update

Aufgrund des Fehlens einer Schreibsperre gibt es ein weiteres Problem mit der Isolationsstufe Read Committed – verlorene Updates.

Verlorene Updates treten auf, wenn zwei parallele Transaktionen versuchen, dieselbe Zeile zu ändern. Infolgedessen überschreibt die Transaktion, die später bestätigt wird, die von anderen Transaktionen bestätigten Werte.

Implementierung

Dieses Isolationslevel kann auch mit den folgenden Befehlen festgelegt werden:

-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

/* Transaction query */
COMMIT;

Es ist wichtig zu beachten, dass Read Committed das Standard-Isolationslevel für die meisten Datenbankmanagementsysteme ist, weshalb die explizite Angabe oft entfallen kann.

question mark

Wenn eine Transaktion Daten liest, die von einer anderen, noch nicht abgeschlossenen Transaktion geändert wurden, um welche Art von Lesevorgang handelt es sich?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 6

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

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

Suggested prompts:

Can you explain the other isolation levels like Repeatable Read and Serializable?

What are the main differences between dirty reads, non-repeatable reads, and lost updates?

Can you provide examples of when to use each isolation level?

bookIsolation

Swipe um das Menü anzuzeigen

Im Kontext von Datenbanken bezeichnet Isolation die Fähigkeit eines Datenbanksystems, die Sichtbarkeit von Änderungen durch gleichzeitig ablaufende Transaktionen zu steuern. Sie stellt sicher, dass Transaktionen unabhängig voneinander ausgeführt werden, wodurch Beeinträchtigungen vermieden und die Datenintegrität gewahrt bleibt.

Es gibt 4 Isolationsstufen in SQL:

  • Read Uncommitted;
  • Read Committed;
  • Repeatable Read;
  • Serializable.

Read Uncommitted

Dies ist die niedrigste Isolationsstufe, bei der Transaktionen Änderungen anderer Transaktionen sehen können, selbst bevor diese bestätigt wurden. Diese Stufe erlaubt Dirty Reads, was bedeutet, dass eine Transaktion Daten lesen kann, die von einer anderen Transaktion geändert, aber noch nicht bestätigt wurden.

Dirty Reads

Implementierung

Um die Isolationsstufe für eine Transaktion festzulegen, kann folgender Befehl in der Abfrage verwendet werden:

-- Start transaction
BEGIN;
-- Set the isolation level for the transaction
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

/* Transaction query */
COMMIT;
  • SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;: Diese Anweisung ändert die Isolationsstufe für die aktuelle Transaktion auf "Read Uncommitted" und ermöglicht es der Transaktion, möglicherweise Daten zu lesen, die von anderen, noch nicht bestätigten Transaktionen geändert wurden;

  • Dieser Befehl muss ausschließlich innerhalb eines Transaktionsblocks verwendet werden! Andernfalls hat er keine Wirkung und es wird die Standard-Isolationsstufe verwendet.

Die aktuelle Isolationsstufe kann mit folgendem Befehl überprüft werden:
SHOW TRANSACTION ISOLATION LEVEL;

Read Committed

Die Isolationsstufe Read Committed stellt sicher, dass eine Transaktion nur Daten sieht, die von anderen Transaktionen bestätigt wurden.
Das bedeutet, dass nicht bestätigte Änderungen anderer Transaktionen für Transaktionen mit Read Committed-Isolation nicht sichtbar sind.
Dadurch werden Dirty Reads verhindert, da eine Transaktion nur bestätigte Daten lesen kann. Allerdings treten bei dieser Transaktionsstufe Probleme mit Non-Repeatable Reads auf.

Non-Repeatable Reads

Die Isolationsstufe "Read committed" erlaubt nicht wiederholbare Lesevorgänge, da sie den Lesevorgang für Werte sperrt, die sich in nicht abgeschlossenen Transaktionen befinden, jedoch den Schreibvorgang nicht sperrt.
Daher ist es möglich, neue Daten in die Zeile zu schreiben, die gerade von einer anderen Transaktion gelesen wird.

Verlorenes Update

Aufgrund des Fehlens einer Schreibsperre gibt es ein weiteres Problem mit der Isolationsstufe Read Committed – verlorene Updates.

Verlorene Updates treten auf, wenn zwei parallele Transaktionen versuchen, dieselbe Zeile zu ändern. Infolgedessen überschreibt die Transaktion, die später bestätigt wird, die von anderen Transaktionen bestätigten Werte.

Implementierung

Dieses Isolationslevel kann auch mit den folgenden Befehlen festgelegt werden:

-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

/* Transaction query */
COMMIT;

Es ist wichtig zu beachten, dass Read Committed das Standard-Isolationslevel für die meisten Datenbankmanagementsysteme ist, weshalb die explizite Angabe oft entfallen kann.

question mark

Wenn eine Transaktion Daten liest, die von einer anderen, noch nicht abgeschlossenen Transaktion geändert wurden, um welche Art von Lesevorgang handelt es sich?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 6
some-alt