arinex
Goto Top

mysql gleichzeitiger zugriff

Hallo Leute

eine eher simple mySQL Datenbank soll erstellt werden, auf welche man mittels php zugreift. (kleine Kunden-Datenbank)
es sollen alle mitarbeiter darauf zugreifen und änderungen vornehmen.
jetzt, wie muss ich das lösen, wenn zwei mitarbeiter gleichzeitig auf einen kunden zugreifen und etwas ändern wollen?
ist das in mysql möglich, wenn ja, was muss ich mir genauer anschauen?

Danke & Gruss

Content-Key: 109110

Url: https://administrator.de/contentid/109110

Printed on: April 19, 2024 at 19:04 o'clock

Member: ShitzOvran
ShitzOvran Feb 16, 2009 at 10:04:50 (UTC)
Goto Top
auf einen und den selben Datensatz einer Tabelle kann man meines wissens nicht gleichzeitig zugreifen. wenn die Kundeninformationen aus mehreren Datensätzen verschiedener Tabellen bestellen sollte das kein Problem sein, aber wie gesagt... ein und der selber Datensatz kann nicht gleichzeitig von mehreren geändert werden.
Member: arinex
arinex Feb 16, 2009 at 15:39:09 (UTC)
Goto Top
hallo

danke für deine antwort.

gäbe es eine möglichkeit das Ändern zu sperren, so eine art Warnung "jemand bearbeitet den datensatz gerade"?
was macht die datenbank wenn zwei gleichzeitig ändern, bzw. beide öffnen die ersten informationen jedoch ändern diese zwei diese auf ihre art und weise,
wessen informationen behält die datenbank?

gibt es eine lösung dazu?

danke & gruss
Member: ShitzOvran
ShitzOvran Feb 16, 2009 at 18:04:19 (UTC)
Goto Top
Im normalfall ist es so, wenn man den Datensatz bearbeitet und ein anderer in der zwischenzeit den Datensatz geändert hat, dass dann eine Meldung kommt dass jemand anderes drinn gearbeitet hat, und man kann auswählen eine Veränderung in die Zwischenablage zu kopieren oder zu verwerfen
Member: filippg
filippg Feb 16, 2009 at 21:05:07 (UTC)
Goto Top
Hallo,

auf einen und den selben Datensatz einer Tabelle kann man meines
wissens nicht gleichzeitig zugreifen.
Doch, genau da liegt ja das Problem. Wenn zwei Leute versuchen eine Word-Datei von einem Netzwerkshare zu öffnen, so bekommt der zweite eine entsprechende (Fehler-)Meldung. Wenn aus der DB einer die Kundendaten öffnet, so wird durch MySQL kein Lock erzeugt. Der zweite kann sie auch öffnen, dann speichern beide, und einer überschreibt die Änderungen des anderen.
Hierzu bietet eine Datenbank auch keine Lösung, dass muss auf Applikationsebene gelöst werden.
Ansatz: du fügst der Tabelle mit den Kundendaten eine Spalte Lock hinzu, am besten als Datetime. Wenn ein Bearbeiter eine Seite mit Kundendaten öffnet, so wird hier der aktuelle Zeitpunkt eingetragen. Versucht ein Bearbeiter eine Seite zu öffnen, auf der für den Kunden schon ein Lock hinterlegt ist, so bekommt er eine Fehlermeldung. Wenn der (erste) Bearbeiter die Seite wieder schließt, so wird das Lock entfernt, andere können sie wieder verwenden. Problem ist das Erkennen des "schließens". Wenn der Bearbeiter einfach den Browser schließt, dann bekommt der Server davon nichts mit, das Lock bleibt erhalten. Daher als DateTime ausführen: Locks, die älter als x Minuten sind werden dann einfach gelöscht/überschrieben.
Noch eleganter ist das, wenn man mit PHP-Sessions arbeitet, und das Lock beim Timeout der Session entfernt - aber da bin ich bei PHP überfragt ob das überhaupt unterstützt wird (es müsste eine Aktion ohne Laden einer Seite ausgeführt werden), in asp.net wüßte ich es...

Gruß

Filipp
Member: arinex
arinex Feb 17, 2009 at 07:44:17 (UTC)
Goto Top
hallo an alle

uhh la la, das wird ja komplex! face-smile
und ich wollte nur eine simple datenbank face-smile

mal schauen...

danke & gruss
Member: ShitzOvran
ShitzOvran Feb 17, 2009 at 10:17:49 (UTC)
Goto Top
Zitat von @filippg:
Hallo,

> auf einen und den selben Datensatz einer Tabelle kann man
meines
> wissens nicht gleichzeitig zugreifen.
Doch, genau da liegt ja das Problem.

jaaah, hab mich warscheinlich undeutlich ausgedrückt, ich meinte damit ja eigentlich auch, das man den Datensatz nicht parallel bearbeiten kann.... also bei mir ist es so, dass ich eine mysql datenbank an access angebunden habe, und da kommt beim zeitgleichen bearbeitet denn halt beim aktualisieren ein Fenster, dass in der zwischenzeit der datensatz bearbeitet wurde, und was ich jetzt tun will...