Si ejecutas comandos SQL en tu función de disparo, y estos comandos acceden a la tabla para la que es el disparador, entonces debes conocer las reglas de visibilidad de datos, porque determinan si estos comandos SQL verán el cambio de datos para el cual se activa el disparador. Brevemente:
Los disparadores a nivel de sentencia siguen reglas de visibilidad simples: ninguno de los
cambios realizados por una sentencia es visible para los disparadores BEFORE
a nivel de sentencia, mientras que todas las modificaciones son visibles para los disparadores
AFTER a nivel de sentencia.
El cambio de datos (inserción, actualización o eliminación) que hace que el disparador se active
naturalmente no es visible para los comandos SQL ejecutados en un disparador
BEFORE a nivel de fila, porque aún no ha ocurrido.
Sin embargo, los comandos SQL ejecutados en un disparador BEFORE a nivel de
fila sí verán los efectos de los cambios de datos para las filas procesadas
previamente en el mismo comando externo. Esto requiere precaución, ya que el orden de estos
eventos de cambio no es predecible en general; un comando SQL que afecta a múltiples filas puede
visitar las filas en cualquier orden.
De manera similar, un disparador INSTEAD OF a nivel de fila verá los efectos
de los cambios de datos realizados por las activaciones anteriores de disparadores INSTEAD OF
en el mismo comando externo.
Cuando se activa un disparador AFTER a nivel de fila, todos los cambios de
datos realizados por el comando externo ya están completos y son visibles para la función del
disparador invocada.
Si tu función del disparador está escrita en cualquiera de los lenguajes procedimentales estándar,
las declaraciones anteriores se aplican sólo si la función se declara VOLATILE.
Las funciones declaradas STABLE o IMMUTABLE no verán los cambios
realizados por el comando invocador en ningún caso.
Se puede encontrar más información sobre las reglas de visibilidad de datos en Section 45.5. El ejemplo en Section 37.4 contiene una demostración de estas reglas.