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

MySQL臨時(shí)表的使用方法詳解

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

1. 寫在前面的話

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

就如下列樣式:

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

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

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

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

2. 臨時(shí)表的使用

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

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

2.1.1 創(chuàng)建臨時(shí)表

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

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

創(chuàng)建完之后,會(huì)發(fā)現(xiàn)在數(shù)據(jù)庫的表目錄下并沒有這個(gè)表,因?yàn)楸硎桥R時(shí)的,所以不會(huì)出現(xiàn)在表目錄里。

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

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

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

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

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

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

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

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

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

# 查詢臨時(shí)表
SELECT *
FROM TempAsiaCountries;

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

2.4 刪除臨時(shí)表

# 刪除臨時(shí)表
DROP TABLE TempAsiaCountries;

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

3. 以上操作的全部代碼

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

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

# 查詢臨時(shí)表
SELECT *
FROM TempAsiaCountries;

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

# 刪除臨時(shí)表
DROP TABLE TempAsiaCountries;


總結(jié)

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

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

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

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

相關(guān)文章

  • MySQL獲得當(dāng)前日期時(shí)間函數(shù)示例詳解

    MySQL獲得當(dāng)前日期時(shí)間函數(shù)示例詳解

    這篇文章主要給大家介紹了關(guān)于MySQL獲得當(dāng)前日期時(shí)間函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • CentOS 7下使用rpm包安裝mysql 5.7.18

    CentOS 7下使用rpm包安裝mysql 5.7.18

    這篇文章主要為大家詳細(xì)介紹了CentOS 7下使用rpm包安裝mysql 5.7.18的教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • mysql8.0.20安裝與連接navicat的方法及注意事項(xiàng)

    mysql8.0.20安裝與連接navicat的方法及注意事項(xiàng)

    這篇文章主要介紹了mysql8.0.20安裝與連接navicat的方法及注意事項(xiàng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • MySQL數(shù)據(jù)庫基本SQL語句教程之高級(jí)操作

    MySQL數(shù)據(jù)庫基本SQL語句教程之高級(jí)操作

    對(duì)MySQL數(shù)據(jù)庫的查詢,除了基本的查詢外,有時(shí)候需要對(duì)查詢的結(jié)果集進(jìn)行處理,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫基本SQL語句教程之高級(jí)操作的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 如何把本地mysql遷移到服務(wù)器數(shù)據(jù)庫

    如何把本地mysql遷移到服務(wù)器數(shù)據(jù)庫

    這篇文章主要介紹了如何把本地mysql遷移到服務(wù)器數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 詳解MySQL的慢查詢?nèi)罩竞湾e(cuò)誤日志

    詳解MySQL的慢查詢?nèi)罩竞湾e(cuò)誤日志

    這篇文章主要詳細(xì)介紹了MySQL的慢查詢?nèi)罩竞湾e(cuò)誤日志,文中通過代碼示例講解的非常詳細(xì),對(duì)大家學(xué)習(xí)和了解MySQL的慢查詢?nèi)罩竞湾e(cuò)誤日志有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • MySQL 4種導(dǎo)入數(shù)據(jù)的方法

    MySQL 4種導(dǎo)入數(shù)據(jù)的方法

    這篇文章主要介紹了MySQL 導(dǎo)入 導(dǎo)出數(shù)據(jù)的方法,文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • MySql子查詢IN的執(zhí)行和優(yōu)化的實(shí)現(xiàn)

    MySql子查詢IN的執(zhí)行和優(yōu)化的實(shí)現(xiàn)

    本文主要介紹了MySql子查詢IN的執(zhí)行和優(yōu)化的實(shí)現(xiàn),詳細(xì)的介紹了為什么IN這么慢以及如何優(yōu)化,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-07-07
  • 詳解MySQL中的SQRT函數(shù)的使用方法

    詳解MySQL中的SQRT函數(shù)的使用方法

    這篇文章主要介紹了詳解MySQL中的SQRT函數(shù)的使用方法,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • MySQL server has gone away的問題解決

    MySQL server has gone away的問題解決

    本文主要介紹了MySQL server has gone away的問題解決,意思就是指client和MySQL server之間的鏈接斷開了,下面就來介紹一下幾種原因及其解決方法,感興趣的可以了解一下
    2024-07-07

最新評(píng)論