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.