Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Detectar cambios precisos realizados en 1 registro por medio de un trigger

Estas en el tema de Detectar cambios precisos realizados en 1 registro por medio de un trigger en el foro de Mysql en Foros del Web. Buenas Días amigos de foros del web: Quería preguntarles si es posible detectar cambios precisos realizados en 1 registro de una tabla por medio de ...
  #1 (permalink)  
Antiguo 11/03/2015, 07:30
 
Fecha de Ingreso: octubre-2011
Ubicación: Niquitao
Mensajes: 28
Antigüedad: 12 años, 5 meses
Puntos: 0
Detectar cambios precisos realizados en 1 registro por medio de un trigger

Buenas Días amigos de foros del web:

Quería preguntarles si es posible detectar cambios precisos realizados en 1 registro de una tabla por medio de un trigger y almacenar todas las columnas que se hayan modificado en un campo, sería algo como utilizar en el trigger Una comparación de Columnas OLD y NEW y en dicha comparación si es diferente esta misma meterle a una variable el antes y después, para que cuando se hayan comparados todas las columnas del registro con el antes y el después, me mande en un solo campo todos los cambios realizados en una sola columna por medio de la variable.
Me explicare:

Tengo una tabla user con los campos iduser,apellido1, apellido2, nombre1,nombre2
El trigger sería así:

Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE TRIGGER `bdprueba`.`user_stream_afterupdate` after
  3. update ON `bdprueba`.`user` FOR EACH ROW
  4.  
  5. DECLARE columnasamostrar VARCHAR(150) DEFAULT ''; # Esta es la variable que me alamacenara todos los cambios realizados
  6.  
  7. /*Comparación de Cada una de las Calumnas if es diferente se le concatena a la variable que guarda todos los cambios realizados*/
  8. IF (OLD.apellido1 <> NEW.apellido1) THEN SET columnasamostrar = CONCAT_WS(columnasamostrar,CONCAT('Antes : ',OLD.apellido1),CONCAT(' Ahora: ',NEW.apellido1)); END IF;
  9. IF (OLD.apellido2 <> NEW.apellido2) THEN SET columnasamostrar = CONCAT_WS(columnasamostrar,CONCAT('Antes : ',OLD.apellido2),CONCAT(' Ahora: ',NEW.apellido2)); END IF;
  10. IF (OLD.nombre1 <> NEW.nombre1) THEN SET columnasamostrar = CONCAT_WS(columnasamostrar,CONCAT_WS('Antes : ',OLD.nombre1),CONCAT_WS(' Ahora: ',NEW.nombre1)); END IF;
  11. IF (OLD.nombre2 <> NEW.nombre2) THEN SET columnasamostrar = CONCAT_WS(columnasamostrar,CONCAT_WS('Antes : ',OLD.nombre2),CONCAT_WS(' Ahora: ',NEW.nombre2)); END IF;
  12.  
  13.  
  14. 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
  15.  END$$
  16. DELIMITER ;

El problema es que este trigger me ingresa 1 registro por cada columna modificada y yo necesito es que todas las modificaciones se almacenen en 1 solo registro no en varios, este trigger me hace lo siguiente :
Código MySQL:
Ver original
  1. #por ejemplo si modifico un registro en el que apellido2 era igual a Gutierrez por Sanchez  y nombre2 era igual a Juan por Pedro, en la tabla changesonusers se ingresaria esto:
  2. +-------------------------------------+
  3. |iduser|         description          |
  4. |-------------------------------------|
  5. |  1   |Antes:Gutierrez Ahora:Sanchez |
  6. |-------------------------------------|
  7. |  1   |Antes:Juan Ahora:Pedro        |
  8. |-------------------------------------|
  9.  
  10. # Pero yo lo que necesito que haga es esto
  11.  
  12. +------------------------------------------------------------+
  13. |iduser|                 description                         |
  14. |------------------------------------------------------------|
  15. |  1   |Antes:Gutierrez Ahora:Sanchez,Antes:Juan Ahora:Pedro |
  16. |------------------------------------------------------------|

Es posible Hacerlo cualquier ayuda será bienvenida
Mil gracias...
  #2 (permalink)  
Antiguo 11/03/2015, 07:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Detectar cambios precisos realizados en 1 registro por medio de un trigger

Aunque pudieras hacerlo... ¿te das una idea del impacto de semejante cosa en la performance del UPDATE?

Ten en cuenta que lo que pretendes hacer se ejectuará todas las veces que haya un UPDATE n las tabla... Si la idea es hacer una auditoría, me parece completamente impráctico.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: bd, cambios, campo, medio, registro, tabla, trigger, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:26.