Tengo una duda sobre triggers en MySQL. Quiero hacer un sistema de auditoría para controlar las inserciones, modificaciones y eliminaciones en una serie de tablas. A continuación pongo un ejemplo:
Código:
drop trigger if exists delete_personas;
delimiter //
create trigger delete_personas after delete on personas
for each row
begin
declare var_Cambios text;
set var_Cambios = '';
set var_Cambios = concat('Nombre: ', OLD.Nombre);
set var_Cambios = concat(var_Cambios, '\n', 'Apellido1: ', OLD.Apellido1);
set var_Cambios = concat(var_Cambios, '\n', 'Apellido2: ', OLD.Apellido2);
set var_Cambios = concat(var_Cambios, '\n', 'Fecha_nacimiento: ', OLD.Fecha_nacimiento);
set var_Cambios = concat(var_Cambios, '\n', 'DNI_NIE_Pasaporte: ', OLD.DNI_NIE_Pasaporte);
set var_Cambios = concat(var_Cambios, '\n', 'Sexo: ', OLD.Sexo);
insert log_cambios (Tabla, Id_tabla, Fecha, Usuario_a, Tipo, Cambios)
select 'personas', OLD.Id, now(), user(), 'Delete', var_Cambios;
end; //
Este ejemplo me serviría para guardar un registro en la tabla
log_cambios cada vez que se elimina un registro de la tabla
personas. El campo
Cambios de la tabla
log_cambios tiene por objeto guardar una fotografía del registro que acaba de ser eliminado.
El problema es doble: 1) la tabla
persona tiene bastantes campos más aparte de los que he incluído en el código anterior y 2) si añadiese un campo a la tabla
persona tendría que modificar el trigger para que se incluya el nuevo campo en la "fotografía".
¿A alguien se le ocurre una solución? ¿hay alguna manera de recorrer uno a uno los campos de "NEW" o de "OLD"? o ¿hay alguna función tipo "eval" en MySQL que me pueda servir?