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

Creacion de disparadores

Estas en el tema de Creacion de disparadores en el foro de Mysql en Foros del Web. Buenas, estoy intentando crear 2 disparadores. Tengo tres tablas, y lo que quiero hacer es que si se elimine de la tabla A, el disparador ...
  #1 (permalink)  
Antiguo 02/08/2011, 05:04
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Creacion de disparadores

Buenas, estoy intentando crear 2 disparadores.
Tengo tres tablas, y lo que quiero hacer es que si se elimine de la tabla A, el disparador compruebe si hay filas con ese valor en B y si no las hay tb lo elimine de C.

Lo que he hecho yo es esto, pero no funciona....

Cita:
CREATE TRIGGER drpVersion before delete ON versiones
FOR each row
begin

set @contador=(select count(*) from bugs where value=old.value)

if !(@contador>0) then

DELETE FROM cf_affected_versions where value=old.value

end if

end
  #2 (permalink)  
Antiguo 02/08/2011, 05:16
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: Creacion de disparadores

Perdón, pero ¿no sería más fácil crear una FK en esas tablas con la cláusula ON DELETE CASCADE ON UPDATE CASCADE?
En esencia, se supone que haría exactamente eso.

Por lo demás, te has olvidado todos los delimitadores de sentencias (;) de todas las líneas.
¿Estás migrando de SQL Server?

Código MySQL:
Ver original
  1. DELIMITER$$
  2. DROP TRIGGER IF EXISTS drpVersion $$
  3. CREATE TRIGGER drpVersion BEFORE DELETE ON versiones
  4.     SET @contador= (SELECT COUT(*) FROM bugs WHERE value=OLD.value);
  5.     IF @contador=0 THEN
  6.         DELETE FROM cf_affected_versions WHERE value=OLD.value;
  7.     END IF;
  8. END$$
  9. DELIMITER ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 02/08/2011, 05:33
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Creacion de disparadores

No estoy migrando, pero si pongo el ";" me da un syntax error...


Y si, seria mucho mas sencillo, solo un pequeño problemilla, la bd es de firebug y el campo que comprobamos no es clave, x lo que no se podria crear la fk.... Y antes de que lo digas, si, la base de datos esta muy mal hecha, pero es lo que me ha tocado...
  #4 (permalink)  
Antiguo 02/08/2011, 05: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, 4 meses
Puntos: 2658
Respuesta: Creacion de disparadores

Primero: Los SP, SF y TRIGGERS se crean en una ventana específica del Workbench. Por eso te está dando error (el IF THEN/ELSE/END IF no se puede usar en esa ventana).

Lo que tienes que hacer es ir a la tabla, en la barra lateral, y con el menu cotextual seleccionas la opción "ALter Table...". Esto abrirá una ventana, una de cuyas pestañas dice "Triggers".
Allí se escribe.

Segundo: Si no puedes crear una FK entonces el tema es que esas tablas no son InnoDB sino MyISAM. Verifica eso y fíjate si puedes modificarlas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 02/08/2011, 05:54
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Creacion de disparadores

Joooooeeeee, y yo aqui comiendome la cabeza...jajajajaja

Son innoBD xq hice el cambio, el problema es que no me puedo poner a hacer todas las modificaciones que conllevaria meter las fk... Porque en version los campos son tal que id, value etc, y las referencias a version lo hacen sobre value, no sobre la id...
  #6 (permalink)  
Antiguo 02/08/2011, 06:06
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: Creacion de disparadores

Lástima. Eso merecería un rediseño... Qué pena que no sea factible.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 02/08/2011, 06:21
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Creacion de disparadores

Ya funciona "perfectamente", es decir, funciona pero hay una serie de detalles que hacen que quiza tenga que terminar rediseñando...XD
  #8 (permalink)  
Antiguo 02/08/2011, 06:39
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: Creacion de disparadores

__________________
¿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: disparadores, select, tabla
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 10:42.