Está en la página 1de 11

TRIGGERS

Activadores
Disparadores

Restricciones y reglas de integridad

Implementacin de integridad definida por el usuario y/o reglas de negocio


Activadores (Triggers) Para definir reglas sobre eventos sobre una tabla. Se activan automticamente al ocurrir el evento (INSERT, UPDATE o DELETE) sobre la tabla y ejecuta acciones definidas en caso de cumplirse las condiciones especificadas. Procedimientos Almacenados Para definir reglas (lgica) sobre eventos en general. Se ejecutan desde aplicaciones o al ser invocados por un usuario de la base de datos.

Integridad definida por el usuario

Activadores (triggers)
Se activan automticamente al ocurrir el evento (INSERT, UPDATE o DELETE) sobre la tabla y ejecuta acciones definidas en caso de cumplirse las condiciones especificadas. Usos : Validacin de datos: mayor flexibilidad que restriccin CHECK. Condicionar la actualizacin de la base de datos : activndose 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 forneas (recurdese que las relaciones en un esquema relacional se definen a traves de los valores de los datos).

Integridad definida por el usuario

Activadores (triggers) DB2


>>-CREATE TRIGGER--activador---+-NO CASCADE BEFORE-+-------> +-AFTER-------------+ >--+-INSERT------------------------------+-ON--tabla----> +-DELETE------------------------------+ +-UPDATE--+-------------------------+-+ | +-----,-----------+ | | V | | +-OF----------columna--+--+ >--+---------------------------------------------------------+-> | +--------------------------------------+ | | V +-AS-+ | | +-REFERENCING------+-OLD-+----+--nombre-correlacin---++--+ | +-AS-+ | +-NEW-+----+--nombre-correlacin----+ | +-AS-+ | +-OLD_TABLE-+----+--identificador---+ | +-AS-+ | +-NEW_TABLE-+----+--identificador---+ >--+-FOR EACH ROW--------+--MODE DB2SQL---| accin-activada |-->< | | +-FOR EACH STATEMENT--+

Integridad definida por el usuario

Activadores (triggers)

accin-activada |--+---------------------------------+--------------------------> +-WHEN--(--condicin-bsqueda--)--+ >--+-sentencia-SQL-activada-----------------------------+------| | +----------------------------+ | | V | | +-BEGIN ATOMIC----sentencia-SQL-activada--;--+--END--+

Integridad definida por el usuario

Activadores (triggers)
Integridad entre la tabla PERSONA y la tabla CARGO : Restriccin definida:

No debe permitirse la actualizacin del dato bonificacin (en PERSONA) si el valor que se pretende asignarle excede el porcentaje mximo sobre su sueldo definido para el cargo ocupado (en CARGO) por la persona.

Integridad definida por el usuario

Activadores (triggers)

Integridad definida por el usuario

Activadores (triggers)

Integridad definida por el usuario

Activadores (triggers)

Que son los Triggers y como usarlos en MySQL 5.0?


Desde la salida de la versin 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 despus (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 despus de la modificacin. Los INSERT permiten NEW, los DELETE slo 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 servira de auditoria.

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;

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

También podría gustarte