您好,登錄后才能下訂單哦!
表空間的下一層次應該就是我們的數據表,也是我們最常用的對象,存儲字段的關聯字段的對象
我們來創建第一個表為test
格式
create table test(id number(10) not null primary key,name varchar(20) not null,age char(2) not null);
解釋
create table 用于創建表的關鍵詞,后面是表名test,括號里面是列信息(id號,name名字)緊接著類型,然后not null不能為空,為就是必須插入,primary key主鍵,全局唯一的標識符。
格式
select table_name,tablespace_name from user_tables from table_name='test';
解釋
user_tables表用于查看所有用戶表信息
格式
describe test;
解釋
查看表結構,只描述當前對象的表結構,關鍵字可以縮寫desc.
格式
alter table test rename to test1;
解釋
修改數據表的名字 關鍵字rename to
格式
alter table test modify (id number(20));
解釋
修改數據表其中某一列的類型的長度
格式
alter table test rename column id to user_id;
解釋
修改數據表列名
格式
alter table test add(sal int);
解釋
數據表中增加一列數據(類型)
格式
alter table test drop column sal;
解釋
刪除數據庫中某一列
格式
drop table test cascade constraints;
解釋
刪除整個表,cascade constrints表示當表與其他的表有關聯或者約束,使用關鍵字強制刪除這個表
那么在Oracle中還有一類表叫做臨時表,聽名字大體就知道這個表應該是臨時存在的,其實不然
什么是臨時表,那么簡單來說我們用create table 創建的表叫做永久表或者普通標,臨時表其實和普通標沒什么區別,臨時表的臨時是指數據的臨時性,也就是說表也是會一直存在的,但是數據會在Oracle中一些條件下被自動清空!
清空臨時表條件有兩種:1、事物提交或者回滾 2、會話的結束
那么Oracle中每次對數據庫操作不是立刻就更新操作,而是以事物為單位修改提交到數據庫,每個事物會議commit結束,從上一條到本次的commit,其中可能是一條或者多條SQL語句,那么也就意味事物的提交commit,事務回滾rollback廢掉當前的事物操作,也就是剛剛做的SQL語句不算數
Oracle中的會話是每個與用戶交互的進程,臨時表清空數據也分兩類:1、事務級臨時表 2、會話級臨時表
事務級臨時表就是當數據每次事務的提交都會清空數據,會話級別是當斷開本次會話清空數據,意味著Oracle會話用戶線程的結束。
會話級臨時表
格式
create global temporary table tmp_user_session(user_id) on commit preserve rows;
解釋
創建一個會話臨時表create global temporary
格式
commit
解釋
提交數據,事物結束,為什么我們平常不需要這樣去做因為我們默認吧自動提交事務功能打開了
事務級別
格式
create global tempporary table ...... on commit delete rows;
解釋
來創建事務級別的臨時表,當我們提交或者回滾數據將會自動清除
格式
select table_name,tablespace_name from user_tables where table_name='T_USERS_SESSION' or .......;
解釋
查看表空間信息與之前普通標比較發現,臨時表表空間為空
那么我們說了那么多,到底是干啥用呢,下面說一說他的應用嘗盡
1、大小表分割
表創建索引可以很大程度上提高查詢數據的效率,但是在億級以上大量的數據,創建索引耗費時間相當大,而且查詢大量的索引表與直接查詢的效果相差不大,沒什么性能上提升,這時候后常用的方法就是把分割大表,分割成多個小的臨時表,對這臨時表些操作,最后對查詢結果進行綜合處理
2、并行問題
并行基于多線程的為題,簡答來說幾個客戶端同一時間對對象進行操作,會導致混亂,最常用的給文件或者表加上鎖,防止多個用戶一起修改對象造成混亂的結果。那么在頻繁對表操作時候,鎖表一定會對整個數據庫性能有影響,這時候利用臨時表,臨時表會話中數據時透明的,不用對表鎖定,大大提高數據庫性能
3、緩存
程序段可能需要做很多的復雜運算,這時候創建臨時表將數據存儲臨時表,可以向普通表一樣操作。這時候臨時表作為臨時數據的存儲空間。
Oracle中還一種特殊的表叫做dual,也是很有意義的表,簡單來說是Oracle中的虛表,也叫偽表。那么他是干什么用的,我們知道select * from 必須指定一個表才能輸出結果,那么有一些應用場景沒有表存儲比如系統調用,需要指定表來輸出,這時候dual的作用就顯示出來,也就是說dual不是作為數據存儲,而是作為from的源表。
格式
select sysdate from dual; or selec 3+2*5 as result from dual;
解釋
時間是實時變化的,系統調用時間,這時候輸出需要指向一個源表dual作用可顯而知,而且可以作為運算的輸出表。
修改dual數據是否會產生影響,那么我們發現查詢后dual只有一列,而且只有一個值Y,我們隨便插入數據然后進行以上的運算發現結果都是相同,我們刪除里面的表結構數值運算也是一樣的,那么值的一提的是,Oracle 10g以前對dual做插入刪除都會影響運算的結果,那么在oracle 10g之后做了很大改進,不論對dual內部數據進行了如何的操作都不會影響作為虛表的查詢結果,對dual內部做了很多工作,無論真實的數據內容是啥,都保證了效果和單條記錄是一樣的,Oracle 10g對該表做了處理機制做了較大的改進。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。