Capítulo 3
2- Tabela Temporária
No MySQL, uma tabela temporária é um tipo especial de tabela que permite armazenar um conjunto de resultados temporário, que pode ser reutilizado várias vezes em uma única sessão.
Uma tabela temporária é muito útil quando for difícil consultar dados que requerem uma única instrução SELECT com as cláusulas JOIN.
Nesse caso, você pode usar uma tabela temporária para armazenar o resultado imediato e usar outra consulta para processá-lo.
Uma tabela temporária MySQL tem as seguintes características:
Uma tabela temporária é criada usando a instrução CREATE TEMPORARY TABLE.
Observe que a palavra-chave TEMPORARY é adicionada entre as palavras-chave CREATE e TABLE.
O MySQL remove a tabela temporária automaticamente quando a sessão termina ou a conexão é encerrada.
Obviamente, você pode usar a instrução DROP TABLE para remover uma tabela temporária explicitamente quando não a estiver mais usando.
Uma tabela temporária está disponível e acessível apenas para quem a cria.
Usuário diferentes podem criar tabelas temporárias com o mesmo nome sem causar erros, porque apenas o usuário que cria a tabela temporária pode vê-la.
Na mesma sessão, duas tabelas temporárias não podem compartilhar o mesmo nome.
Uma tabela temporária pode ter o mesmo nome de uma tabela normal em um banco de dados. Por exemplo, se você criar uma tabela temporária chamada funcionários no banco de dados de exemplo, a tabela de funcionários existente ficará inacessível. Cada consulta que você emite na tabela de funcionários agora está se referindo aos funcionários da tabela temporária. Quando você descarta a tabela temporária de funcionários, a tabela de funcionários permanentes fica disponível e acessível.
Mesmo que uma tabela temporária possa ter o mesmo nome de uma tabela permanente, isso não é recomendado. Porque isso pode causar confusão e, potencialmente, causar uma perda inesperada de dados.
Por exemplo, no caso de a conexão com o servidor de banco de dados ser perdida e você se reconectar ao servidor automaticamente, não é possível diferenciar entre a tabela temporária e a permanente.
Em seguida, você pode emitir uma instrução DROP TABLE para remover a tabela permanente em vez da tabela temporária, o que não é esperado.
Para evitar esse problema, você pode usar a instrução DROP TEMPORARY TABLE para eliminar uma tabela temporária.
A sintaxe da instrução CREATE TEMPORARY TABLE é semelhante à sintaxe da instrução CREATE TABLE, exceto pela palavra-chave TEMPORARY:
Sintaxe da Temporary Table
A sintaxe básica é:Sintaxe de uma Tabela Temporária
CREATE TEMPORARY TABLE table_name(
column_1_definition,
column_2_definition,
...,
table_constraints
);
Para criar uma tabela temporária cuja estrutura é baseada em uma tabela existente deve-se usar a seguinte sintaxe:
Sintaxe de uma Tabela Temporária
CREATE TEMPORARY TABLE temp_table_name
SELECT * FROM original_table
LIMIT 0;
Nos exemplos que se seguem, usamos o banco de dados classicmodels dado no tutorial no qual baseamos essa seção. Veja mais clicando aqui. Ou fazendo o dowload do banco aqui.
Exemplo 1: Criando uma Tabela Temporária
Tabela Temporária 'credits'
CREATE TEMPORARY TABLE credits(
customerNumber INT PRIMARY KEY,
creditLimit DEC(10,2)
);
Inserindo Dados na Tabela Temporária 'credits'
INSERT INTO credits(customerNumber,creditLimit)
SELECT customerNumber, creditLimit
FROM customers
WHERE creditLimit > 0;
Exemplo 2: Criação de uma tabela temporária a partir de uma consulta
Criando Temporay Table a partir de uma Consulta
CREATE TEMPORARY TABLE top_customers
SELECT p.customerNumber,
c.customerName,
ROUND(SUM(p.amount),2) sales
FROM payments p
INNER JOIN customers c ON c.customerNumber = p.customerNumber
GROUP BY p.customerNumber
ORDER BY sales DESC
LIMIT 10;
Agora, podemos consultar dados da tabela temporária "top_customers" como se fosse uma tabela permanente:
Consultando Tabela Temporária
SELECT
customerNumber,
customerName,
sales
FROM
top_customers
ORDER BY sales;
Descartando uma tabela temporária
Usamos a instrução DROP TABLE para remover tabelas temporárias; no entanto, é uma boa prática adicionar a palavra-chave TEMPORARY da seguinte forma:
Por exemplo, para deletarmos a tabela "top_customers", fazemos: