CodeGym /Kurse /SQL SELF /Tiefer eintauchen in Transaktionen

Tiefer eintauchen in Transaktionen

SQL SELF
Level 39 , Lektion 0
Verfügbar

Wir haben im Kurs schon mal erwähnt, was eine Transaktion ist. Zur Erinnerung: Das ist eine Abfolge von Operationen, die als eine Einheit ausgeführt werden muss. Stell dir vor, du willst eine Banküberweisung machen. Dann wird Geld von einem Konto abgebucht und auf ein anderes eingezahlt. Wenn eine dieser Aktionen fehlschlägt (zum Beispiel Geld wurde abgebucht, aber nicht eingezahlt), gibt das richtig Ärger. Genau hier kommen Transaktionen ins Spiel.

Eine Transaktion wird entweder komplett ausgeführt oder gar nicht. Das nennt man das "Alles-oder-nichts"-Prinzip.

BEGIN;
-- Wir verringern das Guthaben auf einem Konto
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
-- Wir erhöhen das Guthaben auf dem anderen Konto
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT; -- Änderungen übernehmen

Wenn irgendwas schiefgeht, kannst du die Änderungen mit ROLLBACK zurücknehmen.

Was sind ACID-Eigenschaften von Transaktionen

Wenn wir über Transaktionen in PostgreSQL (und generell in relationalen Datenbanken) sprechen, fällt oft das Kürzel ACID – und nein, das hat nix mit Chemie zu tun. ACID steht für Atomicity (Atomarität), Consistency (Konsistenz), Isolation (Isolation), Durability (Dauerhaftigkeit). Diese vier Eigenschaften sorgen dafür, dass Daten sicher, nachvollziehbar und ohne böse Überraschungen verarbeitet werden.

Atomarität (Atomicity)
Eine Transaktion wird ganz oder gar nicht ausgeführt. Wenn darin irgendwas schiefgeht – wird alles zurückgesetzt. Stell dir vor: Du überweist Geld und plötzlich gibt’s einen Fehler – entweder wird alles abgebrochen oder die Überweisung läuft komplett durch. Keine "halben Sachen".

Konsistenz (Consistency)
Nach Abschluss der Transaktion bleibt die Datenbank in einem korrekten, logischen Zustand. Alle Regeln, Constraints und Beziehungen zwischen Tabellen müssen eingehalten werden. Zum Beispiel: Wenn ein negativer Kontostand verboten ist, wird eine Transaktion, die das verletzt, einfach nicht gespeichert.

Isolation (Isolation)
Solange eine Transaktion nicht abgeschlossen ist, darf eine andere deren Zwischenergebnisse nicht sehen. Das schützt vor komischen Effekten, bei denen du einen „undefinierten“ Zustand der Daten siehst. Stell dir vor, im Online-Shop wurde das Geld schon abgebucht, aber die Ware noch nicht zur Bestellung hinzugefügt – nicht so cool, oder?

Dauerhaftigkeit (Durability)
Wenn eine Transaktion erfolgreich abgeschlossen wurde, sind alle ihre Änderungen garantiert gespeichert. Selbst wenn direkt danach der Strom ausfällt – die Daten bleiben in der Datenbank. Das ist wie auf "Speichern" klicken und sicher sein, dass alles da ist.

Diese vier Eigenschaften sind die Grundlage dafür, warum Transaktionen als zuverlässiger Mechanismus beim Arbeiten mit Datenbanken gelten.

Beispiele für typische Transaktions-Szenarien

Theorie ist schön und gut, aber die wahre Power von Transaktionen zeigt sich in echten Aufgaben. Gerade bei Geld, verknüpften Tabellen oder Massenänderungen sind Transaktionen unverzichtbar. Sie helfen nicht nur, Operationen auszuführen, sondern das auch sicher – ohne Risiko, Daten zu verlieren oder die Datenbank im „Halbzustand“ zu lassen.

Hier ein paar typische Beispiele, wo Transaktionen echt den Tag retten:

1. Zahlungsabwicklung

Wenn ein Kunde Geld von einem Konto auf ein anderes überweist, sorgt die Transaktion dafür, dass das Geld nicht einfach verschwindet:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;

Wenn auf dem ersten Konto nicht genug Geld ist, kannst du die Änderungen zurücknehmen:

BEGIN;
UPDATE accounts SET balance = balance - 500 WHERE account_id = 1;
-- Ups, Guthaben ist negativ!
ROLLBACK;

2. Update von verknüpften Tabellen

Stell dir vor, du setzt den Status eines Studenten auf "absolviert" und fügst gleichzeitig einen Eintrag in die Tabelle "Absolventen" hinzu:

BEGIN;
UPDATE students SET status = 'absolviert' WHERE student_id = 42;
INSERT INTO graduates (student_id, graduation_date) VALUES (42, '2023-06-10');
COMMIT;

Wenn eine der Aktionen fehlschlägt (zum Beispiel ein Fehler bei INSERT), setzt die Datenbank alles auf Anfang zurück.

3. Massen-Update von Daten

Transaktionen sind praktisch für große Updates, zum Beispiel:

BEGIN;
UPDATE orders SET status = 'abgeschlossen' WHERE delivery_date < CURRENT_DATE;
COMMIT;

Wenn der Server abstürzt oder du merkst, dass das Update falsch lief, kannst du die Änderungen jederzeit zurücknehmen!

Befehle für die Arbeit mit Transaktionen

PostgreSQL stellt ein paar wichtige Befehle bereit:

  • BEGIN: startet eine neue Transaktion:

    BEGIN;
    
  • COMMIT: speichert alle Änderungen, die in der Transaktion gemacht wurden:

    COMMIT;
    

ROLLBACK: macht alle Änderungen der aktuellen Transaktion rückgängig:

ROLLBACK;

Beispiel für einen kompletten Ablauf

BEGIN;
-- Einige Operationen
UPDATE accounts SET balance = balance - 200 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 200 WHERE account_id = 2;

-- Wir entscheiden uns, die Änderungen zurückzunehmen
ROLLBACK;

-- Wir starten nochmal
BEGIN;
-- Die gleichen Operationen, aber anderer Betrag
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

-- Transaktion abschließen
COMMIT;

Transaktionen im echten Leben

Online-Shops. Viele Plattformen nutzen Transaktionen, um Bestellungen und Zahlungen zu verwalten. Zum Beispiel wird eine Bestellung nur dann ausgeführt, wenn die Zahlung erfolgreich war. Wenn etwas schiefgeht, wird die Bestellung automatisch storniert.

Banksysteme. Transaktionen schützen dein Geld vor Problemen wie plötzlichem Stromausfall.

Transaktionshistorie. PostgreSQL speichert WAL-Logs (Write-Ahead Logging), um Daten im Fehlerfall wiederherzustellen. Das ist die Magie, die Transaktionen so zuverlässig macht.

In der nächsten Vorlesung schauen wir uns die Befehle BEGIN, COMMIT und ROLLBACK noch genauer an und sehen uns Beispiele für Massenoperationen und Teil-Rollbacks mit SAVEPOINT an. Bis dann!

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION