Sven Rautenberg: Timeout - Datenbank inkonsistent?

Beitrag lesen

Moin!

Das wäre eine saubere Lösung, aber ob meine alte MySQL- Version 3.23.58 das mitmacht?

Nein.

Abgesehen davon halte ich es für ungünstig, eine gesamte, 15 Minuten andauernde Operation in nur eine einzige Transaktion zu packen. Das geht doch sicher auch kleinteiliger.

Allerdings: In MySQL 3 hast du keine Transaktionen, du bist also immer in der Gefahr, dass parallele Zugriffe inkonsistent werden. Angenommen, ein INSERT benötigt ein vorheriges SELECT. Und direkt nach diesem SELECT ändert ein anderer Prozess den gelesenen Datensatz, so dass das INSERT mit alten Daten arbeitet und falsche Werte schreibt (in Bezug auf den gelesenen und zwischenzeitlich geänderten Datensatz).

Du kannst natürlich ganze Tabellen gegen Bearbeitung sperren - dann ist aber für alle anderen Zugriffe eine Zeit lang Arbeitspause angesagt.

Bin jetzt einem Problem auf der Spur, wo Datensätze verloren gingen. Inzwischen haben mehrere Leute Zugriff auf das Projekt und könnten auch von zuhause löschen.

"Löschen" von Datensätzen ist sowieso immer böse, sowas vermeidet man grundsätzlich. Man kennzeichnet einen Datensatz höchstens als gelöscht, beläßt ihn aber immer in der DB. Jedenfalls dann, wenn ein normaler Benutzer an der DB arbeitet. Denn es passiert einfach zu schnell, dass aus Versehen gelöscht wurde - und wenn dann alles weg ist, und neu eingegeben werden muß, ist das blöd. Stattdessen einfach ein Lösch-Flag zurückzusetzen ist dagegen viel einfacher.

- Sven Rautenberg

--
My sssignature, my preciousssss!