Utilizzo dei trigger MySQL per registrare tutte le modifiche della tabella in una tabella secondaria

Ho un tavolo:

CREATE TABLE `data_table` ( `data_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `field1` INT NOT NULL , `field2` INT NOT NULL , `field3` INT NOT NULL ) ENGINE = MYISAM ; 

Vorrei registrare per registrare tutte le possibilità di field1, 2 o 3 per:

 CREATE TABLE `data_tracking` ( `tracking_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `data_id` INT NOT NULL , `field` VARCHAR( 50 ) NOT NULL , `old_value` INT NOT NULL , `new_value` INT NOT NULL , `modified` DATETIME NOT NULL ) ENGINE = MYISAM ; 

Sto usando MySQL 5 e mi piacerebbe creare un trigger da fare. Vorrei inserire una nuova riga in data_tracking ogni volta che data_table viene aggiornata e registrare il valore vecchio / aggiornato, così come il campo modificato. Ho provato il seguente senza alcun successo.

 DELIMITER $$ DROP TRIGGER `update_data `$$ CREATE TRIGGER `update_data` AFTER UPDATE on `data_table` FOR EACH ROW BEGIN IF (NEW.field1 != OLD.field1) THEN INSERT INTO data_tracking set old_value = OLD.field1, new_value = NEW.field1, field = "field1"; END IF; END$$ DELIMITER ; 

Ha dato un errore nella riga di inserimento, non sono abbastanza sicuro di quale dovrebbe essere la syntax, o se sto andando su questa strada nel modo giusto. Qualsiasi aiuto sarebbe apprezzato. Grazie.

La syntax dell’inserto è

 INSERT INTO table (columns_list) VALUES (values_list) 

quindi il tuo inserimento sarebbe simile a questo (non sono un esperto di MySQL ma puoi adattare la query):

 INSERT INTO data_tracking (`data_id` , `field` , `old_value` , `new_value` , `modified` ) VALUES (NEW.data_id, 'field1', OLD.field, NEW.field, CURRENT_DATETIME()); 

E ripetilo per variazione su field2 e field3

Penso che questo sarebbe il grilletto completo, per favore prova:

 DELIMITER $$ DROP TRIGGER `update_data `$$ CREATE TRIGGER `update_data` AFTER UPDATE on `data_table` FOR EACH ROW BEGIN IF (NEW.field1 != OLD.field1) THEN INSERT INTO data_tracking (`data_id` , `field` , `old_value` , `new_value` , `modified` ) VALUES (NEW.data_id, "field1", OLD.field1, NEW.field1, NOW()); END IF; IF (NEW.field2 != OLD.field2) THEN INSERT INTO data_tracking (`data_id` , `field` , `old_value` , `new_value` , `modified` ) VALUES (NEW.data_id, "field2", OLD.field2, NEW.field2, NOW()); END IF; IF (NEW.field3 != OLD.field3) THEN INSERT INTO data_tracking (`data_id` , `field` , `old_value` , `new_value` , `modified` ) VALUES (NEW.data_id, "field3", OLD.field3, NEW.field3, NOW()); END IF; END$$ DELIMITER ;