update una trigger tabla sirven que para los genérico ejemplos ejemplo disparadores delete cambios before auditar mysql triggers

una - trigger mysql update



Usar disparadores de MySQL para registrar todos los cambios de la tabla en una tabla secundaria (1)

La sintaxis de inserción es

INSERT INTO table (columns_list) VALUES (values_list)

por lo que su inserción sería algo como esto (no soy un experto en MySQL, pero puede ajustarse a la consulta):

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

Y repítalo para la variación en campo2 y campo3

Creo que este sería el disparador completo, por favor intente:

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 ;

Tengo una mesa

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 ;

Me gustaría iniciar sesión para registrar cualquier posibilidad de campo 1, 2 o 3 para:

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 ;

Estoy usando MySQL 5, y me gustaría crear un disparador para hacerlo. Me gustaría insertar una nueva fila en data_tracking cada vez que se actualice data_table, y registrar el valor anterior / actualizado, así como el campo cambiado. Intenté lo siguiente sin ningún éxito.

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 ;

Dio un error en la línea de inserción, no estoy muy seguro de cuál debería ser la sintaxis, o si voy por esto de la manera correcta. Cualquier ayuda sería apreciada. Gracias.