Saltar al contenido

Tablas Temporales en MySQL: Una Guía completa con Ejemplos Prácticos

Los tipos de tablas temporales de Mysql son muy utiles en tus tareas diarias la cuales pueden permitirte manipular su estructura. Supongamos que deseas no tienes de insert , delete en una tabla, tu solucion crear una tabla temporal para que te permita hacer lo que gustes las cuales curiosamente se crean muy parecidas al proceso de crear tablas que deberias conocer.

En esta guía completa, exploraremos a profundidad ambos tipos de tablas temporales, sus diferencias, casos de uso y te brindaremos ejemplos prácticos de cómo crearlas en MySQL.

Índice

    Que son las tablas temporales en Mysql?

    Las tablas temporales en MySQL, esta era una pregunta que siempre me hacia cuando inicie en este mundillo seria facil decir que son herramientas poderosas que te permiten guardar registros de forma provisional durante la ejecución de consultas complejas.

    lo que no sabia es que existe mas de un tipo, por lo cual en este articulo te explicare los dos tipos principales disponibles, TEMPORARY y GLOBAL, si tienes dudas solo deja un comentario para ayudarte.

    Tipos de Tablas Temporales

    luego de esa introduccion solo resta mostrar los ejemplos de cda tipo para poder explicar cada uno de los escenarios.

    1. Tablas TEMPORARY:

    Ejemplo:

    CREATE TEMPORARY table pedidos_temporales (
      id_pedido INT PRIMARY KEY,
      nombre_cliente VARCHAR(255) NOT NULL,
      fecha_pedido DATE NOT NULL,
      monto_total DECIMAL(10,2) NOT NULL
    );
    
    • Alcance: Limitadas a la sesión actual del usuario.
    • Persistencia: Desaparecen al cerrar la conexión o al ejecutar una sentencia DROP TABLE.
    • Ideal para: Almacenamiento temporal de datos intermedios en consultas complejas.

    2. Tablas GLOBAL:

    Ejemplo:

    CREATE TABLE clientes_frecuentes (
      id_cliente INT PRIMARY KEY,
      nombre_cliente VARCHAR(255) NOT NULL,
      compras_totales INT NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    -- Marcar la tabla como GLOBAL
    ALTER TABLE clientes_frecuentes ACCESS MODIFY = GLOBAL;
    
    • Alcance: Disponibles para todas las conexiones dentro de la misma base de datos.
    • Persistencia: Permanecen hasta que se eliminen explícitamente con DROP TABLE.
    • Ideal para: Almacenamiento de datos compartidos entre sesiones o para consultas que requieren acceso a datos persistentes.

    Caso de uso practico para cada tipo

    TEMPORARY

    • Ejemplo: Almacenar resultados intermedios de una consulta que calcula el total de ventas por cliente en un determinado período:
    CREATE TEMPORARY table ventas_por_cliente (
      id_cliente INT,
      total_ventas DECIMAL(10,2)
    );
    
    SELECT c.id_cliente, SUM(v.monto) AS total_ventas
    INTO ventas_por_cliente
    FROM clientes c
    JOIN ventas v ON c.id_cliente = v.id_cliente
    WHERE v.fecha_venta BETWEEN '2024-01-01' AND '2024-12-31'
    GROUP BY c.id_cliente;
    
    -- Usar la tabla temporal para obtener el cliente con mayor número de ventas
    SELECT c.nombre_cliente, vt.total_ventas
    FROM clientes c
    JOIN ventas_por_cliente vt ON c.id_cliente = vt.id_cliente
    ORDER BY vt.total_ventas DESC
    LIMIT 1;
    
    • Creación de tablas temporales para subconsultas.
    • Implementación de funciones personalizadas que requieren almacenamiento temporal.

    GLOBAL

    • Ejemplo: Almacenar una lista de clientes frecuentes que han realizado más de 5 compras:
    CREATE TABLE clientes_frecuentes (
      id_cliente INT PRIMARY KEY,
      nombre_cliente VARCHAR(255) NOT NULL,
      compras_totales INT NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    -- Poblar la tabla con datos de la tabla 'clientes'
    INSERT INTO clientes_frecuentes (id_cliente, nombre_cliente, compras_totales)
    SELECT c.id_cliente, c.nombre_cliente, COUNT(*) AS compras_totales
    FROM clientes c
    JOIN ventas v ON c.id_cliente = v.id_cliente
    GROUP BY c.id_cliente
    HAVING COUNT(*) > 5;
    
    • Compartir datos entre sesiones de usuario.
    • Almacenar datos de referencia que se utilizan con frecuencia.
    • Implementar tablas de caché para mejorar el rendimiento de consultas.

    Consejos y Optimización:

    • Evita el uso excesivo de tablas temporales: Demasiadas tablas temporales pueden afectar el rendimiento.
    • Utiliza índices cuando sea necesario: Los índices en tablas temporales pueden mejorar el rendimiento de consultas.
    • Elimina las tablas temporales cuando ya no las necesites: Libera espacio y recursos.
    • Considera alternativas a las tablas temporales: En algunos casos, las variables o las tablas permanentes pueden ser más eficientes.

    Conclusión:

    Las tablas temporales en MySQL ofrecen una gran flexibilidad para almacenar datos de forma provisional. Con una comprensión clara de esto te seria mas facil usar las tablas temporales de sql server y cuando usar las tablas temporales en postgresql.