Artículo: Implementación de Funciones y Triggers en MySQL

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.

person encoding in laptop
Photo by Lukas on Pexels.com

Deja un comentario

Información básica sobre protección de datos Ver más

  • Responsable: Tomas Gonzalez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

error: Content is protected !!

Descubre más desde Tomás González: Formador y Desarrollador Web

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo

Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad