在oracle8i或以上版本中,可以建立以下兩種臨時表:
1。會話特有的臨時表
create global temporary ()
on commit preserve rows;
2。事務特有的臨時表
create global temporary ()
on commit delete rows;
create global temporary table mytemptable
所建的臨時表雖然是存在的,但是你試一下insert 一條記錄然後用別的連線登上去select,記錄是空的,明白了吧,我把下面兩句話再貼一下:
--on commit delete rows 說明臨時表是事務指定,每次提交後oracle將截斷表(刪除全部行)
--on commit preserve rows 說明臨時表是會話指定,當中斷會話時oracle將截斷表。
衝突的問題更本不用考慮.
臨時表只是儲存當前會話(session)用到的資料,資料只在事務或會話期間存在。
通過create global temporary table命令建立乙個臨時表,對於事務型別的臨時表,
資料只是在事務期間存在,對於會話型別的臨時表,資料在會話期間存在。
會話的資料對於當前會話私有。每個會話只能看到並修改自己的資料。dml鎖不會加到
臨時表的資料上。下面的語句控制行的存在性。
● on commit delete rows 表名行只是在事務期間可見
● on commit preserve rows 表名行在整個會話期間可見
可以對臨時表建立索引,檢視,出發器,可以用export和import工具匯入匯出表的
定義,但是不能匯出資料。表的定義對所有的會話可見。
temporary tables臨時表
1簡介oracle資料庫除了可以儲存永久表外,還可以建立臨時表temporary tables。這些臨時表用來儲存乙個會話session的資料,
或者儲存在乙個事務中需要的資料。當會話退出或者使用者提交commit和回滾rollback事務的時候,臨時表的資料自動清空,
但是臨時表的結構以及元資料還儲存在使用者的資料字典中。
臨時表只在oracle8i以及以上產品中支援。
2詳細介紹
oracle臨時表分為 會話級臨時表 和 事務級臨時表。
會話級臨時表是指臨時表中的資料只在會話生命週期之中存在,當使用者退出會話結束的時候,oracle自動清除臨時表中資料。
事務級臨時表是指臨時表中的資料只在事務生命週期中存在。當乙個事務結束(commit or rollback),oracle自動清除臨時表中資料。
臨時表中的資料只對當前session有效,每個session都有自己的臨時資料,並且不能訪問其它session的臨時表中的資料。因此,
臨時表不需要dml鎖.當乙個會話結束(使用者正常退出 使用者不正常退出 oracle例項崩潰)或者乙個事務結束的時候,oracle對這個會話的
表執行 truncate 語句清空臨時表資料.但不會清空其它會話臨時表中的資料.
你可以索引臨時表和在臨時表基礎上建立檢視.同樣,建立在臨時表上的索引也是臨時的,也是只對當前會話或者事務有效.
臨時表可以擁有觸發器.
3建立臨時表
臨時表的定義對所有會話session都是可見的,但是表中的資料只對當前的會話或者事務有效.
建立方法:
1) on commit delete rows 定義了建立事務級臨時表的方法.
create global temporary table admin_work_area
(startdate date,
enddate date,
class char(20))
on commit delete rows;
example:
sql> create global temporary table admin_work_area
2 (startdate date,
3 enddate date,
4 class char(20))
5 on commit delete rows;
sql> create table permernate( a number);
sql> insert into admin_work_area values(sysdate,sysdate,'temperary table');
sql> insert into permernate values(1);
sql> commit;
sql> select * from admin_work_area;
sql> select * from permernate;a1
2)on commit preserve rows 定義了建立會話級臨時表的方法.
create global temporary table admin_work_area
(startdate date,
enddate date,
class char(20))
on commit preserve rows;
example:
會話1:
sql> drop table admin_work_area;
sql> create global temporary table admin_work_area
2 (startdate date,
3 enddate date,
4 class char(20))
5 on commit preserve rows;
sql> insert into permernate values(2);
sql> insert into admin_work_area values(sysdate,sysdate,'session temperary');
sql> commit;
sql> select * from permernate;
a----------12
sql> select * from admin_work_area;
startdate enddate class
---------- ---------- --------------------
17-1?? -03 17-1?? -03 session temperary
會話2:
sql> select * from permernate;
a----------12
sql> select * from admin_work_area;
未選擇行.
會話2看不見會話1中臨時表的資料.
4 oracle臨時表和sqlserver臨時表異同
sql server臨時表
也可以建立臨時表。臨時表與永久表相似,但臨時表儲存在 tempdb 中,當不再使用時會自動刪除。
有本地和全域性兩種型別的臨時表,二者在名稱、可見性和可用性上均不相同。本地臨時表的名稱以單個數字符號 (#) 打頭;
它們僅對當前的使用者連線是可見的;當使用者從 microsoft? sql server? 2000 例項斷開連線時被刪除。全域性臨時表的名稱以數學符號
(##) 打頭,建立後對任何使用者都是可見的,當所有引用該錶的使用者從 sql server 斷開連線時被刪除。
例如,如果建立名為 employees 的表,則任何人只要在資料庫中有使用該錶的安全許可權就可以使用該錶,除非它已刪除。
如果建立名為 #employees 的本地臨時表,只有您能對該錶執行操作且在斷開連線時該錶刪除。如果建立名為 ##employees 的全域性臨時表
,資料表中的任何使用者均可對該錶執行操作。如果該錶在您建立後沒有其他使用者使用,則當您斷開連線時該錶刪除。如果該錶在您建立
後有其他使用者使用,則 sql server在所有使用者斷開連線後刪除該錶
不同:1. sql server臨時表是一種」記憶體表」,表是儲存在記憶體中的.oracle臨時表除非執行drop table,否則表定義會保留在資料字典中.
2. sql server臨時表不存在類似oracle臨時表 事務級別 上的功能.
3 sql server本地臨時表(#) 與 oracle的會話級別臨時表類似,但是在會話退出的時候,oracle不會刪除表.
4 sql server的全域性臨時表(##) 是指多個連線共享同一片記憶體.當沒有指標引用該記憶體區域時,sql server自動釋放全域性臨時表.
5 由於oracle不是一種 記憶體中的資料庫. 所以如果oracle類似sql server 頻繁的對臨時表進行建立和刪除,必定會影響效能.
所以oracle會保留臨時表的定義直到使用者drop table.
6 在oracle中,如果需要多個使用者共享乙個表(類似sql server的全域性臨時表##).則可以利用永久表,
並且在表中新增一些可以唯一標識使用者的列.利用觸發器和檢視.當使用者退出的時候,根據該登陸使用者的唯一資訊刪除相應的表中的資料.
這種方法給oracle帶來了一定量的負載.
廣義表相關知識
讀書而不思考,等於吃飯而不消化。波爾克 廣義表 lists,又稱列表 是一種非線性的資料結構,是線性表的一種推廣。即廣義表中放鬆對錶元素的原子限制,容許它們具有其自身結構。它被廣泛的應用於人工智慧等領域的表處理語言lisp語言中。在lisp語言中,廣義表是一種最基本的資料結構,就連lisp 語言的程...
oracle表相關操作
新增字段 可以單個,也可以多個 alter table 表名add 列名 修改字段 alter table 表名modify 列名 刪除字段 alter table 表名drop column 列名 新增主鍵 alter table 表名add constraint pk 約束名primary ke...
分庫分表相關知識
背景情況 使用者表達到了 幾千萬級別,在做很多操作都比較吃力,所以,考慮對其進行分庫分表,或者在進行高併發讀寫的時候採用分庫分表的形式也更能增強讀寫的效能,保證服務的穩定高效 常用的切分方案 資料的切分 sharding 根據其切分規則的型別,可以分為兩種切分模式。一種是按照不同的表 或者schem...