capypad
0 Tage Serie
sql / expert
Snippet

Transaktionsisolationsstufen und Atomarität

Dieser Ausschnitt demonstriert die Verwendung einer hohen Isolationsstufe, um die Datenintegrität während einer Überweisung zu gewährleisten. Durch das Setzen auf SERIALIZABLE verhindert die Datenbank Phantom-Reads und Write-Skew, wodurch sichergestellt wird, dass die beiden UPDATE-Operationen als eine einzige atomare Arbeitseinheit behandelt werden.

snippet.sql
sql
1
2
3
4
5
6
7
8
9
10
11
12
13
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 
BEGIN;
 
UPDATE accounts
SET balance = balance - 500
WHERE account_id = 'A' AND balance >= 500;
 
UPDATE accounts
SET balance = balance + 500
WHERE account_id = 'B';
 
COMMIT;
Erklärung
1
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Setzt die höchste Isolationsstufe, um zu verhindern, dass gleichzeitige Transaktionen die Datenkonsistenz beeinträchtigen.
2
BEGIN;
Startet den expliziten Transaktionsblock.
3
UPDATE accounts ... WHERE balance >= 500;
Subtrahiert den Betrag nur, wenn der Saldo die fachliche Bedingung erfüllt.
4
COMMIT;
Speichert alle während der Transaktion vorgenommenen Änderungen dauerhaft in der Datenbank.