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

Ayuda Triggers MySQL

Estas en el tema de Ayuda Triggers MySQL en el foro de Mysql en Foros del Web. Hola, necesito realizar un trigger que me permita que cuando elimino un cliente, tambien se eliminen todas las personas relacionadas con este cliente, las tablas ...
  #1 (permalink)  
Antiguo 06/12/2010, 02:15
 
Fecha de Ingreso: diciembre-2010
Mensajes: 1
Antigüedad: 13 años, 4 meses
Puntos: 0
Ayuda Triggers MySQL

Hola, necesito realizar un trigger que me permita que cuando elimino un cliente, tambien se eliminen todas las personas relacionadas con este cliente, las tablas se relacionan por medio de id_persona, hasta ahora he logrado esto:

DELIMITER $$
CREATE TRIGGER borrar_con_cliente
AFTER DELETE ON cliente FOR EACH ROW BEGIN
DELETE FROM cliente WHERE id_persona = persona.id_persona;
DELETE FROM persona WHERE id_persona = cliente.id_persona;
END
$$
DELIMITER ;

Lo he probado pero no me funciona, agradezco su ayuda!!!
  #2 (permalink)  
Antiguo 06/12/2010, 06:34
 
Fecha de Ingreso: julio-2009
Mensajes: 34
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Ayuda Triggers MySQL

No se por que si el trigger esta aplicado a la tabla de cliente , por que razon lo tienes que volver especificar dentro del trigger :s esto te debe de generar un error.

Yo utilizaria esta forma.

Código SQL:
Ver original
  1. DELIMITER $$
  2. CREATE TRIGGER borrar_con_cliente
  3. AFTER DELETE ON cliente FOR EACH ROW BEGIN
  4. DELETE FROM persona WHERE id_persona = OLD.id_persona;
  5. END
  6. $$
  7. DELIMITER ;
  #3 (permalink)  
Antiguo 06/12/2010, 06:47
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, 5 meses
Puntos: 2658
Respuesta: Ayuda Triggers MySQL

- En MySQL no puedes invocar una operacion DML (INSERT/DELETE/UPDATE) contra la misma tabla que tiene definido el TRIGGER.
- Tampoco puedes invocar un dato refiriendolo a su tabla, sino a una pseudovariable OLD (UPDATE y DELETE) o NEW (INSERT y UPDATE) que es la que lo tiene en ese momento, tal como te indica Petan.

Son todas restricciones de MySQL al modelo de TRIGGERS.

Debes tener cuidado también que la operación hecha contra otra tabla no dispare a su vez un trigger que quiera hacer algo en la primera tabla. No se puede porque la primera tabla está bloqueada y en MySQL no se admiten procesos recursivos. En este caso, la idea es que no haya un TRIGGER definido en PERSONA que apunte a la tabla CLIENTE.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 06/12/2010, 06:56
 
Fecha de Ingreso: julio-2009
Mensajes: 34
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Ayuda Triggers MySQL

Excelente respuesta gnzsoloyo

Etiquetas: trigger
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 16:42.