MySQL: Feststellen ob Datensatz geändert wurde

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Sprint

Erfahrenes Mitglied
Hallo zusammen,

um feststellen zu können wer Daten geändert hat, lasse ich alle sql Anweisungen in eine separate Tabelle schreiben. Das passiert natürlich auch, wenn zwar ein Update durchgeführt werden soll, aufgrund von Datengleichheit das Update aber nicht ausgeführt wird. Dadurch habe ich jede Menge Einträge in der Tabelle, die eine Änderung vorgaukeln auch wenn nichts passiert ist.

Gibt es eine Möglichkeit festzustellen, ob eine Änderung überhaupt durchgeführt wurde? Ein einfaches ja / nein würde mir schon reichen. Oder müßte ich den betroffenen Datensatz vorher auslesen, das Update ausführen, den Datensatz erneut lesen und mit dem alten vergleichen?
 
Wenn du die Updates aus PHP laufen lässt, dann gibt es da mysqli_effectedRows() oder so ähnlich.
Nach dem Ausführen prüfen und deine Tabelle um diese Info ergänzen.
 
Zuletzt bearbeitet:
Wenn du eh schon eine separate (Audit-) Tabelle hast, wieso nicht einfach einen/drei Trigger schreiben (AFTER INSERT, BEFORE/AFTER UPDATE, BEFORE DELETE)?
Solche Sachen würde ich immer zuerst server-seitig versuchen, bevor ich vom Frontend was zusätzlich abschiesse.
Yaslaws "effected_rows" ist natürlich die korrekte Methode um im Frontend zu prüfen, was/ob geändert wurde.
Mit den Triggern kannst du natürlich die nicht geänderten Sätze vorher filtern, bevor es in die (Audit-) Tabelle geschrieben wird (IF old<>new THEN etc.)
 
Wenn du eh schon eine separate (Audit-) Tabelle hast, wieso nicht einfach einen/drei Trigger schreiben (AFTER INSERT, BEFORE/AFTER UPDATE, BEFORE DELETE)?
Solche Sachen würde ich immer zuerst server-seitig versuchen, bevor ich vom Frontend was zusätzlich abschiesse.
Yaslaws "effected_rows" ist natürlich die korrekte Methode um im Frontend zu prüfen, was/ob geändert wurde.
Mit den Triggern kannst du natürlich die nicht geänderten Sätze vorher filtern, bevor es in die (Audit-) Tabelle geschrieben wird (IF old<>new THEN etc.)
Mit Triggern habe ich noch nie was gemacht. Mußte mich erst einmal einlesen.

Das funktioniert hier aber wohl nicht, da in das Protokoll auch noch andere Werte eingetragen werden, die bei den Vorgängen in der DB keine Rolle spielen.
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
Zurück