Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/02/2009, 18:19
The_Clansman
 
Fecha de Ingreso: febrero-2009
Mensajes: 36
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Necesito un triggers para auditar???

compañero!! de ejemplos de auditoria hay muchos en internet!! cuando investigue de triggers solo eso me salia en san google!! jejeje pero como
estamos para ayudar! te mando un ejemplo algo parecido a lo q necesitas
claro, es un copy paste q saque de la pagina para analizar los triggers!! al final
el nombre del autor del codigo!!

Desde la salida de la versión 5 de MySql se pueden usar triggers en nuestras bases de datos.

Peró, ¿qué son los triggers?, son objetos relacionados con tablas y almacenados en la base dedatos que se ejecutan o se muestran cuando sucede algún evento sobre sus tablas asociadas.

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 DELETE en una tabla de clientes, para impedir que se elimine uno que tenga un saldo distinto de cero. Otro trigger seria guardar los datos que se modifican de un cliente en otra base de datos que serviria de auditoria.

Crearemos la tabla de clientes y le ponemos algunos registros:

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

INSERT INTO clientes (nombre, seccion) VALUES
('Miguel','informatica'),
('Rosa','comida'),
('Maria','ropa'),
('Albert','informatica'),
('Jordi','comida');

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

Autor:Xavier Bernadí i Millan