欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL臨時表的使用方法詳解

 更新時間:2022年09月18日 16:53:50   作者:麥田里走一夜  
在寫查詢時我們會經(jīng)常用到臨時表來存儲數(shù)據(jù),下面這篇文章主要給大家介紹了關于MySQL臨時表的使用方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

1. 寫在前面的話

在開發(fā)數(shù)據(jù)庫時,特別是寫存儲過程,遇到比較復雜的需求,使用臨時表可以簡化很多邏輯。曾經(jīng)在一家互聯(lián)網(wǎng)金融公司供職,公司數(shù)據(jù)組團隊做數(shù)據(jù)清洗,寫SQL腳本時,一個查詢語句可以套到數(shù)層查詢,甚至十幾層??雌饋韼装傩猩锨械哪_本,其實他只是一個查詢,就是說是一個select基于另一個select的結(jié)果。這樣層層疊疊,同時還包含了聚合、排序、關聯(lián)、聯(lián)合等,看起來是相當?shù)馁M勁,頭疼。

就如下列樣式:

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...

如果這里能使用臨時表,那么就會使邏輯清晰很多,查詢效率也會得到提升。比如在多處使用到同一個查詢的結(jié)果時,就可以只執(zhí)行一次查詢,將結(jié)果保存為臨時表,在查詢過程中每次使用到時,直接從臨時表查就可以了,不用每次使用都再去查詢一遍原始數(shù)據(jù),尤其是對于復雜關聯(lián)查詢結(jié)果。

當時數(shù)據(jù)是來源于呼叫中心,每天都會產(chǎn)生幾百萬行數(shù)據(jù),一個月就上億行的數(shù)據(jù)量,就當時的機器性能基礎上,在這個數(shù)據(jù)量來做統(tǒng)計操作,如果沒有高效的腳本,是非常耗時間的。同時,數(shù)據(jù)組職員并沒有專業(yè)數(shù)據(jù)庫設計能力。

本文以數(shù)據(jù)庫World為例進行說明。

2. 臨時表的使用

World數(shù)據(jù)庫中數(shù)據(jù)表country放著全世界國家的相關信息。

2.1 創(chuàng)建一個只存放亞洲國家信息的臨時表

2.1.1 創(chuàng)建臨時表

創(chuàng)建一個只存放亞洲國家信息的臨時表,命名為TempAsiaCountries。
這里臨時只取四個字段Code,Name,SufaceArea,Population,那么創(chuàng)建臨時表的腳本如下:

# 創(chuàng)建臨時表
CREATE TEMPORARY TABLE TempAsiaCountries (
	`Code` VARCHAR (10),
	`name` VARCHAR (30),
	`SufaceArea` NUMERIC,
	`Population` NUMERIC
);

創(chuàng)建完之后,會發(fā)現(xiàn)在數(shù)據(jù)庫的表目錄下并沒有這個表,因為表是臨時的,所以不會出現(xiàn)在表目錄里。

2.1.2 向臨時表里寫數(shù)據(jù)

如同寫實體表數(shù)據(jù)一樣,可以通過INSERT INTO 關鍵字進行表插入數(shù)據(jù)操作。

# 寫數(shù)據(jù)到臨時表
INSERT INTO TempAsiaCountries
SELECT
	`Code`,
	`Name`,
	`SurfaceArea`,
	`Population`
FROM
	country
WHERE
	`Continent` = 'Asia';

此時,可以通過SELECT操作查詢臨時表里的數(shù)據(jù)。

2.2 在查詢過程中直接創(chuàng)建臨時表

在實際使用臨時表時,可以更快速便捷的創(chuàng)建臨時表,如下腳本,直接以查詢結(jié)果創(chuàng)建臨時表的方法。

CREATE TEMPORARY TABLE TempAsiaCountries 
SELECT
	`Code`,
	`Name`,
	`SurfaceArea`,
	`Population`
FROM
	country
WHERE
	`Continent` = 'Asia';

2.3 查詢臨時表中的數(shù)據(jù)

對臨時表的查詢操作與實體表一樣,如下是查詢前文中所創(chuàng)建的臨時表中的數(shù)據(jù)

# 查詢臨時表
SELECT *
FROM TempAsiaCountries;

可以看到查詢結(jié)果

2.4 刪除臨時表

# 刪除臨時表
DROP TABLE TempAsiaCountries;

此時再查,就會返回表不存在的結(jié)果

3. 以上操作的全部代碼

# 創(chuàng)建臨時表
CREATE TEMPORARY TABLE TempAsiaCountries (
	`Code` VARCHAR (10),
	`name` VARCHAR (30),
	`SufaceArea` NUMERIC,
	`Population` NUMERIC
);

# 第一種
# 寫數(shù)據(jù)到臨時表
INSERT INTO TempAsiaCountries
SELECT
	`Code`,
	`Name`,
	`SurfaceArea`,
	`Population`
FROM
	country
WHERE
	`Continent` = 'Asia';

# 查詢臨時表
SELECT *
FROM TempAsiaCountries;

# 第二種
# 查詢數(shù)據(jù)并寫到臨時表中
CREATE TEMPORARY TABLE TempAsiaCountries 
SELECT
	`Code`,
	`Name`,
	`SurfaceArea`,
	`Population`
FROM
	country
WHERE
	`Continent` = 'Asia';

# 刪除臨時表
DROP TABLE TempAsiaCountries;


總結(jié)

臨時表在使用上與實體表沒任何區(qū)別,實事他們的區(qū)別也就是”臨時“二字。臨時表是在查詢過程中依據(jù)需要創(chuàng)建,并在使用完后刪除的表結(jié)構(gòu)。表可以暫存于內(nèi)存中,也可以暫存在硬盤上。

在SqlServer中的臨時表操作有全局臨時表和局部臨時表區(qū)分,他們分別用**#表名##表名**來表示,其中全局臨時表并不會隨著用戶的退出而消失,而且其它用戶也可使用。

在MySQL中似乎沒有這個區(qū)分。

到此這篇關于MySQL臨時表使用的文章就介紹到這了,更多相關MySQL臨時表使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mysql通過INSERT IGNORE INTO插入拼音字符無效問題及解決

    mysql通過INSERT IGNORE INTO插入拼音字符無效問題及解決

    這篇文章主要介紹了mysql通過INSERT IGNORE INTO插入拼音字符無效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Windows環(huán)境下重置mysql密碼操作命令

    Windows環(huán)境下重置mysql密碼操作命令

    Windows XP系統(tǒng)、xampp集成環(huán)境如何重置mysql密碼,接下來為大家詳細介紹下,感興趣的各位可以參考下哈,希望可以幫助到你們
    2013-03-03
  • 使MySQL能夠存儲emoji表情字符的設置教程

    使MySQL能夠存儲emoji表情字符的設置教程

    這篇文章主要介紹了使MySQL能夠存儲emoji表情字符的設置教程,關鍵在于utf8mb4字符集的設置,需要的朋友可以參考下
    2015-12-12
  • Linux 安裝JDK Tomcat MySQL的教程(使用Mac遠程訪問)

    Linux 安裝JDK Tomcat MySQL的教程(使用Mac遠程訪問)

    這篇文章主要介紹了Linux 安裝JDK Tomcat MySQL(使用Mac遠程訪問),本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • MySQL delete刪除數(shù)據(jù)后釋放磁盤空間的操作方法

    MySQL delete刪除數(shù)據(jù)后釋放磁盤空間的操作方法

    這篇文章主要介紹了MySQL delete刪除數(shù)據(jù)后,釋放磁盤空間,文中給大家介紹了優(yōu)化表空間的多種方法,每種方法給大家介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • MySQL中關于表的約束

    MySQL中關于表的約束

    在MySQL中,約束用于定義表的規(guī)則和限制,確保數(shù)據(jù)的準確性和可靠性,主要類型包括NOT NULL、DEFAULT、PRIMARY KEY、AUTO_INCREMENT、UNIQUE KEY、FOREIGN KEY、CHECK和INDEX等,NOT NULL約束確保列不能存儲NULL值;DEFAULT設置默認值
    2024-09-09
  • MySQL基本命令、常用命令總結(jié)

    MySQL基本命令、常用命令總結(jié)

    這篇文章主要介紹了MySQL基本命令、常用命令總結(jié),需要的朋友可以參考下
    2014-03-03
  • MySQL中主鍵默認有索引嗎

    MySQL中主鍵默認有索引嗎

    MySQL主鍵默認是有索引的,在MySQL中,主鍵是用來唯一標識表中每一行數(shù)據(jù)的字段或字段組合,主鍵的作用是保證數(shù)據(jù)的唯一性,并且可以提高數(shù)據(jù)的查詢效率,需要的朋友可以參考下
    2023-10-10
  • MySQL如何導入csv格式數(shù)據(jù)文件解決方案

    MySQL如何導入csv格式數(shù)據(jù)文件解決方案

    本文將詳細介紹MySQL如何導入csv格式數(shù)據(jù)文件并提供詳細解決方案,需要了解的朋友可以參考下
    2012-11-11
  • MySQL的索引失效的原因?qū)嵗敖鉀Q方案

    MySQL的索引失效的原因?qū)嵗敖鉀Q方案

    這篇文章主要討論了MySQL索引失效的常見原因及其解決方案,它涵蓋了數(shù)據(jù)類型不匹配、隱式轉(zhuǎn)換、函數(shù)或表達式、范圍查詢、LIKE查詢、OR條件、全表掃描、索引選擇性低、覆蓋索引不足和統(tǒng)計信息不準確等問題,感興趣的朋友一起看看吧
    2024-12-12

最新評論