會話與事務級臨時表和dual表
一、 會話臨時表
--建立會話臨時表
create global temporary table tmp_user_session(user_id int, user_name varchar2(20),user_email varchar2(30))
--這句表示 當事務提交時 保留資料
on commit preserve rows
--向臨時表中插入資料
insert into tmp_user_session(user_id,user_name,user_email) values(1,'孫業寶','948987600@qq.com')
insert into tmp_user_session(user_id,user_name,user_email) values(1,'王麗莎','934560@qq.com')
commit
--查詢 有資料
select * from tmp_user_session
--重新開啟 一個sql視窗 再次查詢 則無資料了 select * from tmp_user_session 說明此插入的資料 只為本視窗會話存在
二、建立事務臨時表
--建立事務臨時表
create global temporary table tmp_users_transaction (user_id int,user_name varchar2(20),user_email varchar2(30))
--這句表示 當事務提交時 刪除資料
on commit delete rows
--向臨時表中插入資料
insert into tmp_users_transaction(user_id,user_name,user_email) values(1,'孫業寶','948987600@qq.com');
insert into tmp_users_transaction(user_id,user_name,user_email) values(1,'王麗莎','934560@qq.com')
--查詢 有資料
select * from tmp_users_transaction
--提交下語句 或者回滾事務 rollback 再次查詢 select * from tmp_users_transaction 就沒有資料了 因為事務臨時表 就是在事務提交時 就資料清空了
commit;rollback;
--檢視臨時表的表空間,其實他們的表空間為空
select table_name, tablespace_name
from user_tables
where table_name = 'T_USERS'
or table_name = 'TMP_USERS_SESSION'
or table_name = 'TMP_USERS_TRANSACTION'
臨時表的應用場景
1.大表分割
眾所周知,為表建立合適的索引可以在很大程度上提高資料查詢的速度。但是當某個表的資料量相當大,例如資料量為億級時,那麼建立索引將會花費大量的時間,而且,查詢大的索引表,與直接查詢資料表相比,在效能上幾乎沒有任何優勢,此時,一個常用的方法就是分割大表,例如:將大表分割為多個小的臨時表,然後對這些小表進行相應操作,最後對所有查詢結果進行綜合處理。
2.解決並行問題
當多個程式同時對某張表進行操作時,往往會出現並行問題。
3.作為資料快取
在程式段,可能需要對若干資料進行復雜運算。此時,可以建立一個臨時表,並將這些資料儲存在臨時表中。因為可以像操作普通表一樣操作臨時表,這樣,許多函式和sql語句都可以用來處理這些資料。
三、特殊表 dual
特殊表 dual 該表是每個資料庫建立時預設生成的。該表僅有一列一行,在資料庫開發中有著非常特殊的作用。
1.分析dual表 執行
select * from dual可以看出dual 只有一行一列。
2. dual表的應用場景
在oracle資料庫中,dual表實際上是作為一個虛表的概念存在的。也就是說dual表存在的意義並非為了儲存資料。更多的時候,dual表用來作為
from的源表。因為oracle的查詢語句必須滿足 select * from table name
語法格式,其中的from所指向的表是必須的,所以即使某些資料不屬於任何表,也必須有一個強制的表名。dual表即可用做這個強制的虛表。
--檢視dual表結構
select * from dual
--查詢資料當前日期
select sysdate from dual
--計算結果
select 3*4-3 as results ,8-9 as plus from dual
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29209863/viewspace-2129183/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- (轉) oracle 臨時表(事務級、會話級)Oracle會話
- 會話級臨時表會話
- 建立基於事務和基於會話的臨時表及臨時表建索引的實驗會話索引
- 【基礎知識】基於事物的臨時表和基於會話的臨時表會話
- ORACLE臨時表和SQLSERVER臨時表異同OracleSQLServer
- Oracle臨時表使用注意事項Oracle
- Oracle事務臨時表的一個隱藏問題Oracle
- 再議臨時表和表變數變數
- mysql臨時表和記憶體表MySql記憶體
- Oracle 基礎 ----臨時表和物件表Oracle物件
- Oracle 查詢佔用臨時表空間大的歷史會話和SQLOracle會話SQL
- 【TEMPORARY TABLE】Oracle臨時表使用注意事項Oracle
- 記憶體表和臨時表的區別記憶體
- SQL Server中的臨時表和表變數SQLServer變數
- MySQL臨時表MySql
- PostgreSQL:臨時表SQL
- oracle臨時表Oracle
- Oracle 臨時表Oracle
- 探索oracle dual表Oracle
- oracle的dual表Oracle
- SQLServer表變數和臨時表系列之概念篇SQLServer變數
- 【轉載】MySQL之臨時表和記憶體表MySql記憶體
- 【臨時表空間】11g中使用 SHRINK方法縮小臨時表空間和臨時檔案
- MySQL什麼時候會使用內部臨時表?MySql
- 修改oracle會話時間表達方式Oracle會話
- SQL Server中臨時表與表變數的區別SQLServer變數
- MySQL之臨時表MySql
- mysql 建立臨時表MySql
- SQL建立臨時表SQL
- Oracle的臨時表Oracle
- 臨時表的操作
- 全域性臨時表
- 【臨時表空間】11g中使用 SHRINK方法縮小臨時表空間和臨時檔案(續)
- mysql binlog_format和臨時表MySqlORM
- oracle清理和重建臨時表空間Oracle
- Sqlserver 關於臨時表和表變數的總結SQLServer變數
- SQLServer臨時表和表變數系列之踢館篇SQLServer變數
- 記憶體(memory)表和臨時(temporary)表之瞭解記憶體