MySQL之临时表

news/2024/5/19 5:27:30/文章来源:https://blog.csdn.net/wang0907/article/details/126667792

写在前面

本文一起看下MySQL的临时表。

1:什么是临时表

通过create temporary table t语句创建的表,就是临时表,临时表的临时体现在其是其生命周期是和会话一样的,当会话结束,即连接关闭时MySQL会自动将创建的临时表执行删除操作,如下:

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)

虽然临时表的生命周期是会话级别的,但是在程序中显式的删除临时表永远是一个我们必须要做的动作,因为你不能保证任何场景下你所创建的临时表都会被合理的删除,比如使用线程池时,此时就不仅仅是临时表没有被删除而占用资源的问题了,还会因为后续的程序读取到前面程序在临时表中的数据,而造成bug,而且这种bug是很难发现的。所以,养成好习惯是很重要的。

2:临时表和内存表

  • 内存表
    内存表指的是存储引擎为memory的表,建表语句是create table t()engine=memory,数据是保存在内存中的,因此如果是重启的话,数据不会保留,但表结构是保留的,可以看到,内存表就是正常的表,只不过是存储引擎为memory,且重启后数据不会保留的表,如下测试:
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)
  • 临时表
    可以是任何存储引擎的,但是生命周期和会话绑定,并且不同会话可以创建相同名称的临时表,具体我们在后面继续来分析。

3:临时表的特点

为了便于理解,我们来看下下面这个操作序列:

在这里插入图片描述

我们可以总结其特点如下:

1:语法是create temporary table ...
2:临时表在会话之间是隔离的,即本会话只能看到本会话内创建的临时表
3:临时表可以和普通表同名
4:操作时,存在同名的临时表和普通表时,临时表的优先级高于普通表
5:show tables不会显示临时表,只显示普通表
6:不同会话可以创建同名的临时表

其中的特点6:不同会话可以创建同名的临时表当我们在实际业务代码中需要使用中间表的业务中就非常有用了,比如在分库分表场景中聚合不同库和表的数据的场景。此时如果是使用普通表,那么不同的会话并行操作时肯定会出现表名称重复的问题,而使用临时表则会很好的解决这个问题。

4:为什么临时表是可以重名的

从前面的分析中我们知道了,不同的会话临时表名称是可以重复的,这是为什么呢?要解释这个问题,必须先来了解下,MySQL是如何判断表是否存在的,每个表都有一个对应的table_def_key,对于普通表table_def_key的定义是库名+表名,因此普通表的表名称是不可以重复的,而临时表table_def_key的规则是库名+表名+server_id+thread_id,而其中thread_id,每个会话连接都是不一样的,所以,临时表是可以重名的,那么当我们执行语句create temporary table tttt(age int(32))engine=innodb;之后临时表tttt的结构和数据都是如何存储的呢?对于结构是在select @@tmpdir目录下创建结构为#sql{进程 id}_{线程 id}_序列号.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

数据的存放,在5.7之前是在select @@tmpdir目录下创建一个相同前缀的.ibd文件,5.7之后引入了临时文件表空间,数据就存放在这里,就不需要生成ibd文件了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_4942.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

氨丙基咪唑离子液体(AMIBr)改性纤维素气凝胶吸附剂(CAgAMIBr)的实验要求

氨丙基咪唑离子液体(AMIBr)改性纤维素气凝胶吸附剂(CAgAMIBr)的实验要求 离子液体(ILs),是完全由离子组成的液体,可以进一步定义为熔点低于100C的熔盐。 离子液体是在室温或接近室温下可呈现液体的液态有机盐。离子液体因具有一些优良的特性使其在分离…

树的直径 树形dp+2次dfs

题目描述 给定一棵树 T ,树 T 上每个点都有一个权值。 定义一颗树的子链的大小为:这个子链上所有结点的权值和 。 请在树 T 中找出一条最大的子链并输出。 输入描述: 第一行输入一个 n,1≤n≤105。 接下来一行包含n个数,对于每个数 ai,−10^5…

我赢助手小技巧:学会这三招,爆款内容视频完播率提高50%(下)

上一篇我们说了爆款内容的四大共性和底层逻辑,今天我们来看一看如何去设置标题、封面和剧情,实现视频的完播率。 第三个技巧叫内容高潮。 要在3秒钟之内让用户兴趣高涨,把这样的脚本写出来,怎么样去做?你要把特效、悬…

PCL 生成空间圆点云

目录 一、算法原理二、代码实现三、结果展示一、算法原理 三维空间圆形式如下: 三维空间圆的参数方程: { x ( θ ) = c

蚂蚁核心架构师内部Java并发编程进阶笔记,白嫖简直太香了!

并发编程作为Java开发者很重要以及非常核心的知识,我希望读者朋友具备以下的预备知识: 希望你不是一个初学者线程安全问题,需要你接触过Java Web开发、Jdbc 开发、Web服务器、分布式框架时才会遇到基于JDK8 ,最好对函数式编程、lambda 有一定了解采用了…

thinkphp使用dompdf导出pdf(html转pdf)

目录一 、安装二、安装字体(解决无法输出中文)三、使用3.1 示例3.2 入参声明3.3 调用声明四、总结一 、安装 命令行安装: composer require dompdf/dompdf下载 GitHub Dompdf库 二、安装字体(解决无法输出中文) 因…

关于内存条的知识要点⑴

这些天在安装神州网信政府版的过程中,遇到很多计算机配置比较低,比如2009、2010、2012年的计算机,为了让用户使用顺畅一些,需要做一些硬件上的更改,比如加装内存条或者更换固态硬盘等。很多人即使是写代码的IT技术人员…

599. 两个列表的最小索引总和

599. 两个列表的最小索引总和https://leetcode.cn/problems/minimum-index-sum-of-two-lists/ 难度简单224 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。 你需要帮助他们用最少的索…

计算机毕业论文选题java毕业设计软件基于SSM实现的固定资产管理系统

🍅文末获取联系🍅 目录 一、项目介绍 二、开题报告 三、截图 四、源码获取 一、项目介绍 计算机毕业设计java毕设之固定资产管理系统_哔哩哔哩_bilibili计算机毕业设计java毕设之固定资产管理系统共计2条视频,包括:IT实战营…

【文献研究】国际班轮航运的合作博弈:The coopetition game in international liner shipping

背景:本人在整理资料时翻找出来的以前做的研究自己写的总结,2017年发布在《Maritime Policy & Management》期刊的一篇关于国际班轮航运合作博弈的英文文献,本人本着学习的目的就文献的重点内容进行了浅层次的解读,就自己的理…

技术状态管理计划-模板

1 引言 1.1 目的和范围 本计划规定了XXX项目技术状态管理的原则、主要内容和要求,是指导XXX项目以及技术状态项研制全过程的技术状态管理的基本文件,也是各配套研制单位在研制过程中实施技术状态管理必须遵循的基本规定。   本计划适用于XXX项目以及技…

JdbcTemplate操作数据库

文章目录一、JdbcTemplate(概念和准备)1、什么是JdbcTemplate2、准备工作二、JdbcTemplate操作数据库(增删改)1、对应数据库创建实体类2、编写service和dao3、测试类三、JdbcTemplate操作数据库(查询)1、对应数据库创建实体类2、编…

物联网开发笔记(7)- 使用Wokwi仿真ESP32开发板实现LED灯点亮、按钮使用

上面几节我们使用Micrpython在Wokwi网站上实现了树莓派Pico开发板的仿真。学习了树莓派Pico的LED闪灯、按键操作等。以及Wokwi的使用,比如选中元器件后,按键盘“R”键切换方向,按键盘“Backspace”或者“Delete”删除原件,鼠标滚轮…

22-09-02 西安 JVM 类加载器、栈、堆体系、堆参数调优、GC垃圾判定、垃圾回收算法

JVM入门 1、JVM结构图 JVM是运行在操作系统之上的,它与硬件没有直接的交互 方法区:存储已被虚拟机加载的类元数据信息(元空间) 堆:存放对象实例,几乎所有的对象实例都在这里分配内存 虚拟机栈(java栈):虚拟机栈描述…

深挖全媒体多模态数据价值,蜜度亮相2022世界人工智能大会

蜜度深度挖掘全媒体多模态数据核心价值,提供重要垂直领域解决方案。 编辑 | 宋慧 出品 | CSDN云计算 2022 年 9 月1至3日,由国家七部委和上海市人民政府共同主办的2022世界人工智能大会(WAIC )隆重举行,大会围绕“人类、科技、产…

Qt开发及建立工程

Qt开发 ​ 内容摘要:文章主要是为初学者介绍 Qt 框架的一些基本特性,主要内容包括: Qt的特点 , Qt中的模块划分 , Qt的安装 , Qt项目文件介绍 , Qt中的窗口类 , Qt窗口的坐标体系 , Qt框架的内存回收机制。 文章中除了关于知识点的文字描述,…

神经网络模式识别方法,神经网络模式识别代码

为什么Matlab神经网络里面会有聚类分析,模式识别,还有fitting tools,神经网络和聚类、模式有区别吗? 我的理解是神经网络可以用于预测,模式识别,聚类,fittingtools是MATLAB自带工具箱模式识别与…

安利一个查题功能的接口系统

安利一个查题功能的接口系统 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 题库:题库后台(点击跳转&…

Linux 网络配置

(win)查看网路IP和网关:ipconfig 查看Linux的网络配置:ifconfig 测试主机之间是否连通:ping IP Linux 网络配置方案 一:自动获取IP(IP不固定) 第一步:点击右上角 点击…

雪上加霜,运维部门裁员后,中了勒索病毒……

逼哭一个运维人的不是做不完的变更,也不是处理不完的故障,而是与勒索病毒的“不期而遇”。 A公司运维人员小明上班路上听新闻:“近日,新型勒索病毒.locked来势汹汹,国内多家企业中招......”,没想到这种事情…