En este artículo, abordaremos cómo crear varias funciones, procedimientos y triggers en MySQL basándonos en un archivo de estructura de base de datos y datos de muestra. A continuación, se presentan las soluciones a los problemas planteados:
1. Crear un Trigger Antes de Actualizar un Producto
Este trigger incrementará el precio de un producto en un 10% si su stock es superior a 25.
DELIMITER //
CREATE TRIGGER antes_de_actualizar_producto
BEFORE UPDATE ON productos
FOR EACH ROW
BEGIN
IF NEW.stock > 25 THEN
SET NEW.precio = NEW.precio * 1.10;
END IF;
END //
DELIMITER ;
2. Crear una Función para Devolver el Número de Pedidos de un Cliente
Esta función devolverá el número de pedidos realizados por un cliente especificado. Si el cliente no existe, devolverá 0.
DELIMITER //
CREATE FUNCTION obtener_numero_pedidos(cliente_id INT) RETURNS INT
BEGIN
DECLARE num_pedidos INT;
SELECT COUNT(*) INTO num_pedidos FROM pedidos WHERE cliente_id = cliente_id;
IF num_pedidos IS NULL THEN
RETURN 0;
ELSE
RETURN num_pedidos;
END IF;
END //
DELIMITER ;
3. Crear un Procedimiento para Visualizar el Dinero Gastado por Cada Cliente
Este procedimiento muestra la cantidad de dinero gastada por cada cliente.
DELIMITER //
CREATE PROCEDURE dinero_gastado_por_cliente()
BEGIN
SELECT clientes.nombre, SUM(pedidos.total) AS total_gastado
FROM clientes
JOIN pedidos ON clientes.id = pedidos.cliente_id
GROUP BY clientes.nombre;
END //
DELIMITER ;
4. Crear un Procedimiento para Devolver el Nombre del Producto Más Caro de Cada Proveedor
Este procedimiento devuelve el nombre del producto más caro suministrado por cada proveedor.
DELIMITER //
CREATE PROCEDURE producto_mas_caro_por_proveedor()
BEGIN
SELECT proveedores.nombre, productos.nombre, MAX(productos.precio) AS precio_maximo
FROM proveedores
JOIN productos ON proveedores.id = productos.proveedor_id
GROUP BY proveedores.nombre;
END //
DELIMITER ;
5. Crear un Trigger Después de Actualizar los Pedidos
Este trigger cambiará el estado de los pedidos de “anulado” a “sin realizar” después de una actualización.
DELIMITER //
CREATE TRIGGER despues_de_actualizar_pedido
AFTER UPDATE ON pedidos
FOR EACH ROW
BEGIN
IF NEW.estado = 'anulado' THEN
SET NEW.estado = 'sin realizar';
END IF;
END //
DELIMITER ;
6. Crear un Procedimiento para Visualizar Todos los Pedidos y sus Proveedores
Este procedimiento muestra todos los pedidos junto con sus proveedores.
DELIMITER //
CREATE PROCEDURE ver_pedidos_y_proveedores()
BEGIN
SELECT pedidos.*, proveedores.nombre AS proveedor
FROM pedidos
JOIN productos ON pedidos.producto_id = productos.id
JOIN proveedores ON productos.proveedor_id = proveedores.id;
END //
DELIMITER ;
7. Crear un Trigger Después de Eliminar Productos
Este trigger reducirá el precio de los productos en un 5% después de que sean eliminados.
DELIMITER //
CREATE TRIGGER despues_de_eliminar_producto
AFTER DELETE ON productos
FOR EACH ROW
BEGIN
UPDATE productos
SET precio = precio * 0.95;
END //
DELIMITER ;
8. Crear un Procedimiento para Visualizar Descripción de Artículos con Stock Superior a un Parámetro
Este procedimiento muestra la descripción de los artículos cuyo stock es superior a un valor especificado.
DELIMITER //
CREATE PROCEDURE ver_articulos_por_stock(min_stock INT)
BEGIN
SELECT descripcion
FROM productos
WHERE stock > min_stock;
END //
DELIMITER ;
9. Crear una Función para Contar Pedidos en un Mes Específico
Esta función devuelve el número de pedidos realizados en un mes dado.
DELIMITER //
CREATE FUNCTION pedidos_en_mes(mes INT) RETURNS INT
BEGIN
DECLARE num_pedidos INT;
SELECT COUNT(*) INTO num_pedidos
FROM pedidos
WHERE MONTH(fecha) = mes;
RETURN num_pedidos;
END //
DELIMITER ;
Estas soluciones cubren diversos aspectos de la gestión de bases de datos en MySQL, desde la manipulación de datos mediante triggers y procedimientos almacenados hasta la creación de funciones personalizadas para obtener información específica. Implementar estas técnicas puede mejorar significativamente la funcionalidad y eficiencia de la base de datos.