miércoles, 20 de noviembre de 2019

Triggers en MySQL.

En esta ocasión veremos cómo crear un trigger insertar y modificar, que nos servirán para tener un registro de quién insertó o modificó algún campo en nuestra base de datos.

Primero debemos crear la base de datos empresa y crear tabla productos con los siguientes campos:

int IdProductos (20) PK
char NombreProducto (30)
char TipoProducto (30)
int PrecioProducto (20)

De ahí crearemos nuestra tabla BitacoraProductos (registro) y nuestros triggers con el siguiente comando:
CREATE DATABASE empresa;
USE empresa;
CREATE TABLE BitacoraProductos(
IdBP INT(30) auto_increment primary key,
IdProductos INT(20),
NombreProducto_Nuevo varchar(30),
NombreProducto_Viejo varchar(30),
TipoProducto_Nuevo varchar(30),
TipoProducto_Viejo varchar(30),
PrecioProducto_Nuevo varchar(30),
PrecioProducto_Viejo varchar(30),
Usuario varchar(30),
Fecha datetime,
Accion varchar(15)) engine =innodb;
CREATE TRIGGER InsertarProductos AFTER INSERT
ON productos
FOR EACH ROW
INSERT INTO BitacoraProductos(IdProductos, NombreProducto_Nuevo, TipoProducto_Nuevo, PrecioProducto_Nuevo, Usuario, Fecha, Accion)
VALUES (NEW.IdProductos,NEW.NombreProducto,NEW.TipoProducto,NEW.PrecioProducto, USER(),NOW(),'Inserto');
CREATE TRIGGER ModificarProductos AFTER UPDATE
ON productos
FOR EACH ROW
INSERT INTO BitacoraProductos(IdProductos,NombreProducto_Nuevo,NombreProducto_Viejo, TipoProducto_Nuevo,TipoProducto_Viejo,PrecioProducto_Nuevo, PrecioProducto_Viejo,Usuario,Fecha, Accion)
VALUES (old.IdProductos,NEW.NombreProducto,old.NombreProducto,NEW.TipoProducto,old.TipoProducto,NEW.PrecioProducto,old.PrecioProducto, USER(),NOW(),'Modifico');
CREATE TRIGGER EliminarProductos AFTER DELETE
ON productos
FOR EACH ROW
INSERT INTO BitacoraProductos(IdProductos,NombreProducto_Viejo,TipoProducto_Viejo,PrecioProducto_Viejo,Usuario,Fecha,Accion)
VALUES(old.IdProductos,old.NombreProducto,old.TipoProducto,old.PrecioProducto,USER(),NOW(),'Eliminar');
DROP TRIGGER InsertarProductos;
DROP TRIGGER ModificarProductos;
DROP TRIGGER EliminarProductos;
SELECT * FROM Productos;
SELECT * FROM BitacoraProductos;
view raw Triggers.sql hosted with ❤ by GitHub

Nuestra tabla productos se ve así:

Nuestra bitácora (cambié el precio del Dron de 25,000 a 30,000):



Como podemos ver registra quién cambió el precio y el precio viejo, ayudándonos a saber los cambios hechos y quién los realizó.