SQL 臨時(shí)表

2022-05-20 16:37 更新

SQL 臨時(shí)表


 某些關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)支持臨時(shí)表。臨時(shí)表是一項(xiàng)很棒的特性,能夠讓你像操作普通的 SQL 數(shù)據(jù)表一樣,使用 SELECT、UPDATE 和 JOIN 等功能來(lái)存儲(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í)表了,不過(guò)你可以使用堆表(heap table)。

 如先前所言,臨時(shí)表只在會(huì)話期間存在。如果你在 PHP 腳本中操作數(shù)據(jù)庫(kù),那么臨時(shí)表將在腳本執(zhí)行完畢時(shí)被自動(dòng)銷(xiāo)毀。如果你是通過(guò) MySQL 的客戶端程序連接到 MySQL 數(shù)據(jù)庫(kù)服務(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ù)庫(kù)中取回任何數(shù)據(jù),你的臨時(shí)表也已經(jīng)不復(fù)存在了。


刪除臨時(shí)表


 默認(rèn)情況下,所有的臨時(shí)表都由 MySQL 在數(shù)據(jù)庫(kù)連接關(guān)閉時(shí)刪除。不過(guò),有時(shí)候你還是會(huì)想要在會(huì)話期間將其刪除,此時(shí)你需要使用 DROP TABLE 命令來(lái)達(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
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)