Inicio rápido con triggers en mysql 5

Solo disponible en BuenasTareas
  • Páginas : 5 (1249 palabras )
  • Descarga(s) : 0
  • Publicado : 19 de abril de 2010
Leer documento completo
Vista previa del texto
Inicio rápido con triggers en MySQL 5.0
A través de algunos ejemplos y situaciones se da una breve introducción al uso de Triggers en MySQL.

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 tablasasociadas. 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, podemosencapsular 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ónpara 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');
Ahora tenemos una tabla clientes que guarda la información de clientes y el ejecutivo de cuenta asignado. Cualquiera sabe que la gente de ventas son seres capaces de hacer cualquier cosa por sus intereses y nosotros como administradores de base de datos estamos hartos de las llamadas continuas del departamento de ventas para preguntarnos "QUIEN CAMBIÓ EL EJECUTIVO DE CUENTA DEESTA COMPAÑIA" !?, y por supuesto involucrarnos en la tarea de descubrir quién cambió los datos.

Es momento de emplear un trigger que venga a nuestro rescate!. Lo primero es crear una tabla simple de log/auditorga:
CREATE TABLE auditoria_clientes
(
id int not null auto_increment,
nombre varchar(100),
anterior_ejecutivo_cuenta varchar(10),
usuario varchar(40),
cambiadodatetime,
primary key(id)
) ENGINE = InnoDB;
Y ahora crearemos un trigger que vaya llenando los registros de esta tabla cada vez que alguién ejecute una actualización sobre la tabla. Para crear triggers utilizamos la sentencia CREATE TRIGGER:
CREATE TRIGGER trigger_auditoria_clientes AFTER UPDATE ON clientes
FOR EACH ROW
BEGIN
INSERT INTO auditoria_clientes(nombre,anterior_ejecutivo_cuenta, usuario, cambiado)
VALUES (OLD.nombre, OLD.ejecutivo_cuenta, CURRENT_USER(), NOW() );
END;

Nota: Para los ejemplos presentados se usará la versión 5.0 más reciente al momento de escribir este artículo, en concreto, la 5.0.10.

Veamos que sucede cuando alguno de los usuarios cambia un registro de la tabla clientes. Por ejemplo, si de una manera "tramposa" Mario quiere...
tracking img