Tema 10 Triggers
Tema 10 Triggers
Tema 10 Triggers
Los disparadores pueden restringir cómo se manipulan los datos en una base de
datos.
Un DBA puede garanMzar que los datos se traten de manera coherente en todas las
herramientas y programas de aplicación.
• Reglas del negocio: el término reglas comerciales se refiere a la forma en que una
empresa usa los datos. Los desencadenadores y / o procedimientos almacenados
se pueden uMlizar para hacer cumplir las reglas comerciales de los datos dentro de
una base de datos. Un ejemplo de una regla comercial puede ser: Si el inventario
de un arZculo alcanza un cierto nivel, realice automáMcamente un pedido para
reponer el arZculo.
• Valores derivados: en algunos casos, puede ser necesario almacenar un valor
derivado, como el saldo de una cuenta, en una base de datos. El uso de
disparadores para hacer esto obligará al valor derivado a sincronizarse con los
valores de los que se deriva.
• Rastros de auditoría: una organización puede tener la necesidad de registrar
ciertas transacciones en una tabla de auditoría. Los acMvadores asegurarán que
todas las transacciones especificadas se registren. Por ejemplo, si se cambia el
salario de un empleado, se puede agregar un registro de auditoría a la tabla de
auditoría, especificando el cambio realizado y el inicio de sesión de la persona que
realizó el cambio.
• Autorización de seguridad: los disparadores se pueden usar para aumentar la
2
MA. DE LOURDES SOTO CORTÉS
BASE DE DATOS
UPDATE|INSERT|DELETE: Aquí ́ elija que sentencia usa para que se ejecute el Trigger.
FOR EACH ROW: Establece que el Trigger se ejecute por cada fila en la tabla asociada.
<bloque_de_instrucciones>: Define el bloque de sentencias que el Trigger ejecuta al
ser invocado.
Si requiere relacionar el trigger con columnas especificas de una tabla debemos usar
los idenMficadores OLD y NEW.
OLD indica el valor anMguo de la columna y NEW el valor nuevo que pudiese tomar.
Al uMlizar BEGIN ... END, puede definir un Mrgger que ejecute varias instrucciones.
Dentro del bloque BEGIN, también puede usar otra sintaxis permiMda dentro de las
ruMnas almacenadas, como los condicionales y los ciclos. Sin embargo, al igual que
para los procedimientos almacenados, se define un trigger que ejecuta múlMples
declaraciones, es necesario redefinir el delimitador de declaración mysql para que
pueda usar el; delimitador de sentencias dentro de la definición del trigger. El
ejemplo dentro del slide ilustra estos puntos. Define un trigger para ACTUALIZAR, el
cual verifica el nuevo valor que se uMlizará para realizar el update de cada registro, y
modifica el valor para que esté dentro del rango de 0 a 100. Este debe ser un trigger
ANTES porque el valor debe verificarse antes de usarse para actualizar el registro.
Puede ser más fácil definir un procedimiento almacenado por separado y luego
invocarlo desde el trigger uMlizando una simple instrucción CALL. Esto también es
ventajoso si desea ejecutar el mismo código desde varios disparadores. Existen
limitaciones sobre lo que puede aparecer en las declaraciones que un trigger ejecuta
cuando se acMva: El trigger no puede usar la instrucción CALL para invocar
procedimientos almacenados que devuelven datos al usuario o que usan SQL
dinámico. (Los procedimientos almacenados pueden devolver datos al trigger a través
de los parámetros OUT o INOUT).
El trigger no puede usar declaraciones que comiencen o finalicen explícita o
implícitamente una transacción, como START TRANSACTION, COMMIT o ROLLBACK.
(ROLLBACK to SAVEPOINT está permiMdo porque no finaliza una transacción).
Ejecutar un disparador puede hacer que se ejecute otro disparador, como se muestra
en el ejemplo anterior.
Esta técnica se usaba con frecuencia antes de que las eliminaciones en cascada se
convirMeran en una caracterísMca de la instrucción CREATE TABLE. Las eliminaciones
en cascada permiten definir una restricción referencial en la que el servidor de bases
de datos eliminará automáMcamente los registros de llaves secundarias cuando se
elimine un registro con la llave primaria.
Los constraints están en una especia de modo espera a que toda la operación del
trigger termine (tanto evento como acción) y hasta que ambas se han procesado se
validan los constraints, si alguno falla, todo el trigger se deshace, tanto evento como
acción.
Una vez que estos son eliminados el código es borrado de la tabla triggers.