臨時表可能在某些情況下是非常有用的,以保持臨時數據。 臨時表的最重要的事情是,當前客戶端會話結束時,它們將會被刪除。
臨時表是在MySQL版本3.23中增加的。如果使用MySQL 3.23之前的舊版本,是不能使用臨時表的,但可以使用堆表。
如前所述,臨時表將只持續在會話存在時。如果在運行一個PHP腳本代碼,臨時表會自動在腳本執行完畢時刪除。如果是通過MySQL客戶端程序連接到MySQL數據庫服務器, 那麼臨時表會一直存在,直到關閉客戶端或手動銷毀表。
下面是一個例子,顯示臨時表的使用。同樣的代碼可以在PHP腳本mysql_query()函數中使用。
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)
當發出SHOW TABLES命令,臨時表不會被列在表的列表中。現在,如果注銷MySQL會話,然後發出SELECT命令,那麼會發現在數據庫中沒有可用的數據。即使是臨時表也不存在了。
默認情況下,當數據庫連接被終止,所有的臨時表被MySQL刪除。盡管如此,如果想在結束會話前刪除它們,那麼可通過發出DROP TABLE命令。
以下是刪除一個臨時表的例子:
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 'test.SalesSummary' doesn't exist