|
Una de las principales caractergsticas que han sido incorporadas en la versión 5.0 de MySQL es algo llamado "Triggers". Los triggers son objetos relacionados a tablas que son ejecutados o mostrados cuando sucede algún evento en contra de sus tablas asociadas. Estos eventos son aquellas sentencias (INSERT, DELETE, UPDATE) que modifican los datos dentro de la tabla a la que está asociado el trigger y pueden ser disparados antes (BEFORE) y/o después (AFTER) de que la fila es modificada.
Los triggers son muy parecidos a los procedimientos almacenados, de tal forma que si deseamos ejecutar múltiples acciones cuando un trigger es disparado, podemos encapsular estas acciones dentro de una construcción BEGIN, END. Los triggers tienen un par de palabras clave extra - OLD y NEW - las cuales se refieren respectivamente a los valores de las columnas antes y después de que la sentencia fue procesada. Las sentencias INSERT únicamente permiten NEW, las sentencias UPDATE permiten ambos, NEW y OLD, y las sentencias DELETE permiten sólo OLD. La razón para esto debe ser obvia.
Después de dar esta explicación brever acerca de los triggers, la pregunta sería ¿Qué es lo que los triggers pueden hacer por mi?, ¿Para qué nos sirven?. Pues bien, a continuación vamos a mostrar algunos escenarios comunes en los cuales los triggers pueden ser de utilidad.
Una de las preguntas más frecuentes es ¿Cómo puedo saber quién cambió o eliminó una fila? ... Con un trabajo exhaustivo de auditoría sobre la base de datos, o gastando una buena cantidad de tiempo examinando los archivos de registro de MySQL para ver cuando se ejecutó dicha sentencia.
Podemos asignar un trigger a una tabla que se dispare después (AFTER) de una sentencia DELETE o UPDATE, que guarde los valores del registro, así como alguna otra información de utilidad en una tabla de log.
Vamos a examinar un caso práctico, procedemos a ejecutar las siguientes sentencias:
CREATE TABLE clientes(
id int not null auto_increment,
nombre varchar(100),
ejecutivo_cuenta varchar(10),
PRIMARY KEY(id),
KEY(nombre)
) ENGINE = InnoDB;
INSERT INTO clientes (nombre, ejecutivo_cuenta) VALUES
('Fredericks','Jaime'),
('Walmart','Mario'),
('Radioshack','Mario'),
('Acme','Juan'),
('Smallco','Jaime');
|