在本教學中,我們將討論MySQL臨時表,並演示如何建立,使用和刪除臨時表。
在MySQL中,臨時表是一種特殊型別的表,它允許您儲存一個臨時結果集,可以在單個對談中多次重用。
當使用JOIN子句查詢需要單個SELECT語句的資料是不可能或遇到瓶頸的時候,臨時表非常方便。 在這種情況下,我們就可以使用臨時表來儲存直接結果,並使用另一個查詢來處理它。
MySQL臨時表具有以下特殊功能:
使用CREATE TEMPORARY TABLE
語句建立臨時表。請注意,在CREATE
和TABLE
關鍵字之間新增TEMPORARY
關鍵字。
當對談結束或連線終止時,MySQL會自動刪除臨時表。當您不再使用臨時表時,也可以使用DROP TABLE語句來顯式刪除臨時表。
一個臨時表只能由建立它的客戶機存取。不同的用戶端可以建立具有相同名稱的臨時表,而不會導致錯誤,因為只有建立臨時表的用戶端才能看到它。 但是,在同一個對談中,兩個臨時表不能共用相同的名稱。
臨時表可以與資料庫中的普通表具有相同的名稱。 例如,如果在範例資料庫(yiibaidb)中建立一個名為employees
的臨時表,則現有的employees
表將變得無法存取。 對employees
表發出的每個查詢現在都是指employees
臨時表。 當刪除您
臨時表時,永久employees
表可以再次存取。
注意:即使臨時表可以與永久表具有相同的名稱,但不推薦。 因為這可能會導致混亂,並可能導致意外的資料丟失。例如,如果與資料庫伺服器的連線丟失,並且您自動重新連線到伺服器,則不能區分臨時表和永久性表。 然後,你又發出一個
DROP TABLE
語句,這個時候刪除的可能是永久表而不是臨時表,這種結果是不可預料的。
要建立臨時表,只需要將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;
您可以使用DROP TABLE
語句來刪除臨時表,但最好新增TEMPORARY
關鍵字如下:
DROP TEMPORARY TABLE table_name;
DROP TEMPORARY TABLE
語句僅刪除臨時表,而不是永久表。 當將臨時表命名為永久表的名稱相同時,它可以避免刪除永久表的錯誤
例如,要刪除top10customers
臨時表,請使用以下語句:
DROP TEMPORARY TABLE top10customers;
請注意,如果嘗試使用DROP TEMPORARY TABLE
語句刪除永久表,則會收到一條錯誤訊息,指出您嘗試刪除的表是未知的。
如果開發使用連線池或持久連線的應用程式,則不能保證臨時表在應用程式終止時自動刪除。
因為應用程式使用的資料庫連線可能仍然開啟並放置在其他用戶端使用的連線池中。 因此,當不再使用它們時馬上刪除臨時表,這是一個很好的做法。
在本教學中,您已經了解了MySQL臨時表以及如何管理臨時表,例如建立和刪除新臨時表。