--------------------------------------------------------------------- Triggers para realizar varios cálculos al insertar un artículo --------------------------------------------------------------------- -calcular precio de venta -calcular iva -Calcular el total -Guardar en una Tabla adicional los datos del articulo insertado, quien lo insertó, fecha y hora create table articulos_insertados (codigoi char(10), articuloi char(40), cantidadi int(11), valorunitarioi int(11), existenciai int(11), usuario varchar(15), fecha_modif datetime); alter table detalle add iva float nat null after valorventa; DELIMITER // CREATE TRIGGER VALORVENTA AFTER INSERT ON ARTICULO FOR EACH ROW BEGIN insert into articulos_insertados (codigoi,articuloi,cantidadi,valorunitarioi,existenciai,usuario,fecha_modif) Values (New.codigo,New.articulo,New.cantidad,New.valorunitario,New.existencia,current_user(),now()); update detalle set valorventa = (select valorunitario + (valorunitario * 0.23) from articulo where articulo.codigo = detalle.codigo); UPDATE DETALLE SET iva=(VALORVENTA*CANTIDAD)*0.19; UPDATE DETALLE SET total=(VALORVENTA*CANTIDAD)+iva; END // Delimiter ; Insertar un árticulo insert into articulo values('450','Secador Remington 1600',10,250000,0); COMPROBAR MariaDB [subconsultas]> select * from articulo; MariaDB [subconsultas]> select * from detalle; MariaDB [subconsultas]> select * from articulos_insertados; ------------------------------------------------------------------------------- Para guardar seguimiento de productos actualizados y quien los actualizó ------------------------------------------------------------------------------- -Guardar los datos anteriores y los datos nuevos, quien los actualizó, la fecha y la hora Crear tabla MariaDB [subconsultas]> create table articulos_actualizados (anterior_codigo char(10), anterior_articulo char(40), anterior_cantidad int(11), anterior_valorunitario int(11), anterior_existencia int(11), nuevo_codigo char(10), nuevo_articulo char(10), nuevo_cantidad int(11), nuevo_valorunitario int(11), nuevo_existencia int(11), usuario varchar(15), fecha_modif datetime); Query OK, 0 rows affected (0.294 sec) Delimiter // CREATE TRIGGER ACTUALIZA_PRODUCTOS BEFORE UPDATE ON ARTICULO FOR EACH ROW BEGIN insert into articulos_actualizados (anterior_codigo,anterior_articulo,anterior_cantidad,anterior_valorunitario,anterior_existencia,nuevo_codigo,nuevo_articulo,nuevo_cantidad,nuevo_valorunitario,nuevo_existencia,usuario,fecha_modif) Values (OLD.codigo,OLD.articulo,OLD.cantidad,OLD.valorunitario,OLD.existencia,New.codigo,New.articulo,New.cantidad,New.valorunitario,New.existencia,current_user(),now()); End // Delimiter ; Actualizar un articulo MariaDB [subconsultas]> update articulo set valorunitario=valorunitario+50000 where codigo=150; Verificar MariaDB [subconsultas]> select anterior_valorunitario,nuevo_valorunitario from articulos_actualizados; MariaDB [subconsultas]> select anterior_valorunitario,nuevo_valorunitario,usuario,fecha_modif from articulos_actualizados; ----------------------------------------------------------------------------- Para guardar seguimiento de articulos eliminados y quien los eliminó ----------------------------------------------------------------------------- -Guardar los datos Anteriores -Guardar qien los eliminó, fecha y hora. Crear tabla MariaDB [subconsultas]> create table articulos_eliminados (codigoB char(10), articuloB char(40), cantidadB int(11), valorunitarioB int(11), existenciaB int(11), usuario varchar(15), fecha_modif datetime); Delimiter // CREATE TRIGGER ELIMINAR_ARTICULOS AFTER DELETE ON ARTICULO FOR EACH ROW BEGIN insert into ARTICULOS_ELIMINADOS (codigoB,articuloB,cantidadB,valorunitarioB,existenciaB,usuario,fecha_modif) Values (OLD.codigo,OLD.articulo,OLD.cantidad,OLD.valorunitario,OLD.existencia,current_user(),now()); End // Delimiter ; eliminar un articulo MariaDB [subconsultas]> delete from articulo where codigo='450'; Comprobar MariaDB [subconsultas]> select * from articulo; Comprobar MariaDB [subconsultas]> select * from articulos_eliminados;