# mysql unäre datenbankoperation



## Tallan (28. Sep 2009)

Hallo zusammen,
die Frage zielt zwar eher auf mysql selbst ab aber vielleicht hat jemand ja bereits erfahrung mit diesem Porblem.


Ich lese mit einem Client Daten aus einer DB aus, 
der Client darf diese Daten auch ändern woraufhin sie in die DB geschrieben werden.

Problem :
Client 1 liest Datensatz a ein
Client 2 liest Datensatz a ein
Client 2 ändert Datensatz a und schreibt ihn in die DB 
Client 1 ändert Datensatz a und schreibt ihn in die DB

Jetzt hätte Client 1 Daten überschrieben die er garnicht "kennt", da er vor dem Scheiben von Client 2 eingelesen hat.

Um das zu lösen wollte ich dem Datensatz eine CommitNummer geben die bei jedem schreibzugriff incrementiert wird.

Ziel wäre also ein SQL Statement zu schreiben das folgende Punkte realisiert.

Sperren des Datensates a für andere Zugfriffe
Lies CommitNummer ein und vergleiche diese
Update der Daten
CommitNummer++
Datensatz entsperren

Ist das möglich?

Das überprüfen und updaten könnte ja durch ein einfaches where commitNummer = ... gelöst werden allerdings das incrementieren der commitNummer wäre dann Zeitkritisch


----------



## maki (28. Sep 2009)

Suche mal nach Optimistic Locking und Pessemistic Locking.
Wenn man das in der Anwendung macht und nicht in der DB, nennt sich das Optimistic Offline Locking und Pessemistic Offline Locking.


----------



## Tallan (28. Sep 2009)

wäre eine formel in der art :

UPDATE blub SET a = .. ,b = .. commitid = eingelesenecommit+1 where commitid = eingelesenecommit and where id = ..

sicher ?


----------

