Michael Schröpl: was gibt es denn so für Referenz-Firmen, mit MySQL?

Beitrag lesen

Hi Andreas,

ich sprecht immer alle von Transaktionen - was ist an einer
Taransaktion das besondere, bzw. was ist das überhaupt?

Während die anderen Beispiele für Transaktionen versucht haben, mehrere
SQL-Statements eines Prozesses zu bündeln, nenne ich Dir ein Beispiel
mit mehreren Prozessen, weil das m. E. der viel häufigere Fall ist.

Stell Dir vor, Du hast noch jeweils genau ein Exemplar von zwei Waren
A und B im Lager.
Jetzt klicken aber zwei Benutzer auf den submit-Button Deines Formulars.
Der Benutzer X hat im Warenkorb die Waren A und B liegen, der Benutzer Y
die Waren B und A (beachte die Reihenfolge!)
Und _nein_, es ist _nicht_ einer zuerst dran und der andere danach, sondern
beide arbeiten in einer beliebigen Weise, unterbrechen einander, mal macht
der eine ein paar CPU-Zyklen, dann wieder der andere usw. Schlimmstenfalls
arbeiten sogar beide wirklich gleichzeitig - nämlich dann, wenn Dein Server
mehrere CPUs besitzt und zufällig beide gerade "dran" sind.

Nun könnte der Prozeß von X diesem erst mal die Ware A und der Prozeß
von Y diesem erst mal die Ware B zuteilen. Danach merken beide, daß ihr
Warenkorb nicht mehr wie gewünscht zugeteilt werden kann.
Jetzt wollten aber beide Kunden nur beide Waren, nicht etwa nur eine davon!
Also muß die Datenbank sämtliche Aktionen kontrolliert rückgängig machen.
Dazu muß sie die ganze Zeit mitgeschrieben haben, was sie getan hat.
Entweder es hat wirklich alles geklappt, dann kann die Transaktion "fest-
geschrieben" werden (commit) und die Bochführung wieder gelöscht, oder es
tut nicht, dann wird sie zurückgerollt (rollback) und es ist, als wäre
nichts geschehen.

Diese ganze Buchführung ist Teil des Transaktionsmechanismus - und sie
erlaubt es überhaupt erst, zu verhindern, daß am Ende beide glauben, das
letzte Exemplar gekauft zu haben.
Eine transaktionssichere Datenbank macht das alles von alleine - Du mußt
es nicht mühsam selbst programmieren. Dein Warenkorbsystem muß lediglich
damit leben können, daß die Datenbank ihm am Ende sagt: "Deine Anforderung
ist gescheitert, sag's dem Anwender."

Viele Grüße
      Michael