🛡️ 1. Die 4 Säulen des ACID-Prinzips
Eine Transaktion ist eine logische Arbeitseinheit aus mehreren SQL-Befehlen, die als unteilbares Ganzes ausgeführt werden muss:
⚛️ A – Atomicity (Atomarität)
Alles oder nichts: Schlägt ein Teilschritt fehl, wird die gesamte Transaktion rückgängig gemacht.
⚖️ C – Consistency (Konsistenz)
Die Datenbank wechselt nur von einem gültigen Zustand in den nächsten (z.B. CHECK-Constraints).
🔒 I – Isolation (Isolation)
Gleichzeitige Transaktionen stören sich nicht gegenseitig (keine unvollständigen Zwischenstände lesbar).
💾 D – Durability (Dauerhaftigkeit)
Nach einem erfolgreichen COMMIT sind Daten dauerhaft auf Festplatte / WAL persistiert.
🏦 2. Transaktionssteuerung & Savepoints
-- Eine sichere Banküberweisung:
BEGIN TRANSACTION;
-- 1. Geld von Konto A abziehen
UPDATE konten SET saldo = saldo - 100 WHERE id = 1;
-- 2. Geld auf Konto B gutschreiben
UPDATE konten SET saldo = saldo + 100 WHERE id = 2;
-- 3. Transaktions-Log schreiben
INSERT INTO transfer_logs (von_id, an_id, betrag) VALUES (1, 2, 100);
-- Alles erfolgreich? -> Dauerhaft festschreiben!
COMMIT;
📍 Teilschritte sichern mit SAVEPOINT
BEGIN TRANSACTION;
INSERT INTO bestellungen (id, status) VALUES (1, 'offen');
SAVEPOINT lager_reserviert;
-- Versuche optionale Zusatz-Aktion:
UPDATE lager SET bestand = bestand - 5 WHERE artikel_id = 99;
-- Bei Problem mit Zusatz-Aktion nur zum Savepoint zurückspringen:
ROLLBACK TO SAVEPOINT lager_reserviert;
-- Haupt-Bestellung trotzdem abschließen:
COMMIT;
🏭 3. Didaktische Analogie: Der Geldautomat
Stell dir vor, der Geldautomat bucht 200 € von deinem Girokonto ab, aber genau im Moment der Geldschein-Ausgabe fällt der Strom aus!
Ohne ACID: Dein Kontostand ist um 200 € ärmer, aber du hast kein Bargeld.
Mit ACID (Rollback): Die Datenbank erkennt den Ausfall, bricht die unvollständige Transaktion ab und setzt den Kontostand automatisch auf den Ursprungswert zurück.
📑 4. Cheat-Sheet: Transaktions-Kommandos
| Befehl | Wirkung | Beispiel |
|---|---|---|
BEGIN TRANSACTION; |
Startet eine atomare Transaktion (Autocommit aus) | BEGIN TRANSACTION; |
COMMIT; |
Schreibt alle Änderungen dauerhaft fest | COMMIT; |
ROLLBACK; |
Verwirft alle unvollständigen Änderungen der Transaktion | ROLLBACK; |
SAVEPOINT <name>; |
Erstellt einen Zwischenspeicherpunkt innerhalb der Transaktion | SAVEPOINT vor_bonus; |
ROLLBACK TO <name>; |
Setzt Änderungen gezielt nur bis zum Savepoint zurück | ROLLBACK TO vor_bonus; |
🎯 5. Aufgaben & Checkliste in aufgabe.sql
Öffne die Datei aufgabe.sql und implementiere die 4 Aufgaben: