鍍金池/ 教程/ 數(shù)據(jù)庫/ SQL 臨時(shí)表
SQL AND 和 OR 連接運(yùn)算符
SQL 刪除數(shù)據(jù)庫
SQL 使用序列
SQL CONCAT 函數(shù)
SQL 使用視圖
SQL SELECT 語句
SQL 別名
SQL MAX 函數(shù)
SQL 創(chuàng)建表
SQL NULL 值
SQL 數(shù)據(jù)類型
SQL RAND 函數(shù)
SQL 臨時(shí)表
SQL INSERT 語句
SQL ALTER TABLE 命令
SQL 關(guān)系型數(shù)據(jù)庫管理系統(tǒng)
SQL SUM 函數(shù)
SQL 子查詢
SQL UPDATE 語句
SQL 表達(dá)式
SQL 操作符
SQL ORDER BY 子句
SQL WHERE 子句
SQL 對(duì)結(jié)果進(jìn)行排序
SQL 注入
SQL AVG 函數(shù)
SQL 選擇數(shù)據(jù)庫,USE 語句
SQL 克隆數(shù)據(jù)表
SQL COUNT 函數(shù)
SQL 語法
SQL DELETE 語句
SQL 約束
SQL 刪除表
SQL TOP、LIMIT 和 ROWNUM 子句
SQL 日期函數(shù)
SQL TRUNCATE TABLE 命令
SQL DISTINCT 關(guān)鍵字
SQL 處理重復(fù)數(shù)據(jù)
SQL 使用連接
SQL 索引
SQL 事務(wù)
SQL GROUP BY 子句
SQL HAVING 子句
SQL MIN 函數(shù)
SQL 概覽
SQL SQRT 函數(shù)
SQL LIKE 子句
SQL 通配符
SQL UNION 子句
SQL 數(shù)據(jù)庫
SQL 創(chuàng)建數(shù)據(jù)庫

SQL 臨時(shí)表

某些關(guān)系型數(shù)據(jù)庫管理系統(tǒng)支持臨時(shí)表。臨時(shí)表是一項(xiàng)很棒的特性,能夠讓你像操作普通的 SQL 數(shù)據(jù)表一樣,使用 SELECT、UPDATE 和 JOIN 等功能來存儲(chǔ)或者操作中間結(jié)果。

臨時(shí)表有時(shí)候?qū)τ诒4媾R時(shí)數(shù)據(jù)非常有用。有關(guān)臨時(shí)表你需要知道的最重要的一點(diǎn)是,它們會(huì)在當(dāng)前的終端會(huì)話結(jié)束后被刪除。

臨時(shí)表自 MySQL 3.23 起受到支持。如果你的 MySQL 版本比 3.23 還老,那么你就不能使用臨時(shí)表了,不過你可以使用堆表(heap table)。

如先前所言,臨時(shí)表只在會(huì)話期間存在。如果你在 PHP 腳本中操作數(shù)據(jù)庫,那么臨時(shí)表將在腳本執(zhí)行完畢時(shí)被自動(dòng)銷毀。如果你是通過 MySQL 的客戶端程序連接到 MySQL 數(shù)據(jù)庫服務(wù)器的,那么臨時(shí)表將會(huì)存在到你關(guān)閉客戶端或者手動(dòng)將其刪除。

示例:

下面的示例向你展示了如何使用臨時(shí)表:

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)

當(dāng)你下達(dá) SHOW TABLES 命令的時(shí)候,臨時(shí)表是不會(huì)出現(xiàn)在結(jié)果列表當(dāng)中的?,F(xiàn)在,如果你退出 MySQL 會(huì)話,然后再執(zhí)行 SELECT 命令的話,你將不能從數(shù)據(jù)庫中取回任何數(shù)據(jù),你的臨時(shí)表也已經(jīng)不復(fù)存在了。

刪除臨時(shí)表:

默認(rèn)情況下,所有的臨時(shí)表都由 MySQL 在數(shù)據(jù)庫連接關(guān)閉時(shí)刪除。不過,有時(shí)候你還是會(huì)想要在會(huì)話期間將其刪除,此時(shí)你需要使用 DROP TABLE 命令來達(dá)到目的。

下面是刪除臨時(shí)表的示例:

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