Triggers Procedimientos Almacenados

Anuncio
INSTITUTO DE EDUCACION TECNICA PROFESIONAL INTEP
Triggers y procedimientos almacenados
Triggers
Un Triggers o disparador es una rutina autónoma
asociada con una tabla o vista que automáticamente
realiza una acción cuando una fila en la tabla o la vista
se inserta (INSERT), se actualiza (UPDATE), o borra
(DELETE).
Un Trigger 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áticamente
(se dispara).
Las ventajas de usar los Triggers son:
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 triggers se refleja
automáticamente en todas las aplicaciones
que tienen que ver con la tabla sin la
necesidad de recompilar o relinquear.
Logs automáticos de cambios a las tablas.
Una aplicación puede guardar un registro
corriente de cambios, creando un trigger que
se dispare siempre que una tabla se
modifique.
La notificación automática de cambios a la
Base de Datos con alertas de evento en los
triggers.
Procedimientos Almacenados
Un Procedimiento Almacenado es un programa autocontrolado escrito en lenguaje del DBMS, son almacenados
como parte de la Base de Datos y sus metadatos.
Las ventajas de usar los procedimientos almacenados incluyen:
Diseño modular.
Aplicaciones que acceden la misma Base de Datos pueden
compartir los procedimientos almacenados, eliminando el
código doble y reduciendo el tamaño de las aplicaciones.
Una vez creado un procedimiento
almacenado, se puede invocar
directamente desde una aplicación, o
sustituir el nombre de una tabla o
vista, por el nombre de
procedimiento en cláusulas SELECT.
Los procedimientos almacenados
pueden recibir parámetros de
entrada y retornar valores a la
aplicación.
El fácil mantenimiento.
Cuando un procedimiento se actualiza, los cambios se
reflejan automáticamente en todas las aplicaciones, sin la
necesidad de recompilar y relinkear. Las aplicaciones son
compiladas sólo una vez para cada cliente.
Los procedimientos almacenados son ejecutados por el
servidor, no por el cliente lo que reduce el tráfico en la red y
mejora el performance o desempeño, especialmente para el
acceso del cliente remoto.
Están almacenados en los servidores y asegurados por las
medidas tomadas en la instalación, lo que impide que los
usuarios normales puedan modificarlos e incluso desconocen
su existencia. Este es un elemento de gran valor en lo que a
seguridad respecta.
Docente: Ing. Ana Milena Bueno Henao. Bases de Datos II
INSTITUTO DE EDUCACION TECNICA PROFESIONAL INTEP
Triggers y procedimientos almacenados
Como se puede apreciar los Sistemas de Bases de Datos ofrecen a desarrolladores, administradores y usuarios
una gama muy completa de herramientas que permiten garantizar la integridad, consistencia, confidencialidad
y en general seguridad de la información almacenada y con un elemento muy importante a favor: Las líneas de
código que se requieren por parte del implementador son muy pocas, en ocasiones solo basta con una sencilla
sentencia para obligar al DBMS a controlar y mantener las restricciones necesarias.
¿Que son los Triggers y como usarlos en MySQL 5.0?
Desde la salida de la versión 5 de MySql se pueden usar triggers en nuestras bases
de datos.
Pero, ¿qué son los triggers?, son objetos relacionados con tablas y almacenados en
la base de datos que se ejecutan o se muestran cuando sucede algún evento sobre
sus tablas asociadas.
Los eventos pueden ser las sentencias INSERT, DELETE, UPDATE que modifican
los datos de una tabla. Los triggeres se pueden ejecutar antes (BEFORE) y/o
después (AFTER) de que sean modificados los datos.
Los triggers tienen dos palabras clave, OLD y NEW que se refieren a los valores
que tienen las columnas antes y después de la modificación. Los INSERT permiten
NEW, los DELETE sólo OLD y los UPDATE ambas.
Un ejemplo de trigger seria uno asociado a la sentencia DELETE en una tabla de
clientes, para impedir que se elimine uno que tenga un saldo distinto de cero. Otro
trigger seria guardar los datos que se modifican de un cliente en otra base de
datos que serviría de auditoria.
Crearemos la tabla de clientes y le ponemos algunos registros:
CREATE TABLE clientes(id int not null auto_increment, nombre
varchar(100), seccion varchar(10),PRIMARY KEY(id), KEY(nombre)) ENGINE =
InnoDB;
INSERT INTO clientes (nombre, seccion) VALUES ('Miguel','informatica'),
('Rosa','comida'), ('Maria','ropa'), ('Albert','informatica'), ('Jordi','comida');
Y una tabla que será la que guardará los datos de la "auditoria"
CREATE TABLE auditoria_clientes (id int not null auto_increment, nombre
varchar(100), anterior_seccion varchar(10), usuario varchar(40), modificado
datetime, primary key(id)) ENGINE = InnoDB;
y finalmente un trigger que se disparará cada vez que alguien modifique un dato
de la tabla clientes y lo guardará en una tabla junto al nombre del usuario y la
Docente: Ing. Ana Milena Bueno Henao. Bases de Datos II
INSTITUTO DE EDUCACION TECNICA PROFESIONAL INTEP
Triggers y procedimientos almacenados
fecha.
CREATE TRIGGER trigger_auditoria_clientes AFTER UPDATE ON clientes FOR EACH
ROW INSERT INTO auditoria_clientes(nombre, anterior_seccion, usuario,
modificado) VALUES (OLD.nombre, OLD.seccion, CURRENT_USER(), NOW());
Otro ejemplo de trigger:
Limitaciones de los triggers.
- Solo se pueden aplicar a una tabla especifica, es decir, un trigger no sirve para
dos o más tablas
- El trigger se crea en la base de datos que de trabajo pero desde un trigger
puedes hacer referencia a otras bases de datos.
- Un Trigger devuelve resultados al programa que lo desencadena de la misma
forma que un Stored Procedure aunque no es lo más idóneo, para impedir que una
instrucción de asignación devuelva un resultado se puede utilizar la sentencia SET
NOCOUNT al principio del Trigger.
- Las siguientes instrucciones no se pueden utilizar en los triggers:
ALTER DATABASE CREATE DATABASE
DISK INIT DISK RESIZE
DROP DATABASE LOAD DATABASE
LOAD LOG RECONFIGURE
RESTORE DATABASE RESTORE LOG
Ejemplo.
Como ejemplo crearemos un Trigger que avise al webmaster con un mail cuando
un usuario se da de alta en nuestro web, para crear el trigger solo se han de
seguir los pasos arriba indicados, como muestran las imágenes y el código es el
siguiente, haciendo Copy & Paste funciona.
El funcionamiento del trigger es muy sencillo, declaramos dos variables, una para
el mensaje que se enviará en el mail y otra para obtener el ID del registro recién
insertado y luego este ID lo concatenamos al mensaje para enviárselo al
webmaster.
Docente: Ing. Ana Milena Bueno Henao. Bases de Datos II
INSTITUTO DE EDUCACION TECNICA PROFESIONAL INTEP
Triggers y procedimientos almacenados
Alter Trigger Trigger_Aviso_al_Webmaster
On dbo.pr_usuarios
For Insert
As
-- Declaramos las variables del mensaje y del ID del nuevo usuario
Declare @Mensaje varchar(200)
Declare @ID numeric
-- Obtenemos el id del usuario recien insertado
Select @ID = (Select IDUsuario From Inserted )
Select @Mensaje = 'Nuevo Usuarios en el web : ' + Convert(varchar(10), @ID)
Exec master.dbo.xp_sendmail
@recipients = 'webmaster@dominio.com',
@subject = 'Nuevo usuario',
@message = @Mensaje
Docente: Ing. Ana Milena Bueno Henao. Bases de Datos II
Descargar