MySQL - Actualizar datos con Trigger

 
Vista:

Actualizar datos con Trigger

Publicado por Pablo (29 intervenciones) el 26/05/2021 09:53:24
Para cumplir con los estándares de protección de datos, tengo que "eliminar" los datos sensibles de mis contactos: Nombre, apellidos, email, movil, etc.

Por tanto he creado un trigger que cuando alguien desactive un contacto, cambie su nombre, apellidos, teléfono y demás por el string "inactivo".

El problema es que al ejecutarlo me dice:

1
2
3
4
5
UPDATE `contactos` SET activo = '0' WHERE `contacto_id` = '1'
 
#1442 - Can't update table 'contactos' in stored function/trigger because it is already used by statement which invoked this stored function/trigger

¿Cómo puedo proceder para que la tabla contactos se actualice después?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Francisco
Val: 201
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Actualizar datos con Trigger

Publicado por Francisco (73 intervenciones) el 28/05/2021 23:46:06
Hola

Tienes que colocar el trigger para que se pueda analizar, es muy dificil dar la solucion si no se tiene mas informacion

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Actualizar datos con Trigger

Publicado por Pablo (29 intervenciones) el 29/05/2021 18:14:13
Gracias Francisco por tu tiempo.

El código de mi trigger es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
delimiter $$
 
	Create trigger contacto_inactivo
	after update of activo on contactos for each row
 
	begin
	if new.activo = '0' then
 
	update contactos set nombre = 'nombre', apellidos = 'apellidos', movil = 'movil', email = 'email';
 
	end if;
	end;
 
$$ delimiter ;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Actualizar datos con Trigger

Publicado por FELIPE (1 intervención) el 29/05/2021 20:37:33
buenas, no puedes actualizar con trigger los datos de la tabla contacto. El trigger esta dentro de la tabla contacto y se dispara sobre si misma. Te tirara un error y no guardara la modificacion.
Slds.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Actualizar datos con Trigger

Publicado por bucanero (1 intervención) el 04/06/2021 13:23:18
para poder modificar los datos, tienes que hacerlo en el trigger before y no en el after, y no puedes actualizar todos los registros de la tabla, solamente el registro activo, prueba de esta forma:

1
2
3
4
5
6
7
8
9
10
CREATE TRIGGER `contacto_inactivo` BEFORE UPDATE
    ON contactos FOR EACH ROW
BEGIN
    if (new.activo = 0) then
        set new.nombre = 'nombre',
          new.apellidos = 'apellidos',
          new.movil = 'movil',
          new.email = 'email';
	end if;
END;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Actualizar datos con Trigger

Publicado por Pablo (29 intervenciones) el 06/06/2021 22:36:13
Muchas gracias bucanero por tu aporte.

Dandole vueltas al tema, estaba pensando que si alguien daba de baja un contacto "sin querer" perderíamos la información.

Así es que he creado una tabla de respaldo. Ahora el trigger copia el registro a la tabla de respaldo y posteriormente hace lo que me has dicho. La cosa queda así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE TRIGGER `contacto_inactivo` BEFORE UPDATE
 
    ON contactos FOR EACH ROW
 
BEGIN
 if new.activo = '0' then
/* Pasamos el registro a una tabla de respaldo.*/
        insert into contactos_bk(contacto_id,cliente_id,cargo_id,genero,nombre,apellidos,movil,email,usuario)
		VALUES (new.contacto_id,new.cliente_id,new.cargo_id,new.genero,new.nombre,new.apellidos,new.movil,new.email,current_user());
 
 
	set new.nombre = 'nombre',
 
          new.apellidos = 'apellidos',
 
          new.movil = 'movil',
 
          new.email = 'email';
 
    end if;
END;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar