oracle和mysql的临时表使用

临时表

临时表类似中间表,在各种类型数据库中都有,主要用在:

  1. 数据预处理;
  2. 频繁聚合数据场景;
  3. 已有表的索引不符合性能要求时,可以新建临时表在临时表中搜索;
  4. 在项目中使用oracle11g还遇到一个问题,in后的内容不能超过1000个,故需要使用临时表将in中的内容放到临时表中;
  5. 程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用到。

oracle临时表

创建语句

3hYwoF.png

图中矩形框中的关键字是创建临时表的必要字段,椭圆框威非必要字段。

分类

  • 会话级临时表
  • 事务级临时表
    会话级临时表采用on commit preserve rows;而事务级则采用on commit delete rows;用法上,会话级别只有当会话结束临时表中的数据才会被清空(truncate),而且事务级临时表则不管是commit、rollback或者是会话结束,临时表中的数据都将被清空(truncate)。

临时表的不足

  • 不支持lob对象(大对象)
  • 不支持主外键关联

mysql临时表

mysql临时表在当前连接可见(会话级别),在当前代码连接或者客户端连接过程中存在。

创建语句

1
2
3
CREATE TEMPORARY TABLE table_name (
字段信息
);

注: 使用show tables看不到临时表

注意事项

  1. 在实际使用过程中,如果使用系统临时表不能满足要求(如想保留表结构),可以自己建表当临时表;
  2. mysql的in字句中不限制数量,但是mysql的sql语句长度有限制(4MB)。