Triggers BD
Triggers BD
Triggers BD
Ing. Biomédica
Práctica SQL
Base de Datos
Alumnos:
Juárez Castro Flavio Alfonso (183126)
Palacios Flores Alejandra (183143)
6to “A”
23 de junio de 2020
OBJETIVO GENERAL
Conocer que es y cómo funciona un Trigger en MaríaDB.
OBJETIVOS ESPECÍFICOS
▪ Aprender qué es un trigger y dominar su sintaxis.
▪ Aplicar la teoría aprendida con la implementación de triggers en el aula de clase.
INTRODUCCIÓN
Además de los bloques PL/SQL anónimos utilizados por SQL*PLus o por las herramientas
de desarrollo, se puede emplear código PL/SQL en determinados objetos de la base de datos,
como los procedimientos almacenados (PROCEDURE, FUNCTION, PACKAGE) y los
disparadores (TRIGGER) de la base de datos.
Un disparador define una acción que la base de datos debe llevar a cabo cuando se produce
algún suceso relacionado con la misma. Los disparadores (triggers) pueden utilizarse para
completar la integridad referencial, también para imponer reglas de negocio complejas o para
auditar cambios en los datos. El código contenido en un disparador, denominado cuerpo del
disparador, está formado por bloques PL/SQL. La ejecución de disparadores es transparente
al usuario.
En definitiva, los disparadores son eventos a nivel de tabla que se ejecutan automáticamente
cuando se realizan ciertas operaciones sobre la tabla.
En la siguiente investigación se desea mostrar la definición y aplicación de un programa
almacenado en la base de datos de MaríaDB, con el fin de facilitar el uso en diversas áreas.
¿QUÉ ES UN TRIGGER?
Los triggers o disparadores de MySQL son usa serie de reglas predefinidas que están
asociadas a una tabla. Estas reglas permiten la ejecución de una serie de instrucciones cuando
se producen ciertos eventos como pueden ser la inserción de un nuevo registro, la
actualización o el borrado de los datos de una tabla.
CARACTERÍSTICAS
Son usados para mejorar la administración de la Base de datos, sin necesidad de
contar con que el usuario ejecute la sentencia de SQL.
Además, pueden generar valores de columnas, previene errores de datos, sincroniza
tablas, modifica valores de una vista, etc.
Permite implementar programas basados en paradigma lógico (sistemas expertos,
deducción).
Los disparadores son soportados en MySQL a partir de la versión 5.0.2. Algunos de
los soportes existentes son los disparadores para las sentencias INSERT, UPDATE y
DELETE
La entrada en vigor automática de restricciones de los datos, hace que los usuarios
entren sólo valores válidos.
El mantenimiento de la aplicación se reduce, los cambios a un disparador se reflejan
automáticamente en todas las aplicaciones que tienen que ver con la tabla sin la
necesidad de recompilar o enlazar.
Logs automáticos de cambios a las tablas. Una aplicación puede guardar un registro
corriente de cambios, creando un disparador que se active siempre que una tabla se
modifique.
La notificación automática 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.
Desventajas:
SINTAXIS DE UN TRIGGER
Usamos la siguiente sintaxis:
CREATE [DEFINER={usuario|CURRENT_USER}]
TRIGGER nombre_del_trigger {BEFORE|AFTER} {UPDATE|INSERT|DELETE}
ON nombre_de_la_tabla
FOR EACH ROW
<bloque_de_instrucciones>
Obviamente la sentencia CREATE es conocida para crear nuevos objetos en la base de datos.
Explicación de las partes de la definición:
▪ DEFINER={usuario|CURRENT_USER}: Indica al gestor de bases de datos qué
usuario tiene privilegios en su cuenta, para la invocación de los triggers cuando surjan
los eventos DML. Por defecto esta característica tiene el valor CURRENT_USER
que hace referencia al usuario actual que está creando el Trigger.
▪ nombre_del_trigger: Indica el nombre del trigger. Por defecto existe una
nomenclatura práctica 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_intrucciones> : Define el bloque de sentencias que el Trigger ejecuta
al ser invocado.
A continuación, veremos un Trigger que valida la edad de un cliente antes de una sentencia
UPDATE. Si por casualidad el nuevo valor es negativo, entonces asignaremos NULL a este
atributo.
: DELIMITER //3
CREATE TRIGGER cliente_BU_Trigger
BEFORE UPDATE ON cliente FOR EACH ROW
BEGIN
-- La edad es negativa?
IF NEW.edad<0 THEN
SET NEW.edad = NULL;
END IF;
END// DELIMITER;
Este Trigger se ejecuta antes de haber insertado el registro, lo que nos da el poder de
verificar primero si el nuevo valor de la edad está en el rango apropiado, si no es así
entonces asignaremos NULL a ese campo. ¡Grandes los Triggers!
Supongamos que tenemos una Tienda de accesorios para Gamers. Para la actividad de
nuestro negocio hemos creado un sistema de facturación muy sencillo, que registra las ventas
realizadas dentro de una factura que contiene el detalle de las compras. Nuestra tienda tiene
4 vendedores de turno, los cuales se encargan de registrar las compras de los clientes en el
horario de funcionamiento. Implementaremos un Trigger que guarde los cambios realizados
sobre la tabla DETALLE_FACTURA de la base de datos realizados por los vendedores.
DELIMITER //
CREATE TRIGGER detalle_factura_AU_Trigger
AFTER UPDATE ON detalle_factura FOR EACH ROW
BEGIN
INSERT INTO log_updates
(idusuario, descripcion)
VALUES (user( ),
CONCAT('Se modificó el registro ','(',
OLD.iddetalle,',', OLD.idfactura,',',OLD.idproducto,',',
OLD.precio,',', OLD.unidades,') por ',
'(', NEW.iddetalle,',', NEW.idfactura,',',NEW.idproducto,',',
NEW.precio,',', NEW.unidades,')'));
END//
DELIMITER ;
Con este registro de logs podremos saber si algún vendedor “ocioso” está alterando las
facturas, lo que lógicamente sería atentar contra las finanzas de nuestro negocio. Cada
registro nos informa el usuario que modificó la tabla DETALLE_FACTURA y muestra una
descripción sobre los cambios en cada columna.
El siguiente ejemplo que te voy a mostrar ¡me encanta!, ya que muestra cómo mantener la
integridad de una base de datos con respecto a un atributo derivado.
Supón que tienes una Tienda de electrodomésticos y que has implementado un sistema de
facturación. En la base de datos que soporta la información de tu negocio, existen varias
tablas, pero nos vamos a centrar en la tabla PEDIDO y la tabla TOTAL_VENTAS.
TOTAL_VENTAS almacena las ventas totales que se le han hecho a cada cliente del negocio.
Es decir, si el cliente Armado Barreras en una ocasión compró 1000 dólares, luego compró
1250 dólares y hace poco ha vuelto a comprar 2000 dólares, entonces el total vendido a este
cliente es de 4250 dólares. Pero supongamos que eliminamos el ultimo pedido hecho por este
cliente, ¿qué pasaría con el registro en TOTAL_VENTAS ?,exacto!, quedaría
desactualizado. Usaremos tres Triggers para solucionar esta situación. Para que cada vez que
usemos un comando DML en la tabla PEDIDO, no tengamos que preocuparnos por actualizar
manualmente TOTAL_VENTAS.
Eliminar un Trigger
Como ya sabes usamos este comando para eliminar casi cualquier cosa en nuestra base de
datos: DROP TRIGGER [IF EXISTS] nombre_trigger
Recuerda que podemos adicionar la condicion IF EXISTS para indica que si el Trigger ya
existe, entonces que lo borre.
TIPOS DE TRIGGER
Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a
realizar:
Row Triggers (o disparadores de fila): son aquellos que se ejecutaran n veces si se
llaman n-veces desde la tabla asociada al trigger.
Statement Triggers (o disparadores de secuencia): son aquellos que sin importar la
cantidad de veces que se cumpla con la condición, su ejecución es única.
CONCLUSIÓN