您好,登錄后才能下訂單哦!
這篇文章主要介紹“MySQL臨時表如何使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“MySQL臨時表如何使用”文章能幫助大家解決問題。
在開發數據庫時,特別是寫存儲過程,遇到比較復雜的需求,使用臨時表可以簡化很多邏輯。曾經在一家互聯網金融公司供職,公司數據組團隊做數據清洗,寫SQL腳本時,一個查詢語句可以套到數層查詢,甚至十幾層。看起來幾百行上千行的腳本,其實他只是一個查詢,就是說是一個select基于另一個select的結果。這樣層層疊疊,同時還包含了聚合、排序、關聯、聯合等,看起來是相當的費勁,頭疼。
就如下列樣式:
SELECT T1.A1, T1.A2, T1.A3... FROM ( SELECT T2.B1, T2.B2, T2.B3... FROM ( SELECT ... UNION ALL SELECT ...) WHERE ... GROUP BY ...) T1, ( SELECT T3.C1, T3.C2, T3.C3... FROM ( SELECT ...) WHERE ... GROUP BY ...) T3 WHERE T1.A1 = T3.C1...
如果這里能使用臨時表,那么就會使邏輯清晰很多,查詢效率也會得到提升。比如在多處使用到同一個查詢的結果時,就可以只執行一次查詢,將結果保存為臨時表,在查詢過程中每次使用到時,直接從臨時表查就可以了,不用每次使用都再去查詢一遍原始數據,尤其是對于復雜關聯查詢結果。
當時數據是來源于呼叫中心,每天都會產生幾百萬行數據,一個月就上億行的數據量,就當時的機器性能基礎上,在這個數據量來做統計操作,如果沒有高效的腳本,是非常耗時間的。同時,數據組職員并沒有專業數據庫設計能力。
本文以數據庫World為例進行說明。
World數據庫中數據表country放著全世界國家的相關信息。
創建一個只存放亞洲國家信息的臨時表,命名為TempAsiaCountries。
這里臨時只取四個字段Code
,Name
,SufaceArea
,Population
,那么創建臨時表的腳本如下:
# 創建臨時表 CREATE TEMPORARY TABLE TempAsiaCountries ( `Code` VARCHAR (10), `name` VARCHAR (30), `SufaceArea` NUMERIC, `Population` NUMERIC );
創建完之后,會發現在數據庫的表目錄下并沒有這個表,因為表是臨時的,所以不會出現在表目錄里。
如同寫實體表數據一樣,可以通過INSERT INTO 關鍵字進行表插入數據操作。
# 寫數據到臨時表 INSERT INTO TempAsiaCountries SELECT `Code`, `Name`, `SurfaceArea`, `Population` FROM country WHERE `Continent` = 'Asia';
此時,可以通過SELECT操作查詢臨時表里的數據。
在實際使用臨時表時,可以更快速便捷的創建臨時表,如下腳本,直接以查詢結果創建臨時表的方法。
CREATE TEMPORARY TABLE TempAsiaCountries SELECT `Code`, `Name`, `SurfaceArea`, `Population` FROM country WHERE `Continent` = 'Asia';
對臨時表的查詢操作與實體表一樣,如下是查詢前文中所創建的臨時表中的數據
# 查詢臨時表 SELECT * FROM TempAsiaCountries;
可以看到查詢結果
# 刪除臨時表 DROP TABLE TempAsiaCountries;
此時再查,就會返回表不存在的結果
# 創建臨時表 CREATE TEMPORARY TABLE TempAsiaCountries ( `Code` VARCHAR (10), `name` VARCHAR (30), `SufaceArea` NUMERIC, `Population` NUMERIC ); # 第一種 # 寫數據到臨時表 INSERT INTO TempAsiaCountries SELECT `Code`, `Name`, `SurfaceArea`, `Population` FROM country WHERE `Continent` = 'Asia'; # 查詢臨時表 SELECT * FROM TempAsiaCountries; # 第二種 # 查詢數據并寫到臨時表中 CREATE TEMPORARY TABLE TempAsiaCountries SELECT `Code`, `Name`, `SurfaceArea`, `Population` FROM country WHERE `Continent` = 'Asia'; # 刪除臨時表 DROP TABLE TempAsiaCountries;
關于“MySQL臨時表如何使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。