union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执容行效率要比union高

一、临时表的概念

在我们操作的表数据量庞大而且又要关联其他表进行查询的时候或者我们操作的数据是临时性数据且在短期内会有很多DML操作(比如购物车)的时候或者我们做查询时需要连接很多个表的时候,如果直接操作数据库的业务表可能效率很低,这个时候我们就可以借助临时表来提升效率。

临时表顾名思义,是一个临时的表,数据库不会将其序列化到磁盘上(有些也会序列化到磁盘上)而是存在于数据库服务器的内存中(因此会增加数据库服务器内存的消耗),在使用完之后就会销毁。临时表分为两种:会话临时表和全局临时表,区别在于可用的作用域和销毁的时机不同。会话临时表只在当前会话(连接)内可用,且在当前会话结束(断开数据库连接)后就会销毁;全局临时表创建后在销毁之前所有用户都可以访问,销毁的时机是在创建该临时表的连接断开且没有其他会话访问时才销毁,实际上在创建全局临时表的会话断开后,其他用户就已经不能在访问该临时表了,但此时该临时表并不会立即销毁,而是等所有正在使用该全局临时表的会话(或者说连接)断开之后才会销毁。当然有时考虑到内存占用的问题,我们也可以手动销毁(DROP)临时表。

目前大多数数据库厂商(Oracle、Sql Server、Mysql)都支持临时表,但不同的数据库创建和使用临时表的语法稍有不同。

二、临时表的创建、使用和删除

1、SQL Server

创建:

方式一:

#会话临时表

CREATE TABLE #临时表名(

字段1 约束条件1,

字段2 约束条件2,

...

);

#全局临时表

CREATE TABLE ##临时表名(

字段1 约束条件,

字段2 约束条件,

...

);

12345678910111213

方式二:

#会话临时表

SELECT 字段列表 INTO #临时表名

FROM 业务表;

#全局临时表

SELECT 字段列表 INTO ##临时表名

FROM 业务表;

1234567

使用:

#查询临时表

SELECT * FROM #临时表名;

SELECT * FROM ##临时表名;

123

删除:

#删除临时表

DROP TABLE #临时表名;

DROP TABLE ##临时表名;

123

2、Mysql

创建:Mysql中没有全局临时表,创建的时候没有#

CREATE TEMPORARY TABLE [IF NOT EXISTS] 临时表名(

字段1 约束条件,

字段2 约束条件,

...

);

#根据现有表创建临时表

CREATE TEMPORARY TABLE [IF NOT EXISTS] 临时表名

[AS] SELECT 查询字段

FROM 业务表

[WHERE 条件];

1234567891011

使用:创建的临时表可以和业务表同名,若临时表和业务表同名时在该会话中会使用临时表

SELECT * FROM 临时表名;

1

删除:为避免临时表名和业务表名相同时导致误删除,可以加上TEMPORARY关键字

DROP [TEMPORARY] TABLE 临时表名;

1

3、Oracle

Oracle的临时表也只有会话级的,但同时又细化出了一个事务级别的临时表,事务级别的临时表只在当前事务中有效。

创建:

#会话级别

CREATE GLOBAL TEMPORARY TABLE 临时表名(

字段1 约束条件,

字段2 约束条件,

...

) ON COMMIT PRESERVE ROWS;

#事务级别

CREATE GLOBAL TEMPORARY TABLE 临时表名(

字段1 约束条件,

字段2 约束条件,

...

) ON COMMIT DELETE ROWS;

12345678910111213

使用:

SELECT * FROM 临时表名;

1

删除:

DROP TABLE 临时表名;

1

注意:一个SQL中不能同时出现两次临时表

三、临时表的应用

企业开发中大多都是使用Spring进行事务管理的,很少自己开启事务、提交事务。我们大多都会将事务加在service层,这样在调用service层的每一个方法之前Spring都会为我们开启事务,在方法调用结束之后Spring会为我们提交事务,问题是数据库事务需要的数据库连接是在什么时候获取和释放的呢?这个是会影响我们对临时表的使用的。

一般来说,数据库连接是在事务开启之前获取的,也就是在我们调用事务方法之前,肯定要先获取数据库连接,然后才能开启事务,提交或回滚事务,然后关闭数据库连接,这种情况下貌似如果我们在该方法中创建了临时表,则在此之后直至方法结束之前我们都可以使用这个创建的临时表,这么说基本上是正确的。但有一种情况除外那就是如果我们在事务方法A中调用了另一个事务方法B,而事务方法B的事务传播机制是PROPAGATION_REQUIRES_NEW(将原事务挂起,并新开一个事务)时,如果临时表是在B方法中创建的,则A在调用完B之后(B的事务已经提交了)也不可以使用B中创建的事务级别的临时表,但是可以使用会话级别的临时表以及全局临时表。

————————————————

版权声明:本文为CSDN博主「如不來」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/rubulai/java/article/details/95248627

mysql 临时表 概念_临时表的概念相关推荐

  1. mysql中端口的概念_端口的概念,端口的分类

    端口概念 在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem.集线器.交换机.路由器用于连接其他网络设备的接口,如RJ-45端口.SC端口等等.二是逻辑意义 ...

  2. MYSQL中概念模型的基本概念_数据库基本概念

    一. 数据抽象:物理抽象.概念抽象.视图级抽象,内模式.模式.外模式 模型是对现实世界的抽象,在数据库技术中,我们用数据模型的概念描述数据库的结构和语义,对现实世界的数据进行抽象.从现实世界的信息到数 ...

  3. 土地利用覆被变化的概念_欠压实概念极其荒谬

    ●李传亮 地表疏松的沉积物,孔隙度极高,有时可高达80%以上,但随着埋藏深度的加大,在上覆压力的作用下,其排列方式不断由松散排列趋于致密排列,同时伴随有孔隙度的大幅度减小,此即岩石的压实阶段(I). ...

  4. python面向对象的基本概念_面向对象的概念和基本语法,python,学习,笔记,一,基础...

    一.概念 1. 特点 :注重对象和职责,不同的对象承担不同的职责.更大的封装,在一个对象中封装多个方法. 2. 类 : (1)创建 对象 的,包含属性和方法.先有类,再有对象.不同对象之间的属性可能不 ...

  5. [RabbitMQ]RabbitMQ概念_四大核心概念

    RabbitMQ RabbitMQ 的概念 RabbitMQ 是一个消息中间件:它接受并转发消息.你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收 ...

  6. 序列化和反序列化的概念_序列化的概念

    序列化和反序列化的概念 讨论了为什么Optional不可序列化以及如何处理(即将推出)之后,让我们仔细看看序列化. 总览 这篇文章介绍了序列化的一些关键概念. 它尝试精简地执行此操作,而不会涉及太多细 ...

  7. 单片机外设基本概念_单片机基本概念

    作者 : 佚名 来源 : 本站原创 点击数 : 更新时间: 2007 年 08 月 14 日 [字体:大 中 小] 随着电子技术的迅速发展,计算机已深入地渗透到我们的生活中,许多电子爱好者开始 学习单 ...

  8. 旅游流的概念_旅游流概念的研究的探讨.doc

    旅游流概念的研究的探讨 旅游流概念的研究的探讨 摘 要:文章在比较分析各类旅游流定义研究的基础上,确定了旅游流的定义,区别了旅游流与旅游者个体综合:论述了旅游流的特征和影响因素,特别提出了旅游流的周期 ...

  9. 关节动画概念_核心动画概念:预期和贯彻

    关节动画概念 We can create more realistic CSS animations on our pages by using principles established by c ...

最新文章

  1. Dubbo3.0|阿里巴巴服务框架三位一体的选择与实践
  2. linux虚拟机网络查看的方式
  3. 无需写代码!可一键生成前后端代码的开源工具
  4. c语言按F1键运行,C语言的编译和运行按什么键
  5. VC2019编译报错 error C4996: This function or variable may be unsafe
  6. 【安卓笔记】—— 页面导航 Navigation(3)
  7. 转载 刘鹏老师 计算广告学 人大笔记
  8. android路由器安装wifidog,openwrt下的wifidog安装及web认证界面设置
  9. 搜索引擎(二)网页排名算法(1)PageRank
  10. 记录方维p2p项目后台登录自动化测试验证码问题
  11. java开灯问题_算法题-开灯问题
  12. Java8 - 定制归一化收集器(reducing)得到自定义结果集
  13. AutoCAD(2014) Ribbon不见
  14. 【无标题】汇编实验-学生成绩管理系统
  15. Unity-3d Day03 做了一个吃粑粑豆的小游戏 hiahia~~
  16. Basler相机调用及图像存储
  17. c++的内存管理(raii->shart_ptr->垃圾回收)
  18. 智能人体存在感知方案,毫米波雷达感应器成品,智能化感知联动应用
  19. java中的码点_Java中码点和码点单元 码点与字符串的互化
  20. Win10桌面右键响应非常慢解决方案

热门文章

  1. [云炬ThinkPython阅读笔记]2.8 注释
  2. [云炬python3玩转机器学习] 6-4 在线性回归模型中使用梯度下降法
  3. MATLAB2017 on winserver2012 第48周运行日志
  4. 机器学习碎碎念:霍夫丁不等式
  5. linux 导入函数,共享库 – Linux ELF文件:如何获取属于导入函数的共享对象
  6. oracle数据库link格式,Oracle创设DB Link
  7. 如何将hive与mysql连接_hive连接mysql配置
  8. openCV鼠标事件实例
  9. matlab中的分类器使用小结(SVM、KNN、RF、AdaBoost、Naive Bayes、DAC)
  10. 在asp.net中使用 log4net 笔记