Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/12/2010, 17:52
Anthony87
 
Fecha de Ingreso: agosto-2010
Mensajes: 8
Antigüedad: 13 años, 8 meses
Puntos: 0
Mysql triggers

Hola como estan, tengo una consulta, espero que me puedan ayudar

Estoy creando unos triggers para la auditoria de tablas en MYSQL…

E creado 3 TRIGGER para cada evento (insert, delete, update) , aquí guardo lo que ocurre en mi tabla (ejm.): clientes

Mi consulta es:

Tengo 5 tablas en mi BD, necesitó crear 3 triggers tablas auditoras(insert, update, delete) por cada tabla que tenga???

5 tablas es un ejemplo ya que mi BD tiene 60 tablas, lo que evito es crear 3 tablas más por cada tabla maestra que tengo… es decir 180 tablas….

He pensado en crear un trigger general por cada evento (trigger-general-insert, trigger-general-delete, trigger-general-update) y filtrar los resultados con un combobox en mi app.

Nota: las estructuras de las 60 tablas son diferentes.

Este es mi código por cada evento que tengo: con esto me parece que tendría que crear las 180 tablas que les mencione arriba.

CASO 1:
CREATE TRIGGER trigger_auditoria_clientes_insert AFTER INSERT ON clientes
FOR EACH ROW
INSERT INTO auditoria_clientes_insert(nombre, anterior_seccion, usuario, modificado )
VALUES (OLD.nombre, OLD.seccion, CURRENT_USER(), NOW() );


CREATE TRIGGER trigger_auditoria_clientes_update AFTER UPDATE ON clientes
FOR EACH ROW
INSERT INTO auditoria_clientes(name, anterior_seccion, usuario, modificado )
VALUES (OLD.nombre, OLD.seccion, CURRENT_USER(), NOW() );


Para evitar esto, se me ocurrió implementar un script más o menos así: esto por app

CASO 2:
CREATE TRIGGER trigger_auditoria_clientes_insert
if($tabla==clientes ) {
AFTER INSERT ON clients
FOR EACH ROW
INSERT INTO auditoria_total_insert(nombre, anterior_seccion, usuario, modificado )
VALUES (OLD.nombre, OLD.seccion, CURRENT_USER(), NOW() );
}
Else
if($tabla==jobs )
AFTER INSERT ON jobs FOR EACH ROW
INSERT INTO auditoria_total_insert(job, description, usuario, modificado )
VALUES (OLD. job, OLD. description, CURRENT_USER(), NOW() );


La estructura de mis tablas son diferentes, en mi INSERT e colocado como ejemplo campos referenciales de las tablas maestras.

Entonces en mi condicional yo pregunto si el tipo de tabla es jobs o cliente, para cambiar mi insert, update, delete

Se puede???, no se puede???, de qué forma se puede???, está bien mi sintaxis???, esta mal mi sintaxis pero se puede???

CASO 1 ya probé con éxito, pero lo que evito es crear 3 triggers por cada tabla.

Espero que me puedan ayudar :)

Saludos
Anthony G.