[MySQL][[ENGINE=InnoDB] Transaktionssicherheit

mäks

Mitglied
Hallo Zusammen,

ich hab mir gerade so ein schlaues Buch gekauft welches sich mit der Administration von MySQL beschäftigt.

Leider verstehe ich einen Teil da noch nicht ganz:

1.) Inwiefern unterscheidet sich eine Transaktion von einer Nebenläufigkeit welche zu einem "Lost Update" führt?

Für mich sieht das noch immer so aus als ob diese beiden Dinge gleich sind, nur das eben bei der Transaktion entweder ein COMMIT=OK, oder ein ROLLBACK=NOK gesendet wird und die Transaktion rückgängig gemacht wird, damit die DB in einem konsistenten Zustand bleibt oder die Transaktion erfolgreich beendet wird.

2.) Eine Transaktion greift ja auch nur auf die aktuell vorhandenen Daten zu. Wieso sollte dann das Problem mit der Nebenläufigkeit nicht bestehen? Wenn beispielsweise jemand versucht ein Buch zu leihen und genau im selben Moment jemand andere auf diese Daten zugreift, würde er den ersten überschreiben, je nachdem halt wer als letztes schreibt.

Vielleicht kann mir da jemand ein paar Denkhilfen geben, damit ich das Thema besser verstehe.

danke und lg

Maks
 
Hi,

zu dem Ersten kann ich dir leider nichts sagen, zum Zweiten so'n bisschen:

Bei InnoDB wird der Datensatz für die Dauer der Transaktion gesperrt. Wenn also Person A das Buch leiht, ist der Datensatz transaktionsmäßig dicht. Person B, die kurz darauf das Buch leihen will, muss warten, bis der Vorgang, der von Person A ausgeführt wurde, beendet ist. Erst dann kann diese zweite Transaktion stattfinden, um dann z.B. erst die Ausleihmöglichkeit des Buches auszulesen (durch Person A jetzt negativ) und dann erst (vielleicht) zu schreiben. Das müsste der Isolation im ACID entsprechen; ich bin da aber absolut kein Pro. Vielleicht hilft dir der Artikel ff. in der MySQL-Doku weiter.
 
Danke para_noid,

ich denke das mir das auf jedenfall mal weiterhilft. Ja das mit der Datensatzsperre war mir bereits bekannt. Ich denke mal das ich Pkt. 2 besser verstanden habe und einfach wieder mal zu kompliziert gedacht habe :).

zu Pkt. 1:

ich weiß dass eine Transaktion aus mehreren Datenbankoperationen besteht (UPDATE, INSERT, SELECT...) und diese entweder mit einem 'COMMIT' bei erfolgreicher Abarbeitung aller Teiloperationen oder mit einem 'ROLEBACK' bei einem Fehler in einer oder mehreren Datenbankoperationen abgeschlossen wird.
Wenn man beispielsweise MySIAM als StorageEngine verwendet, wird es diese Transaktionen nicht geben. Darum kommt es auch zur 'Nebenläufigkeit' welche dieses LostUpdate hervorrufen kann.

Bitte korrigiert mich wenn ich da falsch liege :)


schönes WE noch

lg Maks
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück