Tabelas Temporárias no MySQL Explicadas: Criar, Usar, Excluir + Melhores Práticas (Com Exemplos SQL)

目次

1. (Iniciante) O que é uma Tabela Temporária MySQL? Diferenças em relação às Tabelas Normais

Introdução

Ao gerenciar dados com MySQL, há momentos em que você precisa armazenar dados temporariamente. Por exemplo, ao processar um grande conjunto de dados, pode ser útil salvar resultados intermediários enquanto trabalha. Nesses casos, uma tabela temporária (Tabela Temporária) é muito útil.

Neste artigo, explicaremos o mecanismo básico das tabelas temporárias MySQL e como elas diferem das tabelas normais.

1-1. O que é uma Tabela Temporária?

Uma tabela temporária é uma tabela especial que existe apenas durante uma sessão de banco de dados (conexão).
Ao contrário de uma tabela normal, ela é removida automaticamente quando a sessão termina, tornando-a ideal para armazenar dados temporários.

Principais Características das Tabelas Temporárias

  • Isolada por sessão Uma tabela temporária pode ser acessada somente dentro da sessão que a criou. Outras sessões não podem referenciá‑la.
  • Removida automaticamente ao final da sessão As tabelas temporárias desaparecem automaticamente quando a sessão termina, mesmo que você não as exclua explicitamente.
  • É possível criar tabelas temporárias com o mesmo nome Ao contrário das tabelas normais, é possível criar tabelas temporárias com o mesmo nome em sessões diferentes .

1-2. Diferenças em relação às Tabelas Normais

Tabelas temporárias e tabelas normais diferem nos seguintes aspectos.

ComparisonTemporary TableRegular Table
Data retentionValid only during the session (automatically removed)Stored permanently
Access scopeOnly within the session that created itAccessible to all users (subject to privileges)
Name conflictsYou can create temporary tables with the same nameYou cannot create another table with the same name in the same database
Required privilegesRequires the CREATE TEMPORARY TABLES privilegeRequires the standard CREATE TABLE privilege
IndexesSupportedSupported
PerformanceOften created in memory and can be fastStored on disk; performance can degrade as data grows

Qual delas você deve usar?

  • Se você precisa dos dados apenas temporariamente e eles podem ser descartados após o processamentoTabela temporária
  • Se você deseja manter os dados permanentemente e reutilizá‑los depoisTabela normal

Por exemplo, tabelas temporárias são muito úteis para tarefas como análise de dados em larga escala ou agregação temporária.

1-3. Quando Você Precisa de uma Tabela Temporária

Tabelas temporárias MySQL são especialmente úteis nas situações a seguir.

1) Melhorar o desempenho da consulta

Por exemplo, ao executar operações complexas de JOIN, você pode reduzir o tempo de processamento criando uma tabela temporária para armazenar os dados intermediários antecipadamente.

Exemplo: Reduzir a sobrecarga de JOIN
CREATE TEMPORARY TABLE temp_users AS
SELECT id, name FROM users WHERE status = 'active';

Ao armazenar os dados-alvo em uma tabela temporária primeiro e depois executar o JOIN, o desempenho pode melhorar.

2) Armazenar dados temporariamente

Tabelas temporárias também são úteis quando uma aplicação precisa gerenciar dados temporariamente.
Por exemplo, você pode armazenar os dados que um usuário pesquisou em uma tabela temporária e removê‑los ao final da sessão.

3) Tabelas intermediárias para processamento em lote

Ao processar grandes volumes de dados, usar tabelas temporárias como tabelas intermediárias pode melhorar a estabilidade do processo.

1-4. Limitações das Tabelas Temporárias

Tabelas temporárias são convenientes, mas apresentam algumas limitações.

1) Removidas automaticamente ao final da sessão

Como as tabelas temporárias são removidas automaticamente ao final da sessão, elas não são adequadas para armazenar dados permanentemente.

2) Não acessíveis a partir de outras sessões

Tabelas temporárias podem ser usadas somente dentro da sessão que as criou, portanto não podem ser compartilhadas com outros usuários ou processos.

3) Possível conflito com uma tabela normal de mesmo nome

Se existir uma tabela normal com o mesmo nome, criar uma tabela temporária com esse nome tornará a tabela normal temporariamente invisível, portanto tenha cuidado.

CREATE TEMPORARY TABLE users (id INT, name VARCHAR(255));
SELECT * FROM users; -- This query references the temporary table data

Como mostrado acima, uma vez criada a tabela temporária, você não pode acessar a tabela normal com o mesmo nome até que a tabela temporária seja removida. Escolha os nomes das tabelas com atenção.

Resumo

Tabelas temporárias MySQL são um recurso conveniente para armazenamento temporário de dados e otimização de consultas.
Ao entender como elas diferem das tabelas normais e usá‑las adequadamente, você pode processar os dados de forma mais eficiente.

✔ Resumo rápido

  • Tabelas temporárias são removidas automaticamente quando a sessão termina
  • Ao contrário das tabelas regulares, elas são isoladas por sessão
  • Ótimas para armazenamento temporário e melhoria do desempenho de consultas
  • Não adequadas para armazenamento permanente porque os dados desaparecem quando a sessão termina
  • Não acessíveis a partir de outras sessões e podem entrar em conflito com tabelas regulares de mesmo nome

2. (Com Código de Exemplo) Como Criar uma Tabela Temporária no MySQL

Introdução

Na seção anterior, explicamos o conceito básico de tabelas temporárias e como elas diferem das tabelas regulares.
Nesta seção, vamos percorrer como criar uma tabela temporária e como trabalhar com os dados nela.

Criar uma tabela temporária é simples, mas se você não usar a sintaxe correta, ela pode não se comportar como esperado. Esta seção explica a sintaxe básica, a criação a partir de uma tabela existente e como confirmar tabelas temporárias em detalhes.

2-1. Sintaxe Básica para uma Tabela Temporária

Para criar uma tabela temporária, use a instrução CREATE TEMPORARY TABLE.

Sintaxe básica

CREATE TEMPORARY TABLE table_name (
    column_name data_type [constraints],
    column_name data_type [constraints],
    ...
);

A sintaxe é quase a mesma que CREATE TABLE, mas ao adicionar TEMPORARY ela se torna uma tabela temporária.

Exemplo: Armazenar informações de usuário em uma tabela temporária

CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Esta tabela temp_users é válida apenas na sessão atual e é removida automaticamente quando a sessão termina.

2-2. Criar uma Tabela Temporária Baseada em Dados de uma Tabela Existente

Você também pode criar uma tabela temporária baseada em dados de uma tabela existente.

Sintaxe

CREATE TEMPORARY TABLE temp_table_name AS
SELECT * FROM existing_table WHERE condition;

Exemplo: Armazenar apenas usuários ativos em uma tabela temporária

CREATE TEMPORARY TABLE active_users AS
SELECT id, name, email FROM users WHERE status = 'active';

Este método extrai apenas os usuários com status = 'active' da tabela users e os armazena em uma nova tabela temporária chamada active_users.

Pontos‑chave
  • Copia os dados de uma tabela existente como estão
  • Os tipos de dados das colunas são definidos automaticamente
  • Índices não são copiados, então adicione‑os explicitamente se necessário

2-3. Como Verificar Dados de uma Tabela Temporária

Listar tabelas

SHOW TABLES;

Entretanto, uma tabela temporária não aparecerá na lista de um SHOW TABLES normal.

Verificar a estrutura de uma tabela temporária

DESC temp_users;

ou

SHOW CREATE TABLE temp_users;

Isso permite que você verifique a estrutura de colunas e restrições da tabela temporária.

2-4. Inserir Dados em uma Tabela Temporária

Inserir dados em uma tabela temporária é o mesmo que em uma tabela regular.

Inserir dados

INSERT INTO temp_users (name, email) VALUES 
('Taro Tanaka', 'tanaka@example.com'),
('Hanako Sato', 'sato@example.com');

Verificar os dados

SELECT * FROM temp_users;

Isso confirma que os dados foram armazenados na tabela temporária.

2-5. Observações ao Criar Tabelas Temporárias

1) Cuidado com conflitos de nomes de tabelas

Se você criar uma tabela temporária com o mesmo nome de uma tabela regular, a tabela temporária tem precedência, e a tabela regular torna‑se temporariamente inacessível.

CREATE TEMPORARY TABLE users (id INT, name VARCHAR(50));
SELECT * FROM users; -- This returns data from the temporary table

Por esse motivo, recomenda‑se usar um prefixo como “temp_” para nomes de tabelas temporárias.

2) Índices não são herdados automaticamente

Ao copiar dados de uma tabela existente, os índices não são aplicados automaticamente.
Se necessário, você deve adicionar os índices explicitamente.

ALTER TABLE temp_users ADD INDEX (email);

3) Você precisa do privilégio para criar tabelas temporárias

Para criar uma tabela temporária, você precisa do privilégio CREATE TEMPORARY TABLES.

GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user'@'localhost';

Sem esse privilégio, você não pode criar tabelas temporárias.

Resumo

Nesta seção, explicamos como criar tabelas temporárias.

✔ Recapitulação rápida

  • Criar uma tabela temporária com CREATE TEMPORARY TABLE
  • Você também pode criar uma copiando dados de uma tabela existente
  • Removida automaticamente quando a sessão termina
  • Índices não são aplicados automaticamente—tenha cuidado
  • Use um prefixo como “temp_” para evitar conflitos de nomes
  • Você precisa do privilégio adequado (CREATE TEMPORARY TABLES)

3. Como Manipular Dados em uma Tabela Temporária MySQL (INSERT, UPDATE, DELETE)

Introdução

Na seção anterior, explicamos como criar uma tabela temporária no MySQL.
Nesta seção, explicaremos como inserir, atualizar e excluir dados em uma tabela temporária usando comandos SQL específicos.

Tabelas temporárias suportam as mesmas operações de dados que tabelas regulares,
mas há algumas observações importantes a serem lembradas, que também abordaremos.

3-1. Inserir dados em uma tabela temporária (INSERT)

Para adicionar dados a uma tabela temporária, use a instrução INSERT INTO, assim como em uma tabela regular.

Sintaxe básica

INSERT INTO temp_table_name (column1, column2, ...) 
VALUES (value1, value2, ...);

Exemplo: Adicionar informações de usuário

CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO temp_users (name, email) 
VALUES 
('Taro Tanaka', 'tanaka@example.com'),
('Hanako Sato', 'sato@example.com');

Inserir dados existentes usando INSERT…SELECT

Você também pode buscar dados de uma tabela existente e inseri-los em uma tabela temporária.

INSERT INTO temp_users (id, name, email)
SELECT id, name, email FROM users WHERE status = 'active';

Esse método permite armazenar apenas usuários ativos em uma tabela temporária.

3-2. Atualizar dados em uma tabela temporária (UPDATE)

Para alterar dados em uma tabela temporária, use a instrução UPDATE.

Sintaxe básica

UPDATE temp_table_name 
SET column_name = value
WHERE condition;

Exemplo: Atualizar o nome de um usuário

UPDATE temp_users 
SET name = 'Ichiro Tanaka'
WHERE email = 'tanaka@example.com';

Atualização em massa para linhas que correspondem a uma condição

Por exemplo, se você quiser mudar endereços de e‑mail de um domínio específico para example.jp, pode escrever:

UPDATE temp_users 
SET email = REPLACE(email, 'example.com', 'example.jp')
WHERE email LIKE '%@example.com';

3-3. Excluir dados de uma tabela temporária (DELETE)

Para excluir dados, use a instrução DELETE.

Sintaxe básica

DELETE FROM temp_table_name WHERE condition;

Exemplo: Excluir os dados de um usuário específico

DELETE FROM temp_users WHERE email = 'tanaka@example.com';

Excluir todas as linhas (diferença do TRUNCATE)

Se você quiser excluir todas as linhas, pode escrever:

DELETE FROM temp_users;

Em contraste, para tabelas regulares, você pode frequentemente excluir todas as linhas mais rapidamente usando TRUNCATE TABLE. No entanto, não é possível usar TRUNCATE em uma tabela temporária no MySQL.

TRUNCATE TABLE temp_users; -- Error (cannot be used on temporary tables in MySQL)

Portanto, para remover todas as linhas de uma tabela temporária, você deve usar DELETE.

3-4. Observações ao manipular dados em uma tabela temporária

1) Dados desaparecem quando a sessão termina

Uma tabela temporária é removida automaticamente quando a sessão (conexão) termina,
portanto não é adequada para casos de uso que exigem armazenamento de dados persistente.

2) Não acessível a partir de outras sessões

Uma tabela temporária é válida apenas dentro da sessão que a criou e não pode ser acessada a partir de outras sessões.

SELECT * FROM temp_users;

Se você executar este SQL em uma sessão diferente, receberá o erro “Table ‘temp_users’ doesn’t exist”.

3) Índices em tabelas temporárias não são aplicados automaticamente

Se você criar uma tabela usando CREATE TEMPORARY TABLE ... AS SELECT ...,
os índices da tabela original não são herdados. Se necessário, adicione índices manualmente usando ALTER TABLE.

ALTER TABLE temp_users ADD INDEX (email);

Resumo

Nesta seção, abordamos a manipulação de dados (INSERT, UPDATE, DELETE) para tabelas temporárias.

✔ Recapitulação rápida

  • Use INSERT para adicionar dados ( INSERT INTO ... VALUES / INSERT INTO ... SELECT )
  • Use UPDATE para modificar dados (atualizações condicionais e usando REPLACE() )
  • Use DELETE para remover dados ( DELETE FROM ... WHERE ; TRUNCATE não é permitido)
  • A tabela temporária é removida quando a sessão termina
  • Não acessível a partir de outras sessões
  • Os índices não são herdados automaticamente; adicione-os manualmente se necessário

4. As Tabelas Temporárias do MySQL São Removidas Automaticamente? Como Excluí‑las Manualmente

Introdução

Ao contrário das tabelas regulares, uma tabela temporária do MySQL (Temporary Table) é removida automaticamente quando a sessão termina. No entanto, há casos em que você pode precisar excluí‑la manualmente.

Nesta seção, explicamos como funciona a remoção automática e como excluir tabelas temporárias manualmente em detalhes.

4-1. Como funciona a remoção automática para tabelas temporárias

1) Removida automaticamente quando a sessão termina

Uma tabela temporária do MySQL é removida automaticamente quando a sessão (conexão ao banco de dados) que a criou termina.
Por causa disso, normalmente você não precisa excluí‑la manualmente.

Exemplo: Remoção automática quando a sessão termina
-- Create a temporary table in a new session
CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100)
);

-- Insert data
INSERT INTO temp_users (name, email) VALUES ('Taro Tanaka', 'tanaka@example.com');

-- End the session (disconnect the MySQL client)
EXIT;

Neste ponto, a tabela temporária temp_users é removida automaticamente.

2) A tabela temporária permanece enquanto a sessão continua

Como as tabelas temporárias são gerenciadas por sessão, elas não são removidas enquanto a sessão permanecer aberta.

SELECT * FROM temp_users; -- Data can be retrieved if the session is still active

Em outras palavras, a tabela temporária permanece na memória até que você feche o cliente MySQL (ou o programa se desconecte).

4-2. Como excluir uma tabela temporária manualmente

Você também pode excluir tabelas temporárias manualmente.
No MySQL, use DROP TEMPORARY TABLE para remover uma tabela temporária.

1) Use DROP TEMPORARY TABLE

DROP TEMPORARY TABLE temp_users;

Isso remove imediatamente a tabela temporária temp_users.

2) Adicione IF EXISTS para evitar erros

Se a tabela não existir, você pode usar IF EXISTS para evitar um erro.

DROP TEMPORARY TABLE IF EXISTS temp_users;

Essa sintaxe impede erros mesmo que a tabela não exista.

3) Diferente de um DROP TABLE normal

Se você tentar excluir uma tabela temporária usando um DROP TABLE normal, pode ver um erro como o seguinte:

DROP TABLE temp_users;

Erro:

ERROR 1051 (42S02): Unknown table 'temp_users'

Como o MySQL gerencia tabelas regulares e tabelas temporárias separadamente, você deve usar DROP TEMPORARY TABLE ao excluir uma tabela temporária.

4-3. Como confirmar que uma tabela temporária foi excluída

1) Não é possível confirmar com SHOW TABLES

Uma tabela temporária não aparecerá na saída de SHOW TABLES.

SHOW TABLES;

Tabelas temporárias não são listadas

2) Confirmar usando INFORMATION_SCHEMA

Você pode verificar se uma tabela temporária existe consultando INFORMATION_SCHEMA.

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = DATABASE() 
AND TABLE_NAME = 'temp_users';

Se esta consulta retornar um resultado, isso indica que a tabela temporária existe.

4-4. Observações ao excluir tabelas temporárias

1) Tabelas temporárias diferem por sessão

Você pode criar tabelas temporárias com o mesmo nome em várias sessões.
Não é possível excluir uma tabela temporária criada por outra sessão.

Exemplo
-- Created in session A
CREATE TEMPORARY TABLE temp_data (id INT);

-- Attempt to drop in session B
DROP TEMPORARY TABLE temp_data;

Ocorre um erro:

ERROR 1051 (42S02): Unknown table 'temp_data'

Uma tabela temporária só pode ser excluída na sessão que a criou.

2) Possível conflito com uma tabela regular de mesmo nome

Se uma tabela temporária tem o mesmo nome de uma tabela regular,
a tabela temporária tem precedência, e a tabela regular torna‑se invisível.

Exemplo
-- A regular table (users) exists
SELECT * FROM users;

-- Create a temporary table with the same name
CREATE TEMPORARY TABLE users (id INT, name VARCHAR(50));

-- This now references the temporary table users
SELECT * FROM users;

Solução:

  • Use um prefixo como temp_ para tabelas temporárias a fim de evitar conflitos de nomes.

Resumo

Nesta seção, explicamos como a remoção de tabelas temporárias funciona e como excluí‑las.

✔ Recapitulação rápida

  • Tabelas temporárias são removidas automaticamente quando a sessão termina
  • Elas permanecem enquanto a sessão estiver ativa
  • Para excluir manualmente, use DROP TEMPORARY TABLE
  • Adicione IF EXISTS para evitar erros
  • Você não pode confirmar tabelas temporárias com SHOW TABLES
  • Você pode excluir uma tabela temporária apenas na sessão que a criou
  • Use um prefixo para evitar conflitos com tabelas regulares de mesmo nome

5. 5 Casos de Uso Práticos para Tabelas Temporárias MySQL (Incluindo Otimização de Desempenho)

Introdução

Tabelas temporárias MySQL permitem armazenar dados intermediários e simplificar consultas complexas, ajudando a melhorar o desempenho do banco de dados.

Nesta seção, apresentamos cinco casos de uso práticos para tabelas temporárias.
Explicamos como elas podem ser usadas em cenários reais, juntamente com exemplos de SQL.

5-1. Otimizar o Desempenho de Consultas (Reduzir Sobrecarga de JOIN)

Problema

Ao processar grandes conjuntos de dados, executar operações JOIN diretamente pode degradar o desempenho.

Solução

Use uma tabela temporária para pré‑filtrar os dados-alvo antes de executar o JOIN, reduzindo a sobrecarga de processamento.

Exemplo: Recuperar dados de pedidos para usuários ativos
-- First, store only active users in a temporary table
CREATE TEMPORARY TABLE temp_active_users AS
SELECT id, name FROM users WHERE status = 'active';

-- Perform JOIN using the temporary table
SELECT o.order_id, t.name, o.total_price
FROM orders o
JOIN temp_active_users t ON o.customer_id = t.id;
Benefícios
  • Reduz a carga de trabalho do JOIN ao focar apenas em usuários ativos em vez da tabela completa users
  • Simplifica a consulta principal, melhorando a legibilidade

5-2. Processamento de Agregação Temporária

Problema

Executar repetidamente a mesma consulta de agregação pode reduzir o desempenho.

Solução

Armazene os resultados da agregação em uma tabela temporária uma única vez para evitar cálculos repetidos desnecessários.

Exemplo: Armazenar dados de vendas mensais em uma tabela temporária
-- Calculate monthly total sales and store in a temporary table
CREATE TEMPORARY TABLE temp_monthly_sales AS
SELECT DATE_FORMAT(order_date, '%Y-%m') AS month, SUM(total_price) AS total_sales
FROM orders
GROUP BY month;

-- Retrieve aggregated results
SELECT * FROM temp_monthly_sales WHERE total_sales > 100000;
Benefícios
  • Reutilizar os dados agregados várias vezes
  • Melhorar o desempenho ao evitar cálculos redundantes

5-3. Armazenar Dados Intermediários para Processamento em Lote

Problema

Quando são realizadas atualizações ou exclusões em massa, erros durante o processamento podem deixar os dados em um estado inconsistente.

Solução

Use uma tabela temporária para armazenar dados intermediários e manter a consistência dos dados.

Exemplo: Atualizar dados de pedidos sob condições específicas
-- Store target rows in a temporary table
CREATE TEMPORARY TABLE temp_orders AS
SELECT order_id, total_price FROM orders WHERE status = 'pending';

-- Perform update based on the temporary table
UPDATE orders o
JOIN temp_orders t ON o.order_id = t.order_id
SET o.total_price = t.total_price * 1.1; -- Increase price by 10%
Benefícios
  • Atualizar com segurança apenas os dados selecionados
  • Facilidade para verificar os dados antes e depois das atualizações

5-4. Gerenciamento de Dados Temporários por Usuário

Problema

Se os dados temporários específicos de cada usuário forem armazenados em uma tabela regular, dados desnecessários podem se acumular ao longo do tempo.

Solução

Tabelas temporárias removem automaticamente os dados quando a sessão termina, eliminando sobrecarga de manutenção.

Exemplo: Armazenar resultados de busca em uma tabela temporária
-- Store user-specific search results
CREATE TEMPORARY TABLE temp_search_results AS
SELECT * FROM products WHERE category = 'electronics';

-- Display search results
SELECT * FROM temp_search_results;
Benefícios
  • Os dados são removidos automaticamente quando a sessão termina
  • Os resultados de busca temporários podem ser reutilizados durante a sessão

5-5. Escolhendo Entre Tabelas Temporárias e Views

Problema

Ao otimizar consultas executadas com frequência, pode surgir a dúvida de usar uma tabela temporária ou uma VIEW, especialmente se for necessário armazenamento de dados temporários.

Solução

  • Se os dados não mudam com frequênciaUse uma view (VIEW)
  • Se os dados mudam frequentemente ou precisam ser materializadosUse uma tabela temporária
Exemplo: Usando uma tabela temporária
CREATE TEMPORARY TABLE temp_high_value_customers AS
SELECT customer_id, SUM(total_price) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 50000;

SELECT * FROM temp_high_value_customers;
Exemplo: Usando uma view
CREATE VIEW high_value_customers AS
SELECT customer_id, SUM(total_price) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 50000;
Benefícios
  • Tabelas temporárias armazenam os dados fisicamente, o que pode melhorar o desempenho
  • Views são convenientes para reutilização de consultas, mas o desempenho pode diminuir com conjuntos de dados grandes

Resumo

Nesta seção, apresentamos cinco casos de uso práticos para tabelas temporárias do MySQL.

✔ Recapitulação rápida

  1. Otimizar o desempenho da consulta (reduzir a sobrecarga de JOIN) → Armazene apenas os dados necessários em uma tabela temporária antes de executar o JOIN
  2. Processamento de agregação temporária → Armazene resultados agregados para evitar cálculos repetidos
  3. Dados intermediários para processamento em lote → Manipule atualizações em grande escala com segurança
  4. Gerenciamento de dados temporários por usuário → Os dados são removidos automaticamente quando a sessão termina
  5. Escolher entre tabelas temporárias e views → Use tabelas temporárias para dados que mudam, views para reutilização estável de consultas

6. Três Precauções Importantes ao Usar Tabelas Temporárias do MySQL com Segurança

Introdução

Tabelas temporárias do MySQL operam de forma independente por sessão e são removidas automaticamente sob certas condições, tornando‑as um recurso conveniente. Contudo, o uso inadequado pode levar à degradação de desempenho ou a erros inesperados.

Nesta seção, explicamos três precauções importantes para garantir o uso seguro de tabelas temporárias.

6-1. Precaução 1: Não Dependa Excessivamente da Remoção Automática

Problema

Como as tabelas temporárias são removidas automaticamente quando a sessão termina, pode parecer desnecessário descartá‑las explicitamente. No entanto, isso pode, às vezes, causar problemas não intencionais.

Exemplos de problemas

  • Conexões de longa duração continuam consumindo memória
  • Se uma sessão permanecer aberta, as tabelas temporárias não são removidas e continuam consumindo recursos do banco de dados.
  • Falha ao descartar explicitamente pode causar falhas de design
  • Se um processo em lote reconectar inesperadamente, a tabela temporária pode desaparecer e causar erros.

Solução

  • Descartar explicitamente tabelas temporárias quando não forem mais necessárias usando DROP TEMPORARY TABLE
  • Em conexões de longa duração (por exemplo, jobs em lote), descartar tabelas temporárias periodicamente
Exemplo: Descartar explicitamente uma tabela temporária
DROP TEMPORARY TABLE IF EXISTS temp_users;

Ponto chave

  • Adicionar IF EXISTS impede erros caso a tabela não exista.

6-2. Precaução 2: Evitar Conflitos de Nome com Tabelas Regulares

Problema

Você pode criar uma tabela temporária com o mesmo nome de uma tabela regular. No entanto, ao fazer isso, a tabela regular torna-se temporariamente invisível.

Exemplo do problema

-- A regular users table exists
SELECT * FROM users;

-- Create a temporary table with the same name
CREATE TEMPORARY TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

-- This now returns data from the temporary table, not the regular one
SELECT * FROM users;

Enquanto a tabela temporária existir, a tabela regular com o mesmo nome fica oculta, o que pode levar a erros inesperados na recuperação de dados.

Solução

  • Use um prefixo como “temp_” para nomes de tabelas temporárias
  • Adote uma convenção de nomenclatura clara para distinguir tabelas temporárias e regulares
Exemplo: Criação segura de tabela temporária
CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

Benefícios

  • Usar o prefixo temp_ evita conflitos com a tabela regular users.
  • Facilita a distinção de tabelas no código da aplicação.

6-3. Precaução 3: Índices e Restrições Não São Herdados Automaticamente

Problema

Se você criar uma tabela usando CREATE TEMPORARY TABLE ... AS SELECT ..., índices e restrições da tabela original não são herdados, o que pode degradar o desempenho.

Exemplo do problema

-- Regular users table (with indexes)
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(100) UNIQUE,
    name VARCHAR(50)
);

-- Create temporary table (indexes are NOT inherited)
CREATE TEMPORARY TABLE temp_users AS
SELECT id, email, name FROM users;

Neste caso, as restrições PRIMARY KEY e UNIQUE não são transferidas para temp_users, o que pode tornar as buscas mais lentas e permitir dados duplicados.

Solução

  • Adicionar explicitamente índices após criar a tabela temporária
  • Se definir colunas manualmente com CREATE TEMPORARY TABLE, especificar índices durante a criação
Exemplo: Adicionar índices manualmente
CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(100) UNIQUE,
    name VARCHAR(50)
);

ALTER TABLE temp_users ADD INDEX idx_email (email);

Esta abordagem permite criar uma tabela temporária com índices semelhantes aos da tabela original.

Resumo

Nesta seção, explicamos três precauções importantes para usar tabelas temporárias com segurança.

✔ Recapitulação rápida

  1. Não dependa excessivamente da remoção automática
  • Descartar explicitamente tabelas temporárias usando DROP TEMPORARY TABLE
  • Removê-las periodicamente em sessões de longa duração
  1. Evite conflitos de nome com tabelas regulares
  • Se uma tabela regular com o mesmo nome existir, a tabela temporária tem precedência
  • Use um prefixo como temp_ para distinguir claramente
  1. Índices e restrições não são herdados automaticamente
  • Com CREATE TEMPORARY TABLE ... AS SELECT ..., os índices são perdidos
  • Adicione índices manualmente após a criação

Mantendo esses pontos em mente, você pode usar tabelas temporárias do MySQL com segurança, melhorando o desempenho do banco de dados.

7. 10 Perguntas Frequentes (FAQ) Sobre Tabelas Temporárias MySQL

Introdução

Nesta seção, respondemos a 10 perguntas frequentes sobre tabelas temporárias MySQL.
Cobrimos como elas funcionam, suas limitações, considerações de desempenho e solução de problemas em cenários práticos.

7-1. Perguntas Sobre Especificações Básicas

Q1. Uma tabela temporária pode ser acessada a partir de outra sessão?

A. Não, não pode.
Uma tabela temporária é válida apenas dentro da sessão que a criou e não pode ser acessada por outras sessões.

-- Created in Session A
CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

-- Attempt to access from Session B (results in error)
SELECT * FROM temp_users;

Erro:

ERROR 1146 (42S02): Table 'temp_users' doesn't exist

Se precisar compartilhar dados entre sessões, deve usar uma tabela regular.

Q2. As tabelas temporárias são armazenadas em disco?

A. Elas geralmente são armazenadas na memória, mas podem ser movidas para o disco sob certas condições.
Se o tamanho da tabela exceder tmp_table_size ou max_heap_table_size, o MySQL pode criar a tabela temporária no disco usando InnoDB ou MyISAM.

SHOW VARIABLES LIKE 'tmp_table_size';

Para melhorar o desempenho, configure tmp_table_size adequadamente.

Q3. Posso criar índices em uma tabela temporária?

A. Sim, pode.
Você pode definir PRIMARY KEY ou INDEX assim como em uma tabela regular.

CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(100) UNIQUE,
    name VARCHAR(50)
);

ALTER TABLE temp_users ADD INDEX idx_email (email);

Entretanto, se usar CREATE TEMPORARY TABLE ... AS SELECT ..., os índices não são herdados, portanto você deve adicioná-los manualmente.

7-2. Perguntas Sobre Desempenho e Comportamento

Q4. Houve mudanças nas tabelas temporárias no MySQL 8.0?

A. O MySQL 8.0 introduziu Expressões de Tabela Comum (CTEs) usando a cláusula WITH.
A partir do MySQL 8.0, você pode processar conjuntos de resultados temporários usando CTEs sem criar explicitamente uma tabela temporária.

WITH temp_users AS (
    SELECT id, name FROM users WHERE status = 'active'
)
SELECT * FROM temp_users;

Usar CTEs em vez de tabelas temporárias pode simplificar consultas e reduzir o uso de memória.

Q5. Qual é a diferença entre uma tabela temporária e uma tabela MEMORY?

A. Uma tabela MEMORY persiste além de uma sessão, enquanto uma tabela temporária não.
Uma tabela temporária é removida quando a sessão termina, enquanto uma tabela MEMORY permanece até que o servidor reinicie (ou seja explicitamente descartada).

CREATE TABLE memory_table (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) ENGINE=MEMORY;

Quando usar cada uma?

  • Tabela temporária: Processamento de curto prazo, escopo de sessão
  • Tabela MEMORY: Acesso de alta velocidade com persistência ao nível do servidor

7-3. Perguntas Sobre Exclusão e Solução de Problemas

Q6. Posso excluir uma tabela temporária usando DROP TABLE?

A. Não, você deve usar DROP TEMPORARY TABLE.
Sempre use DROP TEMPORARY TABLE ao remover uma tabela temporária.

DROP TEMPORARY TABLE temp_users;

Usar um DROP TABLE regular pode resultar em um erro.

Q7. Por que SHOW TABLES não exibe tabelas temporárias?

A. Tabelas temporárias não são listadas por SHOW TABLES.
Para verificar sua existência, consulte INFORMATION_SCHEMA.

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = DATABASE() 
AND TABLE_NAME = 'temp_users';

Se nenhum resultado for retornado, a tabela temporária pode já ter sido removida.

Resumo

Nesta seção, abordamos 10 perguntas frequentes sobre tabelas temporárias MySQL.

✔ Recapitulação rápida

  1. Tabelas temporárias não podem ser acessadas por outras sessões
  2. São criadas na memória, mas podem ser movidas para o disco se forem grandes
  3. Índices devem ser definidos manualmente ao usar AS SELECT
  4. CTEs (WITH) estão disponíveis no MySQL 8.0+
  5. Ao contrário das tabelas MEMORY, tabelas temporárias desaparecem ao final da sessão
  6. Use DROP TEMPORARY TABLE para removê‑las
  7. SHOW TABLES não exibe tabelas temporárias

8. Resumo: Pontos‑chave para usar tabelas temporárias MySQL de forma eficaz

Introdução

As tabelas temporárias do MySQL são uma ferramenta poderosa para armazenar dados intermediários e otimizar o desempenho de consultas.
Aqui, resumimos os pontos principais abordados ao longo deste guia.

8-1. Conceitos básicos das tabelas temporárias MySQL

O que é uma tabela temporária?

  • Existe de forma independente por sessão
  • Removida automaticamente quando a sessão termina
  • Suporta INSERT, UPDATE e DELETE como uma tabela regular

Sintaxe básica de criação

CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100)
);

Principais casos de uso

  • Armazenamento temporário de dados
  • Otimização do desempenho de consultas
  • Tabelas intermediárias para processamento em lote
  • Gerenciamento de dados temporários por usuário

8-2. Vantagens das tabelas temporárias

1) Melhorar o desempenho de consultas

  • Reduzir a carga de JOIN
  • Realizar agregação antecipada para reduzir cálculos repetidos
  • Simplificar consultas excluindo dados desnecessários
Exemplo: Reduzir a sobrecarga de JOIN
CREATE TEMPORARY TABLE temp_active_users AS
SELECT id, name FROM users WHERE status = 'active';

SELECT o.order_id, t.name, o.total_price
FROM orders o
JOIN temp_active_users t ON o.customer_id = t.id;

2) Armazenamento temporário e gerenciamento baseado em sessão

  • Removida automaticamente ao final da sessão
  • Ideal para armazenamento de dados de curto prazo
  • Manipulação de dados independente sem afetar outras sessões
Exemplo: Armazenamento temporário de resultados de busca
CREATE TEMPORARY TABLE temp_search_results AS
SELECT * FROM products WHERE category = 'electronics';

SELECT * FROM temp_search_results;

3) Atualizações de dados seguras

  • Útil como tabela intermediária em processamento em lote
  • Pode servir como backup durante atualizações de dados
  • Eficaz para criar conjuntos de dados de teste
Exemplo: Atualização de dados segura
CREATE TEMPORARY TABLE temp_orders AS
SELECT order_id, total_price FROM orders WHERE status = 'pending';

UPDATE orders o
JOIN temp_orders t ON o.order_id = t.order_id
SET o.total_price = t.total_price * 1.1;

8-3. Desvantagens e precauções

1) Dados desaparecem quando a sessão termina

  • Não adequado para armazenamento permanente
  • Use tabelas regulares para persistência de longo prazo

2) Não pode ser compartilhada entre sessões

  • Não acessível a partir de outras conexões
  • Use tabelas regulares ao compartilhar dados entre usuários

3) Índices e restrições não são herdados automaticamente

  • CREATE TEMPORARY TABLE ... AS SELECT ... não cria índices
  • Adicione índices manualmente se necessário
    ALTER TABLE temp_users ADD INDEX idx_email (email);
    

8-4. Boas práticas para uso seguro

Excluir explicitamente quando não for mais necessário

DROP TEMPORARY TABLE IF EXISTS temp_users;

Evitar conflitos de nomes com tabelas regulares

  • Use o prefixo temp_
    CREATE TEMPORARY TABLE temp_users (...);
    

Projetar pensando no desempenho

  • Se a tabela crescer muito e for movida para o disco, considere ajustar tmp_table_size
    SHOW VARIABLES LIKE 'tmp_table_size';
    

8-5. Tabelas temporárias vs alternativas (Views e CTEs)

Também é importante considerar quando usar tabelas temporárias em vez de views (VIEW) ou CTEs (Common Table Expressions).

MethodCharacteristicsBest Use Case
Temporary tableRemoved at session endWhen you need to store intermediate data
View (VIEW)Data retrieved in real time; performance may degrade with large datasetsSave and reuse frequently referenced queries
CTE (WITH clause)Virtual table valid only within a single queryHandle temporary data without creating a table

Resumo

Neste guia, abordamos todos os aspectos principais das tabelas temporárias do MySQL.

✔ Recapitulação rápida

  • Tabelas temporárias são removidas automaticamente quando a sessão termina
  • Elas ajudam a otimizar o desempenho ao reduzir a sobrecarga de JOIN e agregação
  • São úteis para processamento em lote, resultados de busca temporários e dados de teste
  • Não podem ser compartilhadas entre sessões, e índices devem ser adicionados manualmente quando necessário
  • Escolher entre tabelas temporárias, visualizações e CTEs permite uma gestão flexível de dados

Você completou todas as seções do guia de tabelas temporárias do MySQL! 🎉
Use esta referência para aproveitar efetivamente as tabelas temporárias em seus projetos MySQL.