2016-04-23 3 views
0

Ich habe etwas anderes Szenario mit Trigger zu arbeiten.Wie bekomme ich den vorherigen Datensatz, nachdem der Update-Trigger ausgeführt wurde?

Ich möchte Datensatz in Protokolltabellen vor dem tatsächlichen Update auf Haupttabelle einfügen. Aber ich möchte es anders machen.

Wie nur Datensätze in Log-Tabellen hinzufügen, wenn wirklich Updates in der Haupttabelle passieren, und ich möchte es mit MySQL Trigger tun.

Ich befestige hier Screenshots.

enter image description here

Wenn ich id = 1 für Namen aktualisieren = ABCD dann ersten vorherigen Zustand der Zeile lesen, es fügt Tabelle loggt sein.

enter image description here

Was ich prüfen möchte, ist mit MySQL-Trigger, dass es fügt nur Tabelle main_table_log, wenn die tatsächliche Aktualisierung main_table passiert. Wenn keine Aktualisierungen in main_table vorhanden sind, sollte kein Eintrag zur main_table_log-Tabelle hinzugefügt werden.

Kann mir jemand dabei helfen? Ich denke, dass es machbar sein kann, aber nicht, wie man es macht?

Und natürlich verwende ich PHP als Front.

Antwort

1

Sie können testen, ob die alten und neuen Werte im Trigger unterschiedlich sind.

CREATE TRIGGER log_trigger 
AFTER UPDATE ON main_table 
FOR EACH ROW 
    IF OLD.name != NEW.name OR OLD.num != NEW.num 
    THEN 
     INSERT INTO main_table_log (id, name, num) VALUES (OLD.id, OLD.name, OLD.num) 
    END IF 
+0

Vielen Dank für die schnelle Antwort. Anstatt jedes Feld zu überprüfen, kann ich wissen, ob OLD-Datensatz tatsächlich aktualisiert wird? Weil ich ungefähr 10-15 Felder in jeder Tabelle habe. – NullPointer

+0

Haben Sie eine Zeitstempelspalte mit 'ON UPDATE CURRENT_TIMESTAMP'? Dann können Sie einfach diese Spalte überprüfen, da sie nicht aktualisiert wird, wenn keine der anderen Spalten aktualisiert wird. Siehe http://stackoverflow.com/questions/6296313/mysql-trigger-after-update-only-if-row-haschanged – Barmar

+0

Ich schaue auf den Link, den Sie angegeben haben. Ich versuchte zuerst, verwandte Frage zu finden, konnte aber nicht finden. – NullPointer

Verwandte Themen