Pregunta:
Fecha: 20-08-2015 12:37:06
(En Español)
Resumiendo:
"cada vez que la base de datos reconozca un insert en la tabla usuarios, hacer otro insert en la tabla bitacora"
Si necesitan que extienda la pregunta me comentan, gracias!
Saludos a todos! Votos: 0 - Respuestas: 6 - Vistas: 17 Compartir en: Google Facebook Twitter LinkedIn Link
¿Cómo puedo hacer que se ejecute un query cada vez que se realiza un INSERT en cierta tabla en MySQL?[Resuelta]
Que tal comunidad, la pregunta trata de que yo tengo una base de datos que maneja una tabla de usuarios, ahora bien yo no soy el único que ingreso usuarios en esa tabla, y yo quiero que cada vez que se ingrese un usuario (asi bien no sea yo el que lo ingreso) se realize un insert a otra tabla de bitacora de insert. Nota: yo no controlo desde donde se hace cada insert.Resumiendo:
"cada vez que la base de datos reconozca un insert en la tabla usuarios, hacer otro insert en la tabla bitacora"
Si necesitan que extienda la pregunta me comentan, gracias!
Saludos a todos! Votos: 0 - Respuestas: 6 - Vistas: 17 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 20-08-2015 14:21:27 Ok, si eso estaria bien si yo fuera el unico que pudiera insertar a esa tabla , pero como te comento hay varios programadores de distintos software que hacen insert en la misma tabla Votos: 0 - Link respuesta
-
Fecha: 20-08-2015 16:46:32 Hola Jony, eso que comentas lo puedes programar en MySQL por medio de un trigger, debes crear un trigger sobre la tabla "usuarios" para que ante un insert se realice un nuevo insert en la tabla de bitacora informando quien hizo el insert, la fecha, etc etc.
Por ejemplo, aquí te programe un código 100% funcional para que hagas tus pruebas:
-- creo la tabla "usuarios" que será auditada CREATE TABLE `usuarios` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `nombre` varchar(45) NOT NULL, `email` varchar(150) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email_UNIQUE` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- creo la tabla de auditoría (también se podría usar una bitacora, eso depende del diseño) CREATE TABLE `usuarios_auditoria` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `nuevo_usuario_id` int(10) NOT NULL, `usuario_mysql` varchar(200) NOT NULL, `fecha_evento` DATETIME NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- creo el trigger que será ejecutado cada vez que se haga un INSERT en la tabla "usuarios" (observar que cambie el delimitador de ; por // a fin de que el insert que esta definido dentro del trigger no me corte el script) DELIMITER // CREATE TRIGGER trigger_usuarios_auditoria AFTER INSERT ON usuarios FOR EACH ROW BEGIN INSERT INTO usuarios_auditoria (nuevo_usuario_id, usuario_mysql, fecha_evento) VALUES (NEW.id, CURRENT_USER(), NOW()); END // DELIMITER ; -- hago un insert en la tabla "usuarios" para verificar que mi trigger de auditoría funciona correctamente INSERT INTO `usuarios` (`nombre`,`email`) VALUES ('Fernando Mosquera', 'algo@algo.com'); -- verifico que se agrego el evento en mi tabla de auditoría SELECT * FROM usuarios_auditoria;
Espero que mi ejemplo te sea de ayuda, luego me cuentas como te fue.
Saludos,
Fernando Votos: 4 - Link respuesta -
Fecha: 21-08-2015 02:08:50 Buenos días, con respecto a la respuesta de Fernando (y le hago una pregunta, con el permiso de Jony), CURRENT_USER(), que valor trae? El usuario que está ingresando el dato o el usuario que se conectó a la bbdd?
Saludos
DIEGO Votos: 1 - Link respuesta -
Fecha: 21-08-2015 03:26:46 Hola Diego, la función de MySQL "CURRENT_USER()" devuelve el usuario y host para el cual se autentico la conexión que esta realizando la acción.
Puedes probar ejecutar algo tan simple como un select para ver su resultado:
SELECT CURRENT_USER();
Aquí el link a la documentación oficial: function CURRENT_USER()
Logicamente si todas las autenticaciones contra la base de datos se hacen con el mismo usuario no tendrás forma de discriminar que usuario hizo que....
Saludos, Votos: 1 - Link respuesta -
Fecha: 21-08-2015 07:54:58 Shhhh Nitido! me parece muy buena opcion, gracias por la ayuda, logre solucionar mi problema.
Saludos! :D Votos: 1 - Link respuesta -
Fecha: 23-08-2015 07:31:52 Jony
En lo particular, lo que hago es crear INSERT a distintas tablas simultaneamente en un mismo script, dandome el mismo resultado, con el mismo nivel de eficiencia y eficacia. Votos: 1 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
