MySQL - Disparador para eliminar registro

 
Vista:
Imágen de perfil de John
Val: 42
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Disparador para eliminar registro

Publicado por John (19 intervenciones) el 19/04/2018 17:24:13
Hola amigos, como podria realizar un disparador, que haga un delete de un registro.

veran tengo una tabla con 2 campos, producto y cantidad, necesito que cuando la cantidad sea igual a 0, se borre el registro del producto.

tengo esta sintaxis en el editor de disparadores de Mysql, lo estoy probando así pero no me funciona.

1
2
3
if (new.cantidad=0) then
	DELETE FROM m_alimentacion1 where cantidad=0;
end if

lo probe con after y también con before pero nada :(

gracias, espero haberme explicado bien, feliz día!!
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
sin imagen de perfil
Val: 250
Plata
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Disparador para eliminar registro

Publicado por leonardo_josue (414 intervenciones) el 19/04/2018 18:37:00
Hola John:

No nos dices por qué razón tu trigger no funciona, si te está marcando algún error al compilarlo o simplemente no hace lo que quieres. aunque por lo que pones, voy más por lo primero...

Supongo que el disparador lo tienes definido al hacer un UPDATE sobre la misma tabla en la que estás tratando de hacer la eliminación. Te comento que MySQL como muchos otros DBMS's no te permiten realizar esto por cuestiones de seguridad, ya que hacer esto, como dice un colega de otro foro, es el equivalente a cortar la rama sobre la que estás parado...

En otras palabras, NO PUEDES ELIMINAR EL MISMO REGISTRO QUE ESTÁS TRATANDO DE ACTUALIZAR.

Aquí te puedo sugerir dos cosas:

1. Puedes realizar una BAJA LÓGICA, en lugar de una BAJA FISICA, es decir, puedes tener un campo "bandera" que te indique si un registro está dado de baja o no... entonces en lugar de tratar de hacer el DELETE simplemente actualizas el campo de acuerdo a tu criterio:

1
2
3
4
new.baja = 0; -- donde 0 indica que el registro no está dado de baja
if (new.cantidad=0) then
	new.baja = 1; -- donde 1 indica que el registro está marcado como baja
end if

2. En lugar de utilizar un TRIGGER, puedes manejar un Procedimiento almacenado para realizar la lógica de la actualización y/o eliminación del registro, es decir, algo como esto:

1
2
3
4
5
6
7
PROCEDIMIENTO actualizar_tabla(campo1, campo2, ... cantidad);
INICIO
  SI cantidad = 0 ENTONCES
    ELIMINAR registro
  SINO
    ACTUALIZAR registro
FIN

Haz la prueba y nos comentas. Y como recomendación, siempre incluye en tus post's cualquier mensaje de error que esté arrojando la BD's, así podremos tener más detalles del problema.

Saludos
Leo.
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
Imágen de perfil de John
Val: 42
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Disparador para eliminar registro

Publicado por John (19 intervenciones) el 20/04/2018 14:49:35
Hola Leo muchas gracias x responder.

preferi tu segunda opción ya que solo en la tabla debo tener registros q esten activos.

probe lo siguiente y mysql no me deja crear el procedimiento

1
2
3
4
5
6
7
create procedure borrar_cero (in cantidad float)
 
begin
  if cantidad = 0 then
    delete from m_alimentacion where cantidad = 0;
  end if;
end;

dice: #1064 - Algo está equivocado en su sintax cerca '' en la linea 5.

tambien probe así suponiendo q no estaba comenzando el procedimiento como debia.

1
2
3
4
5
6
7
8
9
10
DELIMITER $$
 
create procedure borrar_cero (in cantidad float)
 
begin
  if cantidad = 0 then
    delete from m_alimentacion where cantidad = 0;
  end if;
end $$;
DELIMITER ;

arrojando el error #1304 - PROCEDURE borrar_cero already exists

gracias x tu ayuda leo
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