?>
1-mysql Básico
Exercícios
?>

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:

DROP TEMPORARY TABLE table_name;

Por exemplo, para deletarmos a tabela "top_customers", fazemos:

DROP TEMPORARY TABLE top_customers;
voltar ao início da página