spöppi: mysql mehrere User ein Datensatz

Hallo,

ich habe eine Datenbank geschrieben in der PC, IP-Adressen bzw. sonst noch allerlei Equipment verwaltet wird.

Frage:
Wie kann ich verhindern das zwei User an ein und dem Selben Datensatz arbeiten?

Falls nicht klar ist was ich meine:
Ich habe das Problem das z.B User A einen PC aufruft um eine IP-Adresse zu vergeben.
Während er das macht kommt User B und will die selbe Arbeit machen.
User A ist fertig und speichert den PC mit der IP-Adresse xxxxx
Danach wird User B fertig und speichert den gleichen PC mit der IP-Adresse yyyyyy
Was aber User A nicht wissen kann.

Jetzt habe ich gefunden das man das mit Tabellen Locks verhindern kann.
Nur fehlt mir da irgendwie der Plan wie ich das angehe.
Wie ist das wenn ein User z.B. einen PC aufruft dann könnte ich die Tabelle oder die Zeile mit Lock sperren. Was aber wenn er dann nichts macht und den zurück Button seines Browsers verwendet. Wie wird dann das lock wieder aufgehoben?

Habt ihr eine andere Idee wie ich das Problem lösen könnte.

Besten Dank

Michael

  1. Hi,

    man kann darüber streiten ob das die Aufgabe der Datenbank (und damit ein sinnvoller Einsatz für Locks) ist. Die Datenbank garantiert in erster Linie die Isolation der Schreibaktionen beider Nutzer (d.h. wenn beide gleichzeitig auf Speichern drücken...).
    Solche Probleme wie deines kenne ich z.B. von unserem Wiki-System. Dort führt das System eine zeitbasierte "Datensatz wird gerade bearbeitet"-Sperre, d.h. er gibt dir zu Beginn der Bearbeitung ein 10min-Fenster in der jeder andere Nutzer eine Warnung erhält. Drückt man innerhalb dieser Zeit auf Speichern oder Vorschau wird der Zeitraum entsprechend verlängert.
    Man könnte dieses System noch zusätzlich mit einer Warnmeldung beim tatsächlichen Speichern durch zwei Nutzer kombinieren, so a la Bugzilla mit seinem "mid-air collision detected".
    Den Datensatz in der Tabelle zu locken halte ich für keine gute Idee, je nach Art des Locks kannst du dir damit richtige Probleme auch bei Lesevorgänge etc. einhandeln.

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(