临时表概述

临时表用于存放只存在于事务或会话期间的数据。临时表中的数据对会话是私有的,每个会话只能看到和修改自己会话的数据。

您可以创建全局(global)临时表或本地(locall)临时表。 下表列举了它们之间的区别:

全局 本地
定义 CREATE GLOBAL TEMPORARY TABLE CREATE LOCAL TEMPORARY TABLE
存储 表定义是持久的,表数据是临时的 表定义和表数据都是临时的,在会话退出后被删除
所属模式 创建在用户指定模式下 在临时模式下,用户不可以指定
约束限制 不支持外键引约用束 支持外键引用约束
ON COMMIT类型 事务级(DELETE ROWS)和会话级(PRESERVE ROWS) 事务级(DELETE ROWS)会话级(PRESERVE ROWS)和事务结束后删除(DROP)

临时表的用途

临时表对于必须临时缓存结果集的应用程序很有用。例如,每个员工创建本地临时表,插入本季度的所有订单销售记录,进行统计分析,计算分析后再数据填入普通表中。在会话操作期间,临时表的数据是私有的,各个会话之间数据彼此不影响。表中的数据都可以在事务结束之后删除,或者连接退出之后删除。数据都存在在临时表空间中,临时表都不记录日志。

临时表的创建

创建临时表使用CREATE TEMPORARY/TEMP TABLE语句。将 GLOBAL 或 LOCAL 写在 TEMPORARY 或 TEMP 的前面,指定全局临时表或本地临时表。创建临时表时若不指定GLOBAL 或LOCAL,则默认值为LOCAL。

临时表在一个事务块结束时的行为由 ON COMMIT 控制。三种选项是:

  • PRESERVE ROWS

    在事务结束时不采取特殊的动作,是本地临时表采用的默认行为。

  • DELETE ROWS

    在每一个事务块结束时将删除临时表中的所有行。实质上,在每一次提交时会完成一次自动的清理。在分区表上使用时,不会将其级联到其分区。这是全局临时表的默认行为。

  • DROP

    在当前事务块结束时将删除临时表。在分区表上使用时,此操作将删除其分区,在具有继承子级的表上使用时,将删除依赖子级。仅本地临时表支持在当前事务块结束时将删除临时表。全局临时表不支持ON COMMIT DROP 选项。

临时表可以创建索引,这些索引也是临时的。临时表上的索引使用temp_tablespaces参数指定位置。

最后需要说明,临时表上也存在age年龄的,而且这个年龄会正常增长,有一次,监控数据库查看临时表年龄超过了20亿,然而这并没有给数据库带来事务回卷风险。因为vacuum进程不会对临时表进行freeze操作,vacuum是消耗I\O资源的动作,而临时表数据都是临时的,也就没必要对其进行vacuum,浪费系统资源。

最新文章

  1. 最简单的Android教程之自定义控件
  2. LUA 函数式编程demo
  3. jQuery ajax传多个参数
  4. lnmp脚本
  5. Oracle读取和修改数据块的过程 专家
  6. 15个你不知道的杀手级Google Chrome功能
  7. mac下versions 提交提示 SVN Working Copy xxx locked
  8. android 菜单事件处理
  9. 关于lvs+keepalived只加入一台realserver问题
  10. Web APi之认证
  11. CvvImage类
  12. 【LeetCode题解】链表Linked List
  13. (10)集合之双列集合Map,HashMap,TreeMap
  14. 什么是Css Hack?ie6,7,8的hack分别是什么?
  15. Scrapy 爬虫实例教程(一)---简介及资源列表
  16. 部署远程jupyter
  17. sql server 2008怎样导入mdf,ldf文件,怎样解决导入mdf,ldf文件时出现附加数据库错误的问题
  18. Python基于Python实现批量上传文件或目录到不同的Linux服务器
  19. sklearn 数据预处理1: StandardScaler
  20. mysql 常用语句集

热门文章

  1. ABP框架之——数据访问基础架构(下)
  2. ms12-020漏洞
  3. 到点了开始网抑云(悲)但是用python(整活)
  4. 抓包整理外篇——————autoResponder、composer 、statistics [ 三]
  5. 写出个灵活的系统竟然可以如此简单!小白也能写出高级的Java业务!
  6. IP核的使用(Vivado中的调用,product guide的查询阅读 ,引脚的设置(位宽,个数,算法等),coe文件的初始化 )
  7. 零基础学Java(11)自定义类
  8. 手动注入bean到spring容器
  9. PHP小知识收集
  10. 为你的网站加上live2d的动态小挂件,博君一晒