MySQL 必知必会
朱晓峰
前摩根大通银行技术部副总裁、系统架构师
立即订阅
1140 人已学习
课程目录
已更新 15 讲 / 共 34 讲
0/4登录后,你可以任选4讲全文学习。
课前准备 (2讲)
开篇词 | 在实战中学习,是解锁MySQL技能的最佳方法
免费
环境准备 | 带你安装MySQL和图形化管理工具Workbench
实践篇 (13讲)
01 | 存储:一个完整的数据存储过程是怎样的?
02 | 字段:这么多字段类型,该怎么定义?
03 | 表:怎么创建和修改表?
04 | 增删改查:如何操作表中的数据?
05 | 主键:如何正确设置主键?
06 | 外键和连接:如何做关联查询?
07 | 条件语句:WHERE 与 HAVING有什么不同?
08 | 聚合函数:怎么高效地进行分组统计?
09 | 时间函数:时间类数据,MySQL是怎么处理的?
10 | 如何进行数学计算、字符串处理和条件判断?
11 | 索引:如何提高查询的速度?
12 | 事务:怎么确保关联操作正确执行?
13 | 临时表:复杂查询,如何保存中间结果?
MySQL 必知必会
15
15
1.0x
00:00/00:00
登录|注册

13 | 临时表:复杂查询,如何保存中间结果?

朱晓峰 2021-04-06
你好,我是朱晓峰。今天,我来和你聊一聊临时表。
当我们遇到一些复杂查询的时候,经常无法一步到位,或者是一步到位会导致查询语句太过复杂,开发和维护的成本过高。这个时候,就可以使用临时表。
下面,我就结合实际的项目来讲解一下,怎么拆解一个复杂的查询,通过临时表来保存中间结果,从而把一个复杂查询变得简单而且容易实现。

临时表是什么?

临时表是一种特殊的表,用来存储查询的中间结果,并且会随着当前连接的结束而自动删除。MySQL 中有 2 种临时表,分别是内部临时表和外部临时表
内部临时表主要用于性能优化,由系统自动产生,我们无法看到;
外部临时表通过 SQL 语句创建,我们可以使用。
因为我们不能使用内部临时表,所以我就不多讲了。今天,我来重点讲一讲我们可以创建和使用的外部临时表。
首先,你要知道临时表的创建语法结构:
CREATE TEMPORARY TABLE 表名
(
字段名 字段类型,
...
);
跟普通表相比,临时表有 3 个不同的特征:
临时表的创建语法需要用到关键字 TEMPORARY;
临时表创建完成之后,只有当前连接可见,其他连接是看不到的,具有连接隔离性;
临时表在当前连接结束之后,会被自动删除。
因为临时表有连接隔离性,不同连接创建相同名称的临时表也不会产生冲突,适合并发程序的运行。而且,连接结束之后,临时表会自动删除,也不用担心大量无用的中间数据会残留在数据库中。因此,我们就可以利用这些特点,用临时表来存储 SQL 查询的中间结果。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《MySQL 必知必会》,如需阅读全部文章,
请订阅文章所属专栏
立即订阅
登录 后留言

精选留言(4)

  • 洛奇
    临时表的数据是不是易丢失,这不重要吧?断电后,连接也断了,这时候有去找回临时表的数据的必要吗?
    2021-04-06
  • Harry

    当引擎类型为 memory 时,如果去掉 temporary 那么表还会存储在内存中吗?
    2021-04-06
  • Harry

    最后左连接的代码中,为什么要使用 having 而不使用 where 呢?
    2021-04-06
  • 不学完不改名
    据了解,临时表的开销很大,不建议在高访问量的线上系统中使用。离线备份库或供数据分析所用的数据库上可以考虑有限制的使用。
    2021-04-06
    1
收起评论
4
返回
顶部