Hallo,
Wenn aber ein zweiter Anwender parallel den Datensatz einließt, bevor der erste den Datensatz speichert und dann die Daten speichert, bekommt der erste Anwender nicht die Änderung des zweiten Anwenders mit. Speichert der Erste nun, überschreibt dieser wieder die Änderungen des zweiten Anwenders, ohne jemals die Änderung des Zweiten mitbekommen, gesehen zu haben...
Mein Idee ist es den Datensatz zu sperren, wenn jemand diesen ließt und beim Speichern wieder freizugeben, wenn dieser gespeichert wird. Wie kann ich dies technisch lösen?
das von Dir vorgesehene Vorgehen nennt man pessimistisches Sperren und ist gerade im Webumfeld *NICHT* ratsam.
Im Handbuchkapitel [http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-transactions.html@title=MySQL Transactional and Locking Statements] findest Du, was MySQL hinsichtlich Transaktionen und Sperren kann.
Ich empfehle Dir, eine Spalte (TIMESTAMP) mitzuführen, in der der Zeitpunkt der letzten Änderung gespeichert wird. Versieh das Update-Statement nicht nur mit dem Primärschlüssel in der WHERE-Klausel, sondern mit dem kompletten Datensatz. Wurde kein Datensatz geändert, so wurde der Datensatz in der Zwischenzeit geändert und Du kannst den Benutzer eine entsprechende Mitteilung geben:
"Der Datensatz wurde in der Zwischenzeit geändert,
die neuen Angaben sind wie folgt:
[...]
Wollen Sie diesen Datensatz mit Ihren Änderungen überschreiben?"
Freundliche Grüße
Vinzenz