Tengo una tabla:Uso de MySQL disparadores para registrar todos los cambios de la tabla a una tabla secundaria
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 ;
I sería log para registrar ningún riesgo para CAMPO1, 2, o 3 a:
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 hacer. 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 ;
Se dio un error en la línea de inserción, no estoy muy seguro de lo que debería ser la sintaxis de eso, o si voy de este por el camino correcto. Cualquier ayuda sería apreciada. Gracias.
Acabo de agregar mi pensamiento sobre el disparador –
¿Estás seguro de que tu "data_table" tiene un campo llamado data_id? –
Vaya, lo siento, tiene razón, cuando creé mis tablas de ejemplo, cambié una de ellas en el último minuto. Esto funcionó perfectamente. Perdón por la confusión :( – Rob