在本教學中,我們將討論MySQL臨時表,並演示如何創建,使用和刪除臨時表。
MySQL臨時表簡介
在MySQL中,臨時表是一種特殊類型的表,它允許您存儲一個臨時結果集,可以在單個會話中多次重用。
當使用JOIN子句查詢需要單個SELECT語句的數據是不可能或遇到瓶頸的時候,臨時表非常方便。 在這種情況下,我們就可以使用臨時表來存儲直接結果,並使用另一個查詢來處理它。
MySQL臨時表具有以下特殊功能:
使用
CREATE TEMPORARY TABLE
語句創建臨時表。請注意,在CREATE
和TABLE
關鍵字之間添加TEMPORARY
關鍵字。當會話結束或連接終止時,MySQL會自動刪除臨時表。當您不再使用臨時表時,也可以使用DROP TABLE語句來顯式刪除臨時表。
一個臨時表只能由創建它的客戶機訪問。不同的客戶端可以創建具有相同名稱的臨時表,而不會導致錯誤,因為只有創建臨時表的客戶端才能看到它。 但是,在同一個會話中,兩個臨時表不能共用相同的名稱。
臨時表可以與資料庫中的普通表具有相同的名稱。 例如,如果在示例資料庫(zaixiandb)中創建一個名為
employees
的臨時表,則現有的employees
表將變得無法訪問。 對employees
表發出的每個查詢現在都是指employees
臨時表。 當刪除您
臨時表時,永久employees
表可以再次訪問。
注意:即使臨時表可以與永久表具有相同的名稱,但不推薦。 因為這可能會導致混亂,並可能導致意外的數據丟失。例如,如果與資料庫伺服器的連接丟失,並且您自動重新連接到伺服器,則不能區分臨時表和永久性表。 然後,你又發出一個
DROP TABLE
語句,這個時候刪除的可能是永久表而不是臨時表,這種結果是不可預料的。
創建MySQL臨時表
要創建臨時表,只需要將TEMPORARY
關鍵字添加到CREATE TABLE
語句的中間。
例如,以下語句創建一個臨時表,按照收入存儲前10
名客戶:
CREATE TEMPORARY TABLE top10customers
SELECT p.customerNumber,
c.customerName,
FORMAT(SUM(p.amount),2) total
FROM payments p
INNER JOIN customers c ON c.customerNumber = p.customerNumber
GROUP BY p.customerNumber
ORDER BY total DESC
LIMIT 10;
現在,可以從top10customers
臨時表中查詢數據,例如:
SELECT * FROM top10customers;
刪除MySQL臨時表
您可以使用DROP TABLE
語句來刪除臨時表,但最好添加TEMPORARY
關鍵字如下:
DROP TEMPORARY TABLE table_name;
DROP TEMPORARY TABLE
語句僅刪除臨時表,而不是永久表。 當將臨時表命名為永久表的名稱相同時,它可以避免刪除永久表的錯誤
例如,要刪除top10customers
臨時表,請使用以下語句:
DROP TEMPORARY TABLE top10customers;
請注意,如果嘗試使用DROP TEMPORARY TABLE
語句刪除永久表,則會收到一條錯誤消息,指出您嘗試刪除的表是未知的。
如果開發使用連接池或持久連接的應用程式,則不能保證臨時表在應用程式終止時自動刪除。
因為應用程式使用的資料庫連接可能仍然打開並放置在其他客戶端使用的連接池中。 因此,當不再使用它們時馬上刪除臨時表,這是一個很好的做法。
在本教學中,您已經瞭解了MySQL臨時表以及如何管理臨時表,例如創建和刪除新臨時表。