Tom: Multi-User-Zugriff auf MySQL-Tabellen

Beitrag lesen

Hello,

Ein weiteres Problem stellt Nebenläufigkeit dar. Während Benutzer A grad dabei ist, sein Formular zu ändern, schickt Benuter B Änderungen am selben Datensatz ab. Nun ist A fertig und überschreibt die Änderungen von B, von denen er nichts mitbekommen hat. Wenn du der einzige Benutzer bist, kannst du dieses Problem vernachlässigen. Wenn nicht, solltest du dich nicht gleich an solch ein komplexes Thema wagen. :-)

Dabei ist das eine Aufgabe, die man ganz leicht bis auf Satzebene herab (oder wenn es sein muss, sogar bis auf Spaltenebe) über das Spaltenlayout der DB lösen kann...
Man fügt einfach ein zusätzliches Feld hinzu. Nennen wir es hier mal CONFLICT_COUNT. Dieses Feld wird einfach bei jedem Update des Datensatzes um eins heraufgezählt.

Beim Holen der Daten liefert man es zusammen mit der ID und den Daten aus (oder besser: speichert es für den User in der Session. Das erzeugt aber ein neues Problem: Reentranzfähigkeit).

Beim Zurückschreiben der (geänderten) Daten fragt men nicht "where ID = $xyz", sondern "where ID = $yxz and CONFLICT_COUNT = $conflict_count" und darf nun natürlich nicht vergessen

set CONFLICT_COUNT = CONFLICT_COUNT + 1

irgendwo im Update-Statement mit unterzubringen.

Wenn man es noch eleganter lösen will, benutzt man für die Kontrolle und das Hochzählen einen Trigger.

Da Trigger bei MySQL mWn aber noch keine qualifizierten Exceptions auslösen können, muss man für das Ablehnen der Operation einen schmutzigen Trick verwenden. Man spricht einfach eine nicht vorhandene Dummy-Spalte an. Das führt dann zum Abbruch des Updates.

BTW: Ich bedaure immer wieder, dass man hier keine Grafiken mit hochladen kann für Erläuterungen. Eine Skizze ist manchmal verständlicher, als 1000 Worte. Das Separate Hosting der Grafiken auf einem eigenen Server führt später meistens zu deren Verlust für den Thread...

Harzliche Grüße vom Berg
http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau