phpbar.de logo

Mailinglisten-Archive

TRANSAKTIONEN

TRANSAKTIONEN

Handel, Holger mysql_(at)_lists.phpcenter.de
Mon, 21 May 2001 09:54:38 +0200


Das mit den Transaktionen ist gar nicht so einfach, aber machbar.

Das mit dem LOCK/UNLOCK ist keine Transaktion.
Damit wird die Tabelle nur vor Mehrbenutzerzugriffen geschützt. Fehler in
den Refferenzen der bearbeiteten Tabellen (meist die Ursache für ein
Rollback) kann man damit nicht abfangen.

Die Transaktionen müßen manuell ausprogrammiert werden.

Hierzu müssen vor einen INSERT,DELETE,UPDATE die betroffenen Datensätze
ausgelesen und in einer Zwischentabelle gespeichert werden.
Dann wird die Datenbankanfrage gestartet. Tritt ein Fehler auf, wird diese
durch das Rückspeichern der Daten aus der Zwischentabelle rückgängig
gemacht.
Das gilt für die anderen Datenbankanfragen genauso.
Wichtig bei der Zwischentabelle ist, das diese als FiLo behandelt wird, also
immer zuerst die zuletzt gespeicherten Daten zurückgeschrieben werden.

In die Tabelle gehört TABELLENNAME,LISTE DER ORGINALEN FELDWERTE
(Sinnvollerweise in ein Feld als Trennzeichen getrennt Liste).
Wurde ein Datensatz aus dieser Tabelle zurückgespeichert, wird der in der
Zwischentabelle als abgehandelt gekennzeichnet und der nächste ist dran, bis
die Zwischentabelle komplett abgearbeitet ist.

Das ganze funktioniert bei recht einfache Tabellen-Refferenzen ganz gut. Bei
vielen Fremdschlüsseln in einer Tabelle wird das natürlich recht schwierig.
Auch Auto-Incement-Felder und mit Werten (Datum,User...) wird das
kompliziert.

Es Macht also im Prinzip keinen Sinn Systemfunktionen nachzubauen, das ist
viel zu aufwendig und fehleranfällig.
PROBLEM: Tritt ein Fehler während des "ROLLBACKS" auf hast du ein echtes
Problem.

Es sollte schon in der Planung auffallen, wenn Transaktionen für das System
benötigt werden. 
Daraufhin sollte eine entsprechende Datenbank ausgewählt werden.

ASLO: Umsonst ist nicht immer das Beste. Wenn du die DB Privat brauchst,
solltest du dich nach Demo-Versionen geeigneter Datenbank-System umschauen.
Da gibt es eine ganze Latte von Datenbanken die man privat und zur
Entwicklung nutzen darf.
Geschäftlich sollte man auf MySql sowieso ganz verzichten.

MfG Holger

---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive