0% encontró este documento útil (0 votos)
94 vistas11 páginas

Tema 10 Triggers

Descargar como pdf o txt
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 11

BASE DE DATOS

Desde la aparición de la versión 5.0.3 de la base de datos MySQL, se ha


implementado la posibilidad de desarrollar triggers para las tablas de una base de
datos. Recordar que un trigger es un objeto asociado a una tabla que es ejecutado
cuando sucede un evento en la tabla propietaria. Son aquellas sentencias (INSERT,
UPDATE, DELETE) que modifican los datos dentro de una tabla. Sólo puede haber un
trigger de cada insert, update y delete por tabla o vista.
Pero los triggers Menen una ventaja obvia. Es código que se ejecuta en el servidor de
la base de datos, y no en la máquina cliente.
Un Trigger o Disparador es un programa almacenado(stored programo SP), creado
para ejecutarse automáMcamente cuando ocurra un evento en una tabla o vista de la
base de datos. Dichos eventos son generados por los comandos INSERT, UPDATE y
DELETE, los cuales forman parte del DM2 (Data Modeling Language) de SQL.
Un Disparador nunca se llama directamente, en cambio, cuando una aplicación o
usuario intenta insertar, actualizar, o anular una fila en una tabla, la acción definida
en el disparador se ejecuta automáMcamente (se dispara).

MA. DE LOURDES SOTO CORTÉS 1


BASE DE DATOS

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

seguridad de la base de datos que ya existe. Por ejemplo, los disparadores se


pueden usar para verificar una fecha antes de autorizar un cambio o para permiMr
que solo ciertas personas creen pedidos superiores a $ 1,000. Aunque las
eliminaciones en cascada son parte de la integridad referencial a parMr de la
versión 6.0 de los servidores de bases de datos, las versiones anteriores del
servidor de bases de datos pueden usar disparadores para realizar la misma
función.
• Los disparadores se pueden usar para replicar los cambios en una tabla
automáMcamente. Los procedimientos almacenados se uMlizan con frecuencia
junto con disparadores para implementar algunos de los anteriores.

MA. DE LOURDE SSOTO CORTÉS 2


BASE DE DATOS

Las ventajas de los triggers son varias:


1. La entrada en vigor automáMca de restricciones de los datos, hace que los
usuarios entren sólo valores válidos.
2. El mantenimiento de la aplicación se reduce, los cambios a un disparador se
refleja automáMcamente en todas las aplicaciones que Menen que ver con la tabla
sin la necesidad de recompilar o enlazar.
3. Logs automáMcos de cambios a las tablas. Una aplicación puede guardar un
registro corriente de cambios, creando un disparador que se acMve siempre que
una tabla se modifique.
4. La noMficación automáMca de cambios a la Base de Datos con alertas de evento
en los disparadores.
Decimos que los Triggers se invocan para ejecutar un conjunto de instrucciones que
protejan, restrinjan, actualicen o preparen la información de las tablas, al momento
de manipular la información. Para crear triggers son necesarios los privilegios SUPER
y TRIGGER.

MA. DE LOURDES SOTO CORTÉS 3


BASE DE DATOS

CREATE es conocida para crear nuevos objetos en la base de datos y es forzosa.

• DEFINER={usuario|CURRENT_USER}: Indica al manejador de bases de datos qué


usuario Mene privilegios en su cuenta, para la invocación de los triggers cuando surjan
los eventos de sentencias de Mpo DML. Por defecto esta caracterísMca Mene el valor
CURRENT_USER que hace referencia al usuario actual que esta creando el Trigger.

• nombre_del_trigger: Indica el nombre del trigger. Por defecto existe una


nomenclatura prácMca para nombrar un trigger, la cual da mejor legibilidad en la
administración de la base de datos. Primero, escriba el nombre de tabla, luego
especifique con la inicial de la operación DML y seguido usamos la inicial del
momento de ejecución (AFTER o BEFORE). Por ejemplo:
-- BEFORE INSERT clientes_BI_TRIGGER

BEFORE|AFTER: Especifica si el Trigger se ejecuta antes o después del evento DML.

UPDATE|INSERT|DELETE: Aquí ́ elija que sentencia usa para que se ejecute el Trigger.

ON nombre_de_la_tabla: En esta sección establece el nombre de la tabla asociada.

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.

MA. DE LOURDES SOTO CORTÉS 4


BASE DE DATOS

Las acciones de acMvación se ejecutan en los siguientes momentos:


• BEFORE. Antes de que ocurra el evento desencadenante: se ejecuta la lista de
acciones BEFORE antes de que se ejecute el evento. Incluso si el evento
desencadenante no procesa registros, las acciones ANTES aún se ejecutan.
• FOR EACH ROW. Después de que el evento desencadenante procese cada registro:
la acción FOR EACH ROW se produce una vez después de que el evento procese
cada registro.
• AFTER Después de que se complete el evento desencadenante: se ejecuta la lista
de acciones AFTER se acMva una vez que se ejecuta el evento. Si la instrucción
desencadenante no procesa ningún registro, la lista de acciones AFTER acMvada
aún así se ejecuta. Los disparadores son reentrantes; tanto el evento acMvado
como la acción acMvada pueden operar en la misma tabla. Sin embargo, una acción
desencadenada no puede ser una instrucción UPDATE que haga referencia a una
columna que fue actualizada por el evento.

MA. DE LOURDES SOTO CORTÉS 5


BASE DE DATOS

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.

Por ejemplo: OLD.idproducto o NEW.idproducto.


Si usa la sentencia UPDATE se refiere a un valor OLD y NEW, ya que modifica registros
existentes por los valores. En cambio, si usa INSERT solo usa NEW, ya que su
naturaleza es únicamente de insertar nuevos valores a las columnas. Y con DELETE
usa OLD debido a que borra valores existentes.

MA. DE LOURDES SOTO CORTÉS 6


BASE DE DATOS

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).

MA. DE LOURDES SOTO CORTÉS 7


BASE DE DATOS

Ejecutar un disparador puede hacer que se ejecute otro disparador, como se muestra
en el ejemplo anterior.

Eliminar un registro de clientes hace que se ejecute el trigger clientes_FD_trigger. El


clientes_FD_trigger elimina un registro de la tabla de ordenes, que a su vez acMva el
ordenes_FD_trigger. Cuando estos triggers se completen, las instrucciones DELETE se
habrían ejecutado en este orden:
• BORRAR clientes
• BORRAR ordenes
• BORRAR arZculos

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.

MA. DE LOURDES SOTO CORTÉS 8


BASE DE DATOS

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.

MA. DE LOURDES SOTO CORTÉS 9


BASE DE DATOS

Los triggers o disparadores se almacenan en la tabla TRIGGERS del catálogo del


sistema informaMon_schema, para verlos ejecute:
select * from informaMon_schema.triggers;

Una vez que estos son eliminados el código es borrado de la tabla triggers.

MA. DE LOURDES SOTO CORTÉS 10

También podría gustarte