Código:
  
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.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; //
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?
 
 

