最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL之臨時(shí)表的實(shí)現(xiàn)示例

 更新時(shí)間:2023年08月23日 10:43:41   作者:一戶董  
MySQL臨時(shí)表是存儲(chǔ)在內(nèi)存或者磁盤上的臨時(shí)數(shù)據(jù)表,它們的生命周期只限于當(dāng)前數(shù)據(jù)庫(kù)會(huì)話,臨時(shí)表的創(chuàng)建和使用方式與普通表類似,本文就詳細(xì)的介紹了MySQL之臨時(shí)表,感興趣的可以了解一下

寫在前面

本文一起看下MySQL的臨時(shí)表。

1:什么是臨時(shí)表

通過(guò)create temporary table t語(yǔ)句創(chuàng)建的表,就是臨時(shí)表,臨時(shí)表的臨時(shí)體現(xiàn)在其生命周期是和會(huì)話一樣的,當(dāng)會(huì)話結(jié)束,即連接關(guān)閉時(shí)MySQL會(huì)自動(dòng)將創(chuàng)建的臨時(shí)表執(zhí)行刪除操作,如下:

mysql> create temporary table t_tmp(age int)engine=innodb;
Query OK, 0 rows affected (0.07 sec)
mysql> show create table t_tmp;
+-------+----------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                       |
+-------+----------------------------------------------------------------------------------------------------+
| t_tmp | CREATE TEMPORARY TABLE `t_tmp` (
  `age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------------------+
1 row in set (0.03 sec)

雖然臨時(shí)表的生命周期是會(huì)話級(jí)別的,但是在程序中顯式的刪除臨時(shí)表永遠(yuǎn)是一個(gè)我們必須要做的動(dòng)作(刪除也是使用drop table語(yǔ)句如:drop table t_tmp;),因?yàn)槟悴荒鼙WC任何場(chǎng)景下你所創(chuàng)建的臨時(shí)表都會(huì)被合理的刪除,比如使用線程池時(shí),此時(shí)就不僅僅是臨時(shí)表沒(méi)有被刪除而占用資源的問(wèn)題了,還會(huì)因?yàn)楹罄m(xù)的程序讀取到前面程序在臨時(shí)表中的數(shù)據(jù),而造成bug,而且這種bug是很難發(fā)現(xiàn)的。所以,養(yǎng)成好習(xí)慣是很重要的。

2:臨時(shí)表和內(nèi)存表

  • 內(nèi)存表
    內(nèi)存表指的是存儲(chǔ)引擎為memory的表,建表語(yǔ)句是create table t()engine=memory,數(shù)據(jù)是保存在內(nèi)存中的,因此如果是重啟的話,數(shù)據(jù)不會(huì)保留,但表結(jié)構(gòu)是保留的,可以看到,內(nèi)存表就是正常的表,只不過(guò)是存儲(chǔ)引擎為memory,且重啟后數(shù)據(jù)不會(huì)保留,如下測(cè)試:
mysql> create table t_memory(id int primary key auto_increment)engine=memory;
Query OK, 0 rows affected (0.08 sec)
mysql> insert into t_memory value();
Query OK, 1 row affected (0.04 sec)
mysql> select * from t_memory;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.01 sec)
// 重啟
[root@localhost tmp]# service mysql restart
Shutting down MySQL............. SUCCESS! 
Starting MySQL................................................................. SUCCESS! 
// 重啟后查看
mysql> show create table t_memory;
+----------+-----------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                |
+----------+-----------------------------------------------------------------------------------------------------------------------------+
| t_memory | CREATE TABLE `t_memory` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8 |
+----------+-----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select * from t_memory;
Empty set (0.00 sec)
  • 臨時(shí)表
    可以是任何存儲(chǔ)引擎,但是生命周期和會(huì)話綁定,并且不同會(huì)話可以創(chuàng)建相同名稱的臨時(shí)表,具體我們?cè)诤竺胬^續(xù)來(lái)分析。

3:臨時(shí)表的特點(diǎn)

為了便于理解,我們來(lái)看下下面這個(gè)操作序列

總結(jié)其特點(diǎn)如下:

1:語(yǔ)法是create temporary table ...
2:臨時(shí)表在會(huì)話之間是隔離的,即本會(huì)話只能看到本會(huì)話內(nèi)創(chuàng)建的臨時(shí)表
3:臨時(shí)表可以和普通表同名
4:操作時(shí),存在同名的臨時(shí)表和普通表時(shí),臨時(shí)表的優(yōu)先級(jí)高于普通表
5:show tables不會(huì)顯示臨時(shí)表,只顯示普通表
6:不同會(huì)話可以創(chuàng)建同名的臨時(shí)表

其中的特點(diǎn)6:不同會(huì)話可以創(chuàng)建同名的臨時(shí)表當(dāng)我們?cè)趯?shí)際業(yè)務(wù)代碼中需要使用中間表的業(yè)務(wù)中就非常有用了,比如在分庫(kù)分表場(chǎng)景中聚合不同庫(kù)和表的數(shù)據(jù),此時(shí)如果是使用普通表,那么不同的會(huì)話并行操作時(shí)肯定會(huì)出現(xiàn)表名稱重復(fù)的問(wèn)題,而使用臨時(shí)表則會(huì)很好的解決這個(gè)問(wèn)題。

4:為什么臨時(shí)表是可以重名的

從前面的分析中我們知道了,不同的會(huì)話臨時(shí)表名稱是可以重復(fù)的,這是為什么呢?要解釋這個(gè)問(wèn)題,必須先來(lái)了解下,MySQL是如何判斷表是否存在?,每個(gè)表都有一個(gè)對(duì)應(yīng)的table_def_key,對(duì)于普通表table_def_key的定義是庫(kù)名+表名,因此普通表的表名稱不可以重復(fù),而臨時(shí)表table_def_key的規(guī)則是庫(kù)名+表名+server_id+thread_id,而其中thread_id,每個(gè)會(huì)話連接都是不一樣的,所以,臨時(shí)表是可以重名的,那么當(dāng)我們執(zhí)行語(yǔ)句create temporary table tttt(age int(32))engine=innodb;之后臨時(shí)表tttt的結(jié)構(gòu)和數(shù)據(jù)都是如何存儲(chǔ)的呢?對(duì)于結(jié)構(gòu)是在select @@tmpdir目錄下創(chuàng)建名稱為#sql{進(jìn)程 id}_{線程 id}_序列號(hào).frm的文件,如下:

[root@localhost tmp]# mysql -uroot -p -e"select @@tmpdir"
Enter password: 
+----------+
| @@tmpdir |
+----------+
| /tmp     |
+----------+
[root@localhost tmp]# pwd
/tmp
[root@localhost tmp]# ll | egrep '#sql'
-rw-r----- 1 mysql mysql    8558 Sep  2 16:50 #sql105b4_3_0.frm

數(shù)據(jù)的存放,在5.7之前是在select @@tmpdir目錄下創(chuàng)建一個(gè)相同前綴的.ibd文件,5.7之后引入了臨時(shí)文件表空間,數(shù)據(jù)就存放在這里,就不需要生成ibd文件了。

寫在后面

參考文章列表:

MySQL 臨時(shí)表 

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

相關(guān)文章

  • MySQL中的引號(hào)和反引號(hào)的區(qū)別與用法詳解

    MySQL中的引號(hào)和反引號(hào)的區(qū)別與用法詳解

    這個(gè)問(wèn)題是我在學(xué)習(xí)數(shù)據(jù)庫(kù)的時(shí)候遇到的一個(gè)問(wèn)題,我當(dāng)時(shí)并不能理解下圖中的一些情況,后來(lái)我也請(qǐng)教了一位大佬給我解答,最后在大佬和度娘的幫助下我大概理解了這個(gè)反引號(hào)的東西
    2021-10-10
  • mysql8.0及以上my.cnf設(shè)置lower_case_table_names=1無(wú)法啟動(dòng)問(wèn)題

    mysql8.0及以上my.cnf設(shè)置lower_case_table_names=1無(wú)法啟動(dòng)問(wèn)題

    這篇文章主要介紹了mysql8.0及以上my.cnf設(shè)置lower_case_table_names=1無(wú)法啟動(dòng)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • MySQL中的if和case語(yǔ)句使用總結(jié)

    MySQL中的if和case語(yǔ)句使用總結(jié)

    這篇文章主要介紹了MySQL中的if和case語(yǔ)句使用總結(jié),本文講解了IF語(yǔ)句作為表達(dá)式和流程控制語(yǔ)句使用實(shí)例,需要的朋友可以參考下
    2015-02-02
  • MySQL修改賬號(hào)密碼方法大全(小結(jié))

    MySQL修改賬號(hào)密碼方法大全(小結(jié))

    這篇文章主要介紹了MySQL修改賬號(hào)密碼方法大全(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • MySQL數(shù)據(jù)庫(kù)刪除數(shù)據(jù)后自增ID不連續(xù)的問(wèn)題及解決

    MySQL數(shù)據(jù)庫(kù)刪除數(shù)據(jù)后自增ID不連續(xù)的問(wèn)題及解決

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)刪除數(shù)據(jù)后自增ID不連續(xù)的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • mysql 5.5 安裝配置方法圖文教程

    mysql 5.5 安裝配置方法圖文教程

    這篇文章主要為大家分享了mysql 5.5安裝配置方法圖文教程,感興趣的朋友可以參考一下
    2016-11-11
  • MySQL 5.7及8.0版本數(shù)據(jù)庫(kù)的root密碼遺忘的解決方法

    MySQL 5.7及8.0版本數(shù)據(jù)庫(kù)的root密碼遺忘的解決方法

    這篇文章主要介紹了MySQL 5.7及8.0版本數(shù)據(jù)庫(kù)的root密碼遺忘的解決辦法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-12-12
  • mysql表分區(qū)的使用與底層原理詳解

    mysql表分區(qū)的使用與底層原理詳解

    通俗地講表分區(qū)是將一大表,根據(jù)條件分割成若干個(gè)小表,mysql5.1開始支持?jǐn)?shù)據(jù)表分區(qū)了,這篇文章主要給大家介紹了關(guān)于mysql表分區(qū)的使用與底層原理的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 基于sqlalchemy對(duì)mysql實(shí)現(xiàn)增刪改查操作

    基于sqlalchemy對(duì)mysql實(shí)現(xiàn)增刪改查操作

    這篇文章主要介紹了基于sqlalchemy對(duì)mysql實(shí)現(xiàn)增刪改查操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 深入理解MySQL流模式

    深入理解MySQL流模式

    MySQL的Binlog流模式是一種實(shí)時(shí)讀取二進(jìn)制日志的技術(shù),允許下游系統(tǒng)幾乎無(wú)延遲地獲取數(shù)據(jù)庫(kù)變更事件,適用于需要極低延遲復(fù)制的場(chǎng)景,感興趣的可以了解一下
    2025-11-11

最新評(píng)論

承德市| 大竹县| 兴海县| 延长县| 余姚市| 漯河市| 镇平县| 台南市| 大厂| 阿克陶县| 西和县| 宽城| 克拉玛依市| 凤庆县| 资阳市| 崇阳县| 光山县| 光泽县| 敖汉旗| 札达县| 广饶县| 肃宁县| 黄冈市| 元谋县| 迁安市| 洛南县| 曲周县| 蓬溪县| 正宁县| 肃南| 应城市| 阳高县| 吉隆县| 沿河| 永安市| 镇雄县| 宁陕县| 时尚| 嘉定区| 安岳县| 潜江市|