一 :使用场景
临时表适合需要把结果集放在内存中的的应用,因为临时表就是一个多DMl操作的结构,临时表的必须先insert然后在updae,select,delete
如果会话rollback,临时表的数据也会丢失
例如:
例如我们网上购物中的购物车,就比较适合用临时表
临时表有两种隔离机制,一种是会话隔离,一种是隔离
会话隔离(PRESERVE ROWS):在当前回话有效,当回话终止后 truncate table
事物隔离(DELETE ROWS):在事物级别有效 当commit 后truncate table
二:索引
对于临时表的索引也是可以创建的,临时表的索引作用范围也是会话级别和事物级别
三:存储空间:
临时表默认的存储空间为临时表空间,不过也可以自己设置表空间
CREATE TEMPORARY TABLESPACE tbs_t1
TEMPFILE 'tbs_t1.f' SIZE 50m REUSE AUTOEXTEND ON
MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K;
备份恢复:
由于是临死表,没有日志,备份,恢复的时候也不会恢复
四:eg
CREATE GLOBAL TEMPORARY TABLE admin_work_area
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS/PRESERVE ROWS;
测试:
创建事物级别的临
CREATE GLOBAL TEMPORARY Table test_tmp
(a Number)
ON COMMIT DELETE ROWS;
--在表中插入数据:
SQL> insert into test_tmp(a) values(1);
1 row created.
SQL> select *from test_tmp;
A
----------
1
--提交事物
SQL> commit;
Commit complete.
SQL> select * from test_tmp;
no rows selected
创建基于会话级别的临时表:
CREATE GLOBAL TEMPORARY Table test_tmp
(a Number)
ON Commit PRESERVE ROWS;
当前会话:
SQL> select sid from v$session where sid=(select sid from v$mystat where rownum=1);
SID
----------
41
--插入数据
SQL> insert into test_tmp(a) values(1);
1 row created.
SQL> select * from test_tmp;
A
----------
1
--提交事物
SQL> commit;
Commit complete.
SQL> select * from test_tmp;
A
----------
1
另起一个会话:
SQL> Select Sid From v$session t Where t.sid=(Select Sid From v$mystat Where Rownum=1);
SID
----------
43
SQL> select * from test_tmp;
no rows selected