Mailinglisten-Archive |
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