當需要保存臨時數(shù)據(jù)時,使用臨時表就會很方便。需要注意的一點是:在當前用戶會話終止時,臨時表會被清除。
MySQL 是從 3.23 版開始引入臨時表這一概念。如果使用 3.23 之前的 MySQL版本,則無法使用臨時表,但可以使用堆表(HEAP table)。
如上所述,臨時表只能在會話生存期內(nèi)存在。如果在 PHP 腳本中運行代碼,那么當腳本結(jié)束執(zhí)行時,就會自動清除臨時表。如果通過 MySQL 客戶端程序連接 MySQL 數(shù)據(jù)庫服務(wù)器,那么臨時表就會一直存在,除非關(guān)閉客戶端或者手動清除該表。
下面范例將展示臨時表的用法。同樣的代碼也可通過 mysql_query() 用于 PHP 腳本中。
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 命令顯示表時,臨時表不會出現(xiàn)在結(jié)果列表中。如果退出 MySQL 會話,就會執(zhí)行 SELECT 命令,那么數(shù)據(jù)庫中將沒有任何數(shù)據(jù),甚至臨時表也不存在了。
默認情況下,當與數(shù)據(jù)庫的連接終止時,臨時表就不再存在。不過如果想在數(shù)據(jù)庫處于連接時就刪除它們,可以用 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