Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Activadores
Disparadores
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).
Activadores (triggers)
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.
Activadores (triggers)
Activadores (triggers)
Activadores (triggers)
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.
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() );