Inverse SQL-Befehle?
-
Hi,
ich überlege mir gerade, wie man Am besten wiederrufbare SQL-Befehle realisieren könnte. Ich hab mir dabei gedacht, evt. kann man die ausgeführten SQL-Befehle inverse behandeln - sodass ein delete zu einem insert befehl wird,..usw.
Evt. kennt jemand von euch sowas in die Richtung?
Ciao
-
JayJay schrieb:
ich überlege mir gerade, wie man Am besten wiederrufbare SQL-Befehle realisieren könnte.
Transaktionen? Prepared Statements?
JayJay schrieb:
Ich überlege mir gerade, wie man Am besten wiederrufbare SQL-Ich hab mir dabei gedacht, evt. kann man die ausgeführten SQL-Befehle inverse behandeln - sodass ein delete zu einem insert befehl wird,..usw.
Ach so, jetzt versteh' ich, was du meinst!
Dein Vorhaben ist aber imho nicht sinvoll realisierbar, außer mit Hilfe ständiger Backups. Du kannst höchstens mehrere Server in einen Cluster zusammenschließen und dann bei gewünschtem "Widerruf" z.B. den Master mit dem für die Sicherung zuständigen Slave synchronisieren.
-
Statt die Datensätze mit DELETE komplett zu löschen, kannst Du zunächst in jedem zu löschenden Datensatz auch ein Flag "deleted" via UPDATE setzen. Sobald die Löschung permanent gemacht werden soll, machst Du ein DELETE * WHERE deleted = true, oder ein Undo geht über UPDATE deleted = false.
Das hat nämlich den Vorteil, daß es auch mit verknüpften Tabellen o.ä. funktioniert. Beim Einfügen mußt Du natürlich immer darauf achten, daß eventuelle Beziehungen auf gelöschte Daten diese ebenfalls restaurieren.
Vor allem ist es relativ flott.
Sollen Löschungen periodisch (z.B. über Datum) durchgeführt werden, kannst Du auch von Anfang an Tabellen verwenden, die geMERGEt sind, d.h. man legt zum Beispiel für jeden Monat eine eigene Tabelle an, und fügt alle diese Monatstabellen via MERGE zu einer einzigen zusammen. Will man einen Monat löschen, so entfernt man aus dem MERGE einfach die betroffenen Monate. Man kann eine solche Monatsdatei sogar archivieren und wegkopieren. MySQL und PostgreSQL unterstützen das (bei Postgre nennt sich das Partition). Ist nicht wirklich eine Umkehr der Löschung, sondern eine Vorbereitung der Daten, daß sie leichter umkehrbar löschbar werden.
http://dev.mysql.com/doc/refman/5.1/en/merge-storage-engine.html
-
Dieser Thread wurde von Moderator/in Marc++us aus dem Forum Webzeugs in das Forum Datenbanken verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Mit MSSQL 2000 kannst du auch Transaktionen über mehrere Server machen.
Musst sie nur im Serveragent registrieren und kannst dann in den Abfragen die Server mit verwenden.Die Transaktionen können allerdings nicht verschachtelt werden.
Ansonsten kann man das natürlich auch Clientseitig lösen.