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

trigger en mysql

Estas en el tema de trigger en mysql en el foro de Mysql en Foros del Web. Estimad@s Foristas. he cometido un grave problema en la secuencia de ejecución, el trigger no va a "dispararse" porque en mysql (según estuve leyendo) bloquea ...
  #1 (permalink)  
Antiguo 18/12/2009, 11:11
 
Fecha de Ingreso: diciembre-2007
Ubicación: Quito-Ecuador
Mensajes: 13
Antigüedad: 16 años, 4 meses
Puntos: 0
trigger en mysql

Estimad@s Foristas. he cometido un grave problema en la secuencia de ejecución, el trigger no va a "dispararse" porque en mysql (según estuve leyendo) bloquea el registro por lo tanto no se lo puede utilizar, una cosilla mas; es cierto? (no lo puede encontrar en la web) que los triggers solo pueden ser usados con tablas InnoDB?

Última edición por mariolopez; 18/12/2009 a las 13:31 Razón: error de apreciacion
  #2 (permalink)  
Antiguo 18/12/2009, 13:42
 
Fecha de Ingreso: diciembre-2007
Ubicación: Quito-Ecuador
Mensajes: 13
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: trigger en mysql

Estimad@s foristas encontre la solucion, ha sido la sintaxis del trigger que se aplica sobre la misma linea de inserción, y con respecto a lo de la tabla InnoDB, el trigger si se aplica sobre tablas MyIsam.........
  #3 (permalink)  
Antiguo 18/12/2009, 14:46
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: trigger en mysql

Eso es parte del modelo de SQL: Un trigger tiene forzosamente que bloquear la tabla que lo dispara y a la que pertenece, porque hay un INSERT/UPDATE/DELETE en proceso, y no se puede pertimitir que se realicen tareas que afecten a los mismos datos que estamos trabajando.
Te lo explico en un ejemplo simple:
Supongamos que tu TRIGGER se disparara ante un UPDATE, y que mientras se estuviese ejecutando, entrase una sentencia DELETE que borrase el mismo registro que estás actualizando.... ¿En qué estado queda ese registro? ¿Está borrado o está actualizado?
Si el registro se borra, ¿cómo haces para actualizar algo que ya no pertenece a la tabla?
Si el registro se actualiza, ¿no dispararía eso un error a la sentencia de borrado?.

¿Se comprende la idea?

El sistema de triggers debe responder al peor escenario posible, porque simplemente no puede anticipar qué es lo que los programadores van a hacer.
Supongamos que tu instrucción en el trigger fiese borrar el propio registro... ¿Cómo hacerlo, si el trigger se dispara por un UPDATE?

En definitiva, las tablas sufren bloqueos en los TRIGGER, cuyo nivel dependerá del motor de tablas y los bloqueos que los mismos pueden hacer. En el caso de InnoDB, como tiene bloqueos de nivel registro, lo puede hacer en un sólo registro (o un grupo, si es más de uno el registro que será afectado); en cambio MyISAM sólo los tiene a nivel de tabla, y por eso no puede bloquear sólo el registro.

Un tip final es: No uses los TRIGGER para hacer validaciones de datos. No es correcto, es ineficiente y no da buenos resultados a la hora de realizad INSERT/UPDATE.
Las validaciones se hacen en las aplicaciones. No en las bases de datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 05:58.