某些關系型數據庫管理系統支持臨時表。臨時表是一項很棒的特性,能夠讓你像操作普通的 SQL 數據表一樣,使用 SELECT、UPDATE 和 JOIN 等功能來存儲或者操作中間結果。
臨時表有時候對于保存臨時數據非常有用。有關臨時表你需要知道的最重要的一點是,它們會在當前的終端會話結束后被刪除。
臨時表自 MySQL 3.23 起受到支持。如果你的 MySQL 版本比 3.23 還老,那么你就不能使用臨時表了,不過你可以使用堆表(heap table)。
如先前所言,臨時表只在會話期間存在。如果你在 PHP 腳本中操作數據庫,那么臨時表將在腳本執行完畢時被自動銷毀。如果你是通過 MySQL 的客戶端程序連接到 MySQL 數據庫服務器的,那么臨時表將會存在到你關閉客戶端或者手動將其刪除。
下面的示例向你展示了如何使用臨時表:
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 'TUTORIALS.SALESSUMMARY' doesn't exist