一 :使用場景
臨時表適合需要把結果集放在內存中的的應用,因爲臨時表就是一個多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