位置:首頁 > 數據庫 > MySQL教學 > MySQL臨時表

MySQL臨時表

臨時表可能在某些情況下是非常有用的,以保持臨時數據。 臨時表的最重要的事情是,當前客戶端會話結束時,它們將會被刪除。

臨時表是在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