Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/12/2009, 14:46
Avatar de gnzsoloyo
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: 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)