triggers

11
TRIGGERS Activadores Disparadores

Upload: bdatos

Post on 16-Apr-2017

9.981 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Triggers

TRIGGERS

ActivadoresDisparadores

Page 2: Triggers

Implementación de integridad definida por el usuarioy/o reglas de negocio

Restricciones y reglas de integridad

Activadores (Triggers)Para definir reglas sobre eventos sobre una tabla.Se activan automáticamente al ocurrir el evento (INSERT, UPDATE o DELETE) sobre la tabla y ejecuta acciones definidas en caso de cumplirse las condiciones especificadas.

Procedimientos AlmacenadosPara definir reglas (lógica) sobre eventos en general. Se ejecutan desde aplicaciones o al ser invocados por un usuario de la base de datos.

Page 3: Triggers

Activadores (triggers)Integridad definida por el usuario

Se activan automáticamente al ocurrir el evento (INSERT, UPDATE o DELETE) sobre la tabla y ejecuta acciones definidas en caso de cumplirse las condiciones especificadas.

Usos :

Validación de datos: mayor flexibilidad que restricción CHECK.

Condicionar la actualización de la base de datos : activándose antes (BEFORE) de actualizar la BD, se evita innecesarios bloqueo de recursos y posibles recuperaciones al estado anterior de una transaccion (ROLLBACK).

Integridad entre diversas tablas : mayor flexibilidad que restricciones/reglas de integridad referencial pues no es necesario la existencia de llaves foráneas (recuérdese que las relaciones en un esquema relacional se definen a traves de los valores de los datos).

Page 4: Triggers

Activadores (triggers) DB2Integridad definida por el usuario

>>-CREATE TRIGGER--activador---+-NO CASCADE BEFORE-+-------> +-AFTER-------------+ >--+-INSERT------------------------------+-ON--tabla----> +-DELETE------------------------------+ +-UPDATE--+-------------------------+-+ | +-----,-----------+ | | V | | +-OF----------columna--+--+

>--+---------------------------------------------------------+-> | +--------------------------------------+ | | V +-AS-+ | | +-REFERENCING------+-OLD-+----+--nombre-correlación---++--+ | +-AS-+ | +-NEW-+----+--nombre-correlación----+ | +-AS-+ | +-OLD_TABLE-+----+--identificador---+ | +-AS-+ | +-NEW_TABLE-+----+--identificador---+

>--+-FOR EACH ROW--------+--MODE DB2SQL---| acción-activada |-->< | | +-FOR EACH STATEMENT--+

Page 5: Triggers

acción-activada |--+---------------------------------+--------------------------> +-WHEN--(--condición-búsqueda--)--+ >--+-sentencia-SQL-activada-----------------------------+------| | +----------------------------+ | | V | | +-BEGIN ATOMIC----sentencia-SQL-activada--;--+--END--+

Activadores (triggers)Integridad definida por el usuario

Page 6: Triggers

Activadores (triggers)Integridad definida por el usuario

Integridad entre la tabla PERSONA y la tabla CARGO :

Restricción definida:

No debe permitirse la actualización del dato bonificación (en PERSONA) si el valor que se pretende asignarle excede el porcentaje máximo sobre su sueldo definido para el cargo ocupado (en CARGO) por la persona.

Page 7: Triggers

Activadores (triggers)Integridad definida por el usuario

Page 8: Triggers

Activadores (triggers)Integridad definida por el usuario

Page 9: Triggers

Activadores (triggers)Integridad definida por el usuario

Page 10: Triggers

¿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 las bases de datos creadas con este manejador.

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 UPDATE en una tabla de clientes, para guardar los datos que se modifican de un cliente en otra base de datos que serviría de auditoria.

Page 11: Triggers

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

CREATE TRIGGER trigger_auditoria_clientes AFTER UPDATE ON clientes    FOR EACH ROW   INSERT INTO auditoria_clientes(name, anterior_seccion, usuario, modificado )   VALUES (OLD.nombre, OLD.seccion, CURRENT_USER(), NOW() ); 

Crearemos la tabla de clientes

CREATE TABLE clientes(            id int not null auto_increment,            nombre varchar(100),            seccion varchar(10),            PRIMARY KEY(id),            KEY(nombre)) ENGINE = InnoDB;

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;