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

SQL臨時表

RDBMS有支持臨時表。 臨時表是一個偉大的功能,讓您存儲和使用如:選擇,更新過程中間結果,並加入功能,可以與典型的SQL Server表使用。

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

臨時表可在MySQL版本3.23以上使用。如果你使用MySQL的舊版本比3.23,則不能使用臨時表,但可以使用堆表。

如前所述,臨時表將隻要會話持續就活著。如果在一個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