数据库临时表
oracle和mysql的临时表使用
临时表
临时表类似中间表,在各种类型数据库中都有,主要用在:
- 数据预处理;
- 频繁聚合数据场景;
- 已有表的索引不符合性能要求时,可以新建临时表在临时表中搜索;
- 在项目中使用oracle11g还遇到一个问题,in后的内容不能超过1000个,故需要使用临时表将in中的内容放到临时表中;
- 程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用到。
oracle临时表
创建语句
图中矩形框中的关键字是创建临时表的必要字段,椭圆框威非必要字段。
分类
- 会话级临时表
- 事务级临时表
会话级临时表采用on commit preserve rows;而事务级则采用on commit delete rows;用法上,会话级别只有当会话结束临时表中的数据才会被清空(truncate),而且事务级临时表则不管是commit、rollback或者是会话结束,临时表中的数据都将被清空(truncate)。
临时表的不足
- 不支持lob对象(大对象)
- 不支持主外键关联
mysql临时表
mysql临时表在当前连接可见(会话级别),在当前代码连接或者客户端连接过程中存在。
创建语句
1 | CREATE TEMPORARY TABLE table_name ( |
注: 使用show tables
看不到临时表
注意事项
- 在实际使用过程中,如果使用系统临时表不能满足要求(如想保留表结构),可以自己建表当临时表;
- mysql的in字句中不限制数量,但是mysql的sql语句长度有限制(4MB)。