ACID: alles oder nichts
Kurz gesagt: Eine Transaktion macht mehrere Abfragen zu einer Einheit, die entweder ganz oder gar nicht passiert, und ACID nennt ihre vier Versprechen: Atomarität, Konsistenz, Isolation und Dauerhaftigkeit.
Problem
Die Bestellung, die in der Mitte abbrach
Teodora bestellt zwei Brote und etwas, das das Programm aus einem alten Korb geholt hat: Produkt 99, das es nicht mehr gibt. Das Programm macht die Bestellung in zwei Abfragen: erst die Bestellung selbst, dann ihre Zeilen. Führ sie aus:
Die zweite Abfrage bricht mit einem Fehler ab: Produkt 99 gibt es nicht. Aber die erste ist schon durchgegangen. In der Datenbank bleibt Bestellung 61 ohne eine einzige Zeile:
Eine Bestellung über 0 Produkte. Der Kurier bekommt eine leere Tasche, und die Auswertungen zählen eine Bestellung zu viel. Dasselbe passiert, wenn der Server zwischen den beiden Abfragen stehen bleibt.
Die Idee
Eine Transaktion
Die Handlung „eine Bestellung aufgeben“ besteht aus mehreren Abfragen, die nur zusammen Sinn ergeben. Eine Transaktion macht sie zu einem Ganzen:
BEGIN;beginnt sie.COMMIT;bestätigt sie: Alles geht auf einmal hinein.ROLLBACK;bricht sie ab: als wäre nichts geschehen.
Hier die ganze Bestellung: die Bestellung, ihre zwei Zeilen und der Bestand, in einer Transaktion:
Schlägt eine Abfrage zwischen BEGIN und COMMIT fehl, sagt das Programm ROLLBACK, und die Datenbank kehrt zurück, wie sie war. Hier der Abbruch:
Es sind weiter 60 Bestellungen. Bestellung 61 gab es nur innerhalb der Transaktion.
Probier es aus
Mach es rückgängig
Ein Kollege hat eine Transaktion begonnen und alle Bewertungen gelöscht. Füge vor der Zählung eine Zeile ein, die das Löschen rückgängig macht.
Lösung
BEGIN;
DELETE FROM reviews;
ROLLBACK;
SELECT COUNT(*) AS reviews FROM reviews;ROLLBACK; vor dem SELECT. Es sind wieder 16 Bewertungen da. Mit COMMIT; wären sie für immer weg.
Die Idee
ACID
Datenbanken versprechen vier Dinge über Transaktionen. Nach den Anfangsbuchstaben heißt das ACID:
- Atomicity (Atomarität). Alles oder nichts. Eine Bestellung ohne Zeilen bleibt nicht zurück.
- Consistency (Konsistenz). Nach der Transaktion gelten alle Regeln der Datenbank: Schlüssel,
CHECK,UNIQUE. - Isolation. Zwei Transaktionen, die gleichzeitig laufen, kommen sich nicht in die Quere, als liefen sie nacheinander. Wie weit das geht, sehen wir in der Lektion über gleichzeitiges Arbeiten.
- Durability (Dauerhaftigkeit). Nach
COMMITsteht die Änderung auf der Platte. Ein Stromausfall löscht sie nicht.
Genauer, für Neugierige
Jede einzelne Abfrage ist schon eine kleine Transaktion: Ein INSERT mit drei Zeilen, von denen eine eine Regel verletzt, fügt keine ein. Deshalb kam im ersten Feld auch die Zeile mit dem Brot nicht hinein. Der Ärger beginnt, wenn eine Handlung mehrere Abfragen braucht. Dann schreibt das Programm BEGIN und COMMIT.
Übung
Yavors Bestellung
Yavor (Kunde 20) bestellt 1 Packung Kaffeebohnen (Produkt 17, 14,90 €). Lege die Bestellung 61 mit dem heutigen Datum (2026-10-25) und dem Status new an, dazu ihre Zeile, und verringere den Bestand, alles in einer Transaktion.
Lösung
BEGIN;
INSERT INTO orders (id, customer_id, ordered_at, status) VALUES (61, 20, '2026-10-25', 'new');
INSERT INTO order_items (order_id, product_id, quantity, unit_price) VALUES (61, 17, 1, 14.9);
UPDATE products SET stock = stock - 1 WHERE id = 17;
COMMIT;Drei Abfragen zwischen BEGIN; und COMMIT;: die Bestellung, die Zeile, der Bestand. Die Prüfung sieht sich Bestellung 61 mit ihrer Zeile und den neuen Kaffeebestand an: 14.
Test
Teste dich
Verwandte Lektionen
Abschnitt „Verwandte Lektionen“- Baut auf: LEFT JOIN: auch Zeilen ohne Partner · INSERT: Zeilen einfügen · UPDATE: Werte ändern · DELETE: Zeilen löschen
- Geht weiter in: BEGIN, COMMIT, ROLLBACK · Gleichzeitige Transaktionen · Trigger · Schema-Migrationen
- Aufgaben zum Thema: Transaktionen