Zum Inhalt
wannacode

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:

SQLDatenbank: Shop

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:

SQLDatenbank: Shop

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:

SQLDatenbank: Shop

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:

SQLDatenbank: Shop

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.

SQLDatenbank: Shop

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 COMMIT steht 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.

SQLDatenbank: Shop

Test

Teste dich

1. Eine Transaktion brach bei der dritten von fünf Abfragen mit einem Fehler ab und wurde zurückgerollt. Was bleibt in der Datenbank?
2. Welcher Buchstabe von ACID verspricht, dass die Bestellung nach COMMIT bei einem Stromausfall nicht verschwindet?
3. Ein INSERT mit drei Zeilen, von denen die dritte eine Regel verletzt. Wie viele Zeilen kommen hinein?

Erstellt von Ivo Gergov im Rahmen der Kampagne von Evo Tech für zugängliche Programmierausbildung ·