- 1 1. (Iniciante) O que é uma Tabela Temporária MySQL? Diferenças em relação às Tabelas Normais
- 2 2. (Com Código de Exemplo) Como Criar uma Tabela Temporária no MySQL
- 2.1 Introdução
- 2.2 2-1. Sintaxe Básica para uma Tabela Temporária
- 2.3 2-2. Criar uma Tabela Temporária Baseada em Dados de uma Tabela Existente
- 2.4 2-3. Como Verificar Dados de uma Tabela Temporária
- 2.5 2-4. Inserir Dados em uma Tabela Temporária
- 2.6 2-5. Observações ao Criar Tabelas Temporárias
- 2.7 Resumo
- 3 3. Como Manipular Dados em uma Tabela Temporária MySQL (INSERT, UPDATE, DELETE)
- 4 4. As Tabelas Temporárias do MySQL São Removidas Automaticamente? Como Excluí‑las Manualmente
- 5 5. 5 Casos de Uso Práticos para Tabelas Temporárias MySQL (Incluindo Otimização de Desempenho)
- 5.1 Introdução
- 5.2 5-1. Otimizar o Desempenho de Consultas (Reduzir Sobrecarga de JOIN)
- 5.3 5-2. Processamento de Agregação Temporária
- 5.4 5-3. Armazenar Dados Intermediários para Processamento em Lote
- 5.5 5-4. Gerenciamento de Dados Temporários por Usuário
- 5.6 5-5. Escolhendo Entre Tabelas Temporárias e Views
- 5.7 Resumo
- 6 6. Três Precauções Importantes ao Usar Tabelas Temporárias do MySQL com Segurança
- 7 7. 10 Perguntas Frequentes (FAQ) Sobre Tabelas Temporárias MySQL
- 8 8. Resumo: Pontos‑chave para usar tabelas temporárias MySQL de forma eficaz
- 8.1 Introdução
- 8.2 8-1. Conceitos básicos das tabelas temporárias MySQL
- 8.3 8-2. Vantagens das tabelas temporárias
- 8.4 8-3. Desvantagens e precauções
- 8.5 8-4. Boas práticas para uso seguro
- 8.6 8-5. Tabelas temporárias vs alternativas (Views e CTEs)
- 8.7 Resumo
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.
| Comparison | Temporary Table | Regular Table |
|---|---|---|
| Data retention | Valid only during the session (automatically removed) | Stored permanently |
| Access scope | Only within the session that created it | Accessible to all users (subject to privileges) |
| Name conflicts | You can create temporary tables with the same name | You cannot create another table with the same name in the same database |
| Required privileges | Requires the CREATE TEMPORARY TABLES privilege | Requires the standard CREATE TABLE privilege |
| Indexes | Supported | Supported |
| Performance | Often created in memory and can be fast | Stored 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 processamento → Tabela temporária
- Se você deseja manter os dados permanentemente e reutilizá‑los depois → Tabela 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;TRUNCATEnã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 EXISTSpara 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ência → Use uma view (VIEW)
- Se os dados mudam frequentemente ou precisam ser materializados → Use 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
- 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
- Processamento de agregação temporária → Armazene resultados agregados para evitar cálculos repetidos
- Dados intermediários para processamento em lote → Manipule atualizações em grande escala com segurança
- Gerenciamento de dados temporários por usuário → Os dados são removidos automaticamente quando a sessão termina
- 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 EXISTSimpede 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 regularusers. - 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
- 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
- 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
- Í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
- Tabelas temporárias não podem ser acessadas por outras sessões
- São criadas na memória, mas podem ser movidas para o disco se forem grandes
- Índices devem ser definidos manualmente ao usar AS SELECT
- CTEs (
WITH) estão disponíveis no MySQL 8.0+ - Ao contrário das tabelas MEMORY, tabelas temporárias desaparecem ao final da sessão
- Use
DROP TEMPORARY TABLEpara removê‑las SHOW TABLESnã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,UPDATEeDELETEcomo 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_sizeSHOW 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).
| Method | Characteristics | Best Use Case |
|---|---|---|
| Temporary table | Removed at session end | When you need to store intermediate data |
| View (VIEW) | Data retrieved in real time; performance may degrade with large datasets | Save and reuse frequently referenced queries |
| CTE (WITH clause) | Virtual table valid only within a single query | Handle 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.


