SQL - Tabelas Temporárias

O que são tabelas temporárias?

Existem RDBMS, que suportam tabelas temporárias. Tabelas temporárias são um ótimo recurso que permite que vocêstore and process intermediate results usando os mesmos recursos de seleção, atualização e junção que você pode usar com tabelas típicas do SQL Server.

As tabelas temporárias podem ser muito úteis em alguns casos para manter dados temporários. A coisa mais importante que deve ser conhecida sobre as tabelas temporárias é que elas serão excluídas quando a sessão atual do cliente terminar.

As tabelas temporárias estão disponíveis no MySQL versão 3.23 em diante. Se você usa uma versão anterior do MySQL que 3.23, você não pode usar tabelas temporárias, mas você pode usarheap tables.

Conforme declarado anteriormente, as tabelas temporárias durarão apenas enquanto a sessão estiver ativa. Se você executar o código em um script PHP, a tabela temporária será destruída automaticamente quando a execução do script terminar. Se você estiver conectado ao servidor de banco de dados MySQL por meio do programa cliente MySQL, a tabela temporária existirá até que você feche o cliente ou destrua manualmente a tabela.

Exemplo

Aqui está um exemplo que mostra o uso de uma mesa temporária.

mysql> CREATE TEMPORARY TABLE SALESSUMMARY (
   -> product_name VARCHAR(50) NOT NULL
   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SALESSUMMARY
   -> (product_name, total_sales, avg_unit_price, total_units_sold)
   -> VALUES
   -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SALESSUMMARY;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     |      100.25 |          90.00 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)

Ao emitir um comando SHOW TABLES, sua tabela temporária não será listada. Agora, se você efetuar logout da sessão do MySQL e emitir um comando SELECT, não encontrará dados disponíveis no banco de dados. Mesmo sua mesa temporária não existirá.

Descartando tabelas temporárias

Por padrão, todas as tabelas temporárias são excluídas pelo MySQL quando sua conexão com o banco de dados é encerrada. Ainda assim, se quiser excluí-los no meio, você pode fazer isso emitindo umDROP TABLE comando.

A seguir está um exemplo de eliminação de uma mesa temporária.

mysql> CREATE TEMPORARY TABLE SALESSUMMARY (
   -> product_name VARCHAR(50) NOT NULL
   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SALESSUMMARY
   -> (product_name, total_sales, avg_unit_price, total_units_sold)
   -> VALUES
   -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SALESSUMMARY;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     |      100.25 |          90.00 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
mysql> DROP TABLE SALESSUMMARY;
mysql>  SELECT * FROM SALESSUMMARY;
ERROR 1146: Table 'TUTORIALS.SALESSUMMARY' doesn't exist