什么是临时表,顾名思义,临时生成的表,他们的数据存放在内存中,用户可以根据自己的实际需求,将可能临时用到的数据(可以是多表联合之类的操作得到的数据,并不希望保留他们,只是暂时使用)生成一张临时表,对此表的查询是比较快速的,临时表大多存放在temp表空间。当有很多临时表多到内存放不下时,数据库会把数据暂时保存在磁盘中。
DM的临时表支持以下功能:
1、在临时表中,会话可以像普通永久表一样更新、插入和删除数据;
2、临时表的 DML 操作产生较少的 REDO 日志;
3、支持创建索引以提高查询效率
4、会话或者事务结束后,数据将自动删除;
5、不同用户可以访问同一个临时表,但是只能看到自己的数据
6、临时表数据量小,这意味着更高的查询效率
7、临时表的表结构在数据删除后仍然存在,方便后续使用
8、临时表的权限管理与普通表一样
达梦数据库支持两种类型的临时表:
on commit preserve rows --session 会话级临时表
on commit delete rows --transaction 事务级临时表
会话级临时表(会话结束后数据会清空):
创建表:
create global TEMPORARY table temp_tb(id int,var varchar2(20)) On Commit Preserve Rows;
insert into temp_tb values(1,'test_tb1');
commit;
此时,事务完成了提交,查询临时表:
select * from temp_tb;
新建一个会话,查询该临时表,此时查询不到临时表中的数据。
事务级临时表(事务结束后数据会清空):
建表:
create global TEMPORARY table temp_tb2(id int,var varchar2(20)) On Commit Delete Rows;
insert into temp_tb2 values(1,'test_tb2');
此时并事务未提交,查询该临时表:
select * from temp_tb2;
提交事务:
commit;
提交后,事务结束,再次查询该临时表:
select * from temp_tb2;
如果还有任何问题,欢迎到达梦云适配中心提问哦!