**************************************************************************************************************************************************************** TRIGGERS AUDITAR PRODUCTOS NUEVOS **************************************************************************************************************************************************************** Se ha establecido que se active AFTER INSERT (después de la inserción) en la tabla producto. La cláusula FOR EACH ROW especifica que el disparador se ejecutará por cada fila que se inserte en la tabla producto. El bloque del disparador está definido entre BEGIN y END. En este bloque: Se realiza una inserción en la tabla auditoria_producto. Se registra la acción realizada, concatenando el texto 'Se insertó el producto' con el nombre del nuevo producto (NEW.nombre) que ha sido insertado en la tabla producto. La función NOW() se utiliza para obtener la fecha y hora actuales en el momento de la inserción en la tabla auditoria_producto. MariaDB [almacen2]> delimiter // MariaDB [almacen2]> CREATE TRIGGER registro_auditoria_producto -> AFTER INSERT ON producto -> FOR EACH ROW -> BEGIN -> INSERT INTO auditoria_producto (accion, fecha_hora) -> VALUES (CONCAT('Se insert el producto ', NEW.nombre), NOW()); -> END; -> // Query OK, 0 rows affected (0.182 sec) MariaDB [almacen2]> delimiter ; MariaDB [almacen2]> select * from auditoria_producto; Empty set (0.038 sec) **************************************************************************************************************************************************************** INSERTAR REGISTROS EN LA TABLA PRODUCTO **************************************************************************************************************************************************************** MariaDB [almacen2]> insert into producto(codigotp,nombre,stock,valor,iva,valor_venta,estado) values -> (1,'Vestido_nuevo',100,120000,20000,140000,1), -> (2,'Camisa_Hombre',300,100000,50000,200000,1), -> (3,'Camisa_Hombre',300,100000,50000,200000,1); Query OK, 3 rows affected (0.065 sec) Records: 3 Duplicates: 0 Warnings: 0 MariaDB [almacen2]> select * from producto; +------------+----------+-----------------+---------+-------+--------+-------+-------------+--------+ | idproducto | codigotp | nombre | img_ref | stock | valor | iva | valor_venta | estado | +------------+----------+-----------------+---------+-------+--------+-------+-------------+--------+ | 1 | 2 | pantalon_mujer | NULL | 120 | 100000 | 19000 | 119000 | activo | | 2 | 1 | pantalon_hombre | NULL | 120 | 80000 | 15200 | 95200 | activo | | 3 | 3 | pantalon_ni os | NULL | 110 | 70000 | 13300 | 83300 | activo | | 4 | 2 | blusa_mujer | NULL | 215 | 60000 | 11400 | 71400 | activo | | 5 | 3 | blusa_ni os | NULL | 200 | 40000 | 7600 | 47600 | activo | | 6 | 1 | chaqueta_hombre | NULL | 110 | 180000 | 34200 | 214200 | activo | | 7 | 2 | chaqueta_mujer | NULL | 150 | 150000 | 28500 | 178500 | activo | | 8 | 3 | chaqueta_ni os | NULL | 300 | 100000 | 19000 | 119000 | activo | | 9 | 2 | vestido_mujer | NULL | 300 | 80000 | 15200 | 95200 | activo | | 10 | 3 | vestido_ni os | NULL | 400 | 50000 | 13300 | 63300 | activo | | 11 | 1 | camiseta_hombre | NULL | 180 | 70000 | 13300 | 83300 | activo | | 12 | 2 | falda | NULL | 250 | 70000 | 13300 | 83300 | activo | | 13 | 1 | pijama_hombre | NULL | 190 | 40000 | 7600 | 47600 | activo | | 14 | 2 | pijama_mujer | NULL | 260 | 50000 | 9500 | 59500 | activo | | 15 | 3 | pijama_ni os | NULL | 180 | 40000 | 7600 | 47600 | activo | | 16 | 1 | sudadera_hombre | NULL | 150 | 100000 | 19000 | 119000 | activo | | 17 | 2 | sudadera_mujer | NULL | 190 | 80000 | 15200 | 95200 | activo | | 18 | 3 | sudadera_ni os | NULL | 190 | 70000 | 13300 | 83300 | activo | | 19 | 1 | Vestido_nuevo | NULL | 100 | 120000 | 20000 | 140000 | activo | | 20 | 2 | Camisa_Hombre | NULL | 300 | 100000 | 50000 | 200000 | activo | | 21 | 3 | Camisa_Hombre | NULL | 300 | 100000 | 50000 | 200000 | activo | +------------+----------+-----------------+---------+-------+--------+-------+-------------+--------+ 21 rows in set (0.000 sec) **************************************************************************************************************************************************************** VISUALIZAR LOS DATOS DE LA TABLA AUDITAR PARA VER FUNCIONAMIENTO DEL TRIGGER **************************************************************************************************************************************************************** MariaDB [almacen2]> select * from auditoria_producto; +----+--------------------------------------+---------------------+ | id | accion | fecha_hora | +----+--------------------------------------+---------------------+ | 1 | Se insert el producto Vestido_nuevo | 2023-11-20 11:35:15 | | 2 | Se insert el producto Camisa_Hombre | 2023-11-20 11:35:15 | | 3 | Se insert el producto Camisa_Hombre | 2023-11-20 11:35:15 | +----+--------------------------------------+---------------------+ 3 rows in set (0.001 sec) **************************************************************************************************************************************************************** TRIGGER PARA ACTUALIZAR EL STOCK PRODUCTO **************************************************************************************************************************************************************** Se crea el disparador stock con la siguiente lógica: Se activa AFTER INSERT (después de la inserción) en la tabla pedido. FOR EACH ROW especifica que el disparador se ejecutará por cada fila que se inserte en la tabla pedido. Dentro del bloque del disparador: Se realiza una actualización en la tabla producto. Se decrementa la cantidad en la columna stock de la tabla producto. Esto se hace restando la cantidad (NEW.cantidad) que se ha insertado en la tabla pedido a la columna stock del producto correspondiente en la tabla producto. Esta relación se establece comparando el idproducto en la tabla producto con el idproducto que se ha insertado en la tabla pedido (producto.idproducto=NEW.idproducto). MariaDB [almacen2]> delimiter // MariaDB [almacen2]> create trigger stock after insert on pedido -> for each row -> begin -> update producto set stock = stock - NEW.cantidad -> where producto.idproducto=NEW.idproducto; -> end -> // Query OK, 0 rows affected (0.143 sec) MariaDB [almacen2]> delimiter ; MariaDB [almacen2]> select * from pedido; Empty set (0.002 sec) **************************************************************************************************************************************************************** VISUALIZAMOS PRIMERO LA TABLA PARA VER QUE DATOS HAY **************************************************************************************************************************************************************** MariaDB [almacen2]> select * from producto; +------------+----------+-----------------+---------+-------+--------+-------+-------------+--------+ | idproducto | codigotp | nombre | img_ref | stock | valor | iva | valor_venta | estado | +------------+----------+-----------------+---------+-------+--------+-------+-------------+--------+ | 1 | 2 | pantalon_mujer | NULL | 120 | 100000 | 19000 | 119000 | activo | | 2 | 1 | pantalon_hombre | NULL | 120 | 80000 | 15200 | 95200 | activo | | 3 | 3 | pantalon_ni os | NULL | 110 | 70000 | 13300 | 83300 | activo | | 4 | 2 | blusa_mujer | NULL | 215 | 60000 | 11400 | 71400 | activo | | 5 | 3 | blusa_ni os | NULL | 200 | 40000 | 7600 | 47600 | activo | | 6 | 1 | chaqueta_hombre | NULL | 110 | 180000 | 34200 | 214200 | activo | | 7 | 2 | chaqueta_mujer | NULL | 150 | 150000 | 28500 | 178500 | activo | | 8 | 3 | chaqueta_ni os | NULL | 300 | 100000 | 19000 | 119000 | activo | | 9 | 2 | vestido_mujer | NULL | 300 | 80000 | 15200 | 95200 | activo | | 10 | 3 | vestido_ni os | NULL | 400 | 50000 | 13300 | 63300 | activo | | 11 | 1 | camiseta_hombre | NULL | 180 | 70000 | 13300 | 83300 | activo | | 12 | 2 | falda | NULL | 250 | 70000 | 13300 | 83300 | activo | | 13 | 1 | pijama_hombre | NULL | 190 | 40000 | 7600 | 47600 | activo | | 14 | 2 | pijama_mujer | NULL | 260 | 50000 | 9500 | 59500 | activo | | 15 | 3 | pijama_ni os | NULL | 180 | 40000 | 7600 | 47600 | activo | | 16 | 1 | sudadera_hombre | NULL | 150 | 100000 | 19000 | 119000 | activo | | 17 | 2 | sudadera_mujer | NULL | 190 | 80000 | 15200 | 95200 | activo | | 18 | 3 | sudadera_ni os | NULL | 190 | 70000 | 13300 | 83300 | activo | | 19 | 1 | Vestido_nuevo | NULL | 100 | 120000 | 20000 | 140000 | activo | | 20 | 2 | Camisa_Hombre | NULL | 300 | 100000 | 50000 | 200000 | activo | | 21 | 3 | Camisa_Hombre | NULL | 300 | 100000 | 50000 | 200000 | activo | +------------+----------+-----------------+---------+-------+--------+-------+-------------+--------+ 21 rows in set (0.001 sec) **************************************************************************************************************************************************************** INSERTAMOS DATOS EN LA TABLA PEDIDO **************************************************************************************************************************************************************** MariaDB [almacen2]> insert into pedido(idfactura,idproducto,cantidad,valor_unitario,subtotal,iva,total) values -> (1,2,5,0,0,0,0), -> (1,1,4,0,0,0,0), -> (2,4,3,0,0,0,0), -> (2,6,2,0,0,0,0), -> (3,2,1,0,0,0,0), -> (3,7,4,0,0,0,0), -> (4,8,2,0,0,0,0), -> (4,10,5,0,0,0,0), -> (5,6,3,0,0,0,0), -> (5,8,3,0,0,0,0), -> (6,6,6,0,0,0,0), -> (7,1,5,0,0,0,0), -> (7,2,4,0,0,0,0); Query OK, 13 rows affected (0.206 sec) Records: 13 Duplicates: 0 Warnings: 0 **************************************************************************************************************************************************************** VISUALIZAR EL STOCK DE PRODUCTO **************************************************************************************************************************************************************** MariaDB [almacen2]> select * from producto; +------------+----------+-----------------+---------+-------+--------+-------+-------------+--------+ | idproducto | codigotp | nombre | img_ref | stock | valor | iva | valor_venta | estado | +------------+----------+-----------------+---------+-------+--------+-------+-------------+--------+ | 1 | 2 | pantalon_mujer | NULL | 111 | 100000 | 19000 | 119000 | activo | | 2 | 1 | pantalon_hombre | NULL | 110 | 80000 | 15200 | 95200 | activo | | 3 | 3 | pantalon_ni os | NULL | 110 | 70000 | 13300 | 83300 | activo | | 4 | 2 | blusa_mujer | NULL | 212 | 60000 | 11400 | 71400 | activo | | 5 | 3 | blusa_ni os | NULL | 200 | 40000 | 7600 | 47600 | activo | | 6 | 1 | chaqueta_hombre | NULL | 99 | 180000 | 34200 | 214200 | activo | | 7 | 2 | chaqueta_mujer | NULL | 146 | 150000 | 28500 | 178500 | activo | | 8 | 3 | chaqueta_ni os | NULL | 295 | 100000 | 19000 | 119000 | activo | | 9 | 2 | vestido_mujer | NULL | 300 | 80000 | 15200 | 95200 | activo | | 10 | 3 | vestido_ni os | NULL | 395 | 50000 | 13300 | 63300 | activo | | 11 | 1 | camiseta_hombre | NULL | 180 | 70000 | 13300 | 83300 | activo | | 12 | 2 | falda | NULL | 250 | 70000 | 13300 | 83300 | activo | | 13 | 1 | pijama_hombre | NULL | 190 | 40000 | 7600 | 47600 | activo | | 14 | 2 | pijama_mujer | NULL | 260 | 50000 | 9500 | 59500 | activo | | 15 | 3 | pijama_ni os | NULL | 180 | 40000 | 7600 | 47600 | activo | | 16 | 1 | sudadera_hombre | NULL | 150 | 100000 | 19000 | 119000 | activo | | 17 | 2 | sudadera_mujer | NULL | 190 | 80000 | 15200 | 95200 | activo | | 18 | 3 | sudadera_ni os | NULL | 190 | 70000 | 13300 | 83300 | activo | | 19 | 1 | Vestido_nuevo | NULL | 100 | 120000 | 20000 | 140000 | activo | | 20 | 2 | Camisa_Hombre | NULL | 300 | 100000 | 50000 | 200000 | activo | | 21 | 3 | Camisa_Hombre | NULL | 300 | 100000 | 50000 | 200000 | activo | +------------+----------+-----------------+---------+-------+--------+-------+-------------+--------+ 21 rows in set (0.044 sec) **************************************************************************************************************************************************************** VISUALIZAR LOS DATOS DE LAS TABLAS PEDIDO **************************************************************************************************************************************************************** MariaDB [almacen2]> select * from pedido; +----------+-----------+------------+----------+----------------+----------+------+-------+ | idpedido | idfactura | idproducto | cantidad | valor_unitario | subtotal | iva | total | +----------+-----------+------------+----------+----------------+----------+------+-------+ | 1 | 1 | 2 | 5 | 0 | 0 | 0 | 0 | | 2 | 1 | 1 | 4 | 0 | 0 | 0 | 0 | | 3 | 2 | 4 | 3 | 0 | 0 | 0 | 0 | | 4 | 2 | 6 | 2 | 0 | 0 | 0 | 0 | | 5 | 3 | 2 | 1 | 0 | 0 | 0 | 0 | | 6 | 3 | 7 | 4 | 0 | 0 | 0 | 0 | | 7 | 4 | 8 | 2 | 0 | 0 | 0 | 0 | | 8 | 4 | 10 | 5 | 0 | 0 | 0 | 0 | | 9 | 5 | 6 | 3 | 0 | 0 | 0 | 0 | | 10 | 5 | 8 | 3 | 0 | 0 | 0 | 0 | | 11 | 6 | 6 | 6 | 0 | 0 | 0 | 0 | | 12 | 7 | 1 | 5 | 0 | 0 | 0 | 0 | | 13 | 7 | 2 | 4 | 0 | 0 | 0 | 0 | +----------+-----------+------------+----------+----------------+----------+------+-------+ 13 rows in set (0.001 sec)