Tengo una tabla y quiero guardar los cambios que se hacen de forma que disponga de un log.
Habia pensado en algo como esto
DELIMITER $$
CREATE TRIGGER `bdprueba`.`user_stream_afterupdate` after
update ON `bdprueba`.`user` FOR EACH ROW
BEGIN
DECLARE columnasamostrar VARCHAR(150) DEFAULT ''; # Esta es la variable que me alamacenara todos los cambios realizados
/*Comparación de Cada una de las Calumnas if es diferente se le concatena a la variable que guarda todos los cambios realizados*/
IF (OLD.apellido1 <> NEW.apellido1) THEN SET columnasamostrar = CONCAT_WS(columnasamostrar,CONCAT('Antes : ',OLD.apellido1),CONCAT(' Ahora: ',NEW.apellido1)); END IF;
IF (OLD.apellido2 <> NEW.apellido2) THEN SET columnasamostrar = CONCAT_WS(columnasamostrar,CONCAT('Antes : ',OLD.apellido2),CONCAT(' Ahora: ',NEW.apellido2)); END IF;
IF (OLD.nombre1 <> NEW.nombre1) THEN SET columnasamostrar = CONCAT_WS(columnasamostrar,CONCAT_WS('Antes : ',OLD.nombre1),CONCAT_WS(' Ahora: ',NEW.nombre1)); END IF;
IF (OLD.nombre2 <> NEW.nombre2) THEN SET columnasamostrar = CONCAT_WS(columnasamostrar,CONCAT_WS('Antes : ',OLD.nombre2),CONCAT_WS(' Ahora: ',NEW.nombre2)); END IF;
INSERT INTO changesonusers(iduser, description) VALUES(OLD.iduser,columnasamostrar); #se guarda EN 1 SOLO REGISTRO (NO en varios), todo lo que se modifico en una tabla llamada changesonusers
END$$
DELIMITER ;
El problema que me comentan es que aunque pueda hacerlo el impacto del rendimiento sería muy alto al ejectuar todas las veces que haya un UPDATE en las tabla... Por lo tanto si la idea es hacer una auditoría me dicen que es completamente impráctico.
¿ se os ocurre alguna otra forma mejor?
Gracias
Completamente impractico? Es para esto que se utilizan triggers en base de datos. Para mantener un log de los cambios en tu BD.
Rendimiento? solo haces un insert por cada vez que se hacen cambios en tu tabla de usuarios. Se puede pulir un poco el codigo, pero no creo que estes equivocado.
Gracias, entonces seguiré en la misma línea :)
Deberías comprar el estado de OLD con NEW y si es diferente recién proceder a insertar.
IF OLD != NEW THEN
-- INSERTA EN TABLA
END IF;