表空間的下一層次應(yīng)該就是我們的數(shù)據(jù)表,也是我們最常用的對(duì)象,存儲(chǔ)字段的關(guān)聯(lián)字段的對(duì)象
公司主營(yíng)業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)公司推出平遙免費(fèi)做網(wǎng)站回饋大家。
我們來(lái)創(chuàng)建第一個(gè)表為test
格式
create table test(id number(10) not null primary key,name varchar(20) not null,age char(2) not null);
解釋
create table 用于創(chuàng)建表的關(guān)鍵詞,后面是表名test,括號(hào)里面是列信息(id號(hào),name名字)緊接著類(lèi)型,然后not null不能為空,為就是必須插入,primary key主鍵,全局唯一的標(biāo)識(shí)符。
格式
select table_name,tablespace_name from user_tables from table_name='test';
解釋
user_tables表用于查看所有用戶表信息
格式
describe test;
解釋
查看表結(jié)構(gòu),只描述當(dāng)前對(duì)象的表結(jié)構(gòu),關(guān)鍵字可以縮寫(xiě)desc.
格式
alter table test rename to test1;
解釋
修改數(shù)據(jù)表的名字 關(guān)鍵字rename to
格式
alter table test modify (id number(20));
解釋
修改數(shù)據(jù)表其中某一列的類(lèi)型的長(zhǎng)度
格式
alter table test rename column id to user_id;
解釋
修改數(shù)據(jù)表列名
格式
alter table test add(sal int);
解釋
數(shù)據(jù)表中增加一列數(shù)據(jù)(類(lèi)型)
格式
alter table test drop column sal;
解釋
刪除數(shù)據(jù)庫(kù)中某一列
格式
drop table test cascade constraints;
解釋
刪除整個(gè)表,cascade constrints表示當(dāng)表與其他的表有關(guān)聯(lián)或者約束,使用關(guān)鍵字強(qiáng)制刪除這個(gè)表
那么在Oracle中還有一類(lèi)表叫做臨時(shí)表,聽(tīng)名字大體就知道這個(gè)表應(yīng)該是臨時(shí)存在的,其實(shí)不然
什么是臨時(shí)表,那么簡(jiǎn)單來(lái)說(shuō)我們用create table 創(chuàng)建的表叫做永久表或者普通標(biāo),臨時(shí)表其實(shí)和普通標(biāo)沒(méi)什么區(qū)別,臨時(shí)表的臨時(shí)是指數(shù)據(jù)的臨時(shí)性,也就是說(shuō)表也是會(huì)一直存在的,但是數(shù)據(jù)會(huì)在Oracle中一些條件下被自動(dòng)清空!
清空臨時(shí)表?xiàng)l件有兩種:1、事物提交或者回滾 2、會(huì)話的結(jié)束
那么Oracle中每次對(duì)數(shù)據(jù)庫(kù)操作不是立刻就更新操作,而是以事物為單位修改提交到數(shù)據(jù)庫(kù),每個(gè)事物會(huì)議commit結(jié)束,從上一條到本次的commit,其中可能是一條或者多條SQL語(yǔ)句,那么也就意味事物的提交commit,事務(wù)回滾rollback廢掉當(dāng)前的事物操作,也就是剛剛做的SQL語(yǔ)句不算數(shù)
Oracle中的會(huì)話是每個(gè)與用戶交互的進(jìn)程,臨時(shí)表清空數(shù)據(jù)也分兩類(lèi):1、事務(wù)級(jí)臨時(shí)表 2、會(huì)話級(jí)臨時(shí)表
事務(wù)級(jí)臨時(shí)表就是當(dāng)數(shù)據(jù)每次事務(wù)的提交都會(huì)清空數(shù)據(jù),會(huì)話級(jí)別是當(dāng)斷開(kāi)本次會(huì)話清空數(shù)據(jù),意味著Oracle會(huì)話用戶線程的結(jié)束。
會(huì)話級(jí)臨時(shí)表
格式
create global temporary table tmp_user_session(user_id) on commit preserve rows;
解釋
創(chuàng)建一個(gè)會(huì)話臨時(shí)表create global temporary
格式
commit
解釋
提交數(shù)據(jù),事物結(jié)束,為什么我們平常不需要這樣去做因?yàn)槲覀兡J(rèn)吧自動(dòng)提交事務(wù)功能打開(kāi)了
事務(wù)級(jí)別
格式
create global tempporary table ...... on commit delete rows;
解釋
來(lái)創(chuàng)建事務(wù)級(jí)別的臨時(shí)表,當(dāng)我們提交或者回滾數(shù)據(jù)將會(huì)自動(dòng)清除
格式
select table_name,tablespace_name from user_tables where table_name='T_USERS_SESSION' or .......;
解釋
查看表空間信息與之前普通標(biāo)比較發(fā)現(xiàn),臨時(shí)表表空間為空
那么我們說(shuō)了那么多,到底是干啥用呢,下面說(shuō)一說(shuō)他的應(yīng)用嘗盡
1、大小表分割
表創(chuàng)建索引可以很大程度上提高查詢數(shù)據(jù)的效率,但是在億級(jí)以上大量的數(shù)據(jù),創(chuàng)建索引耗費(fèi)時(shí)間相當(dāng)大,而且查詢大量的索引表與直接查詢的效果相差不大,沒(méi)什么性能上提升,這時(shí)候后常用的方法就是把分割大表,分割成多個(gè)小的臨時(shí)表,對(duì)這臨時(shí)表些操作,最后對(duì)查詢結(jié)果進(jìn)行綜合處理
2、并行問(wèn)題
并行基于多線程的為題,簡(jiǎn)答來(lái)說(shuō)幾個(gè)客戶端同一時(shí)間對(duì)對(duì)象進(jìn)行操作,會(huì)導(dǎo)致混亂,最常用的給文件或者表加上鎖,防止多個(gè)用戶一起修改對(duì)象造成混亂的結(jié)果。那么在頻繁對(duì)表操作時(shí)候,鎖表一定會(huì)對(duì)整個(gè)數(shù)據(jù)庫(kù)性能有影響,這時(shí)候利用臨時(shí)表,臨時(shí)表會(huì)話中數(shù)據(jù)時(shí)透明的,不用對(duì)表鎖定,大大提高數(shù)據(jù)庫(kù)性能
3、緩存
程序段可能需要做很多的復(fù)雜運(yùn)算,這時(shí)候創(chuàng)建臨時(shí)表將數(shù)據(jù)存儲(chǔ)臨時(shí)表,可以向普通表一樣操作。這時(shí)候臨時(shí)表作為臨時(shí)數(shù)據(jù)的存儲(chǔ)空間。
Oracle中還一種特殊的表叫做dual,也是很有意義的表,簡(jiǎn)單來(lái)說(shuō)是Oracle中的虛表,也叫偽表。那么他是干什么用的,我們知道select * from 必須指定一個(gè)表才能輸出結(jié)果,那么有一些應(yīng)用場(chǎng)景沒(méi)有表存儲(chǔ)比如系統(tǒng)調(diào)用,需要指定表來(lái)輸出,這時(shí)候dual的作用就顯示出來(lái),也就是說(shuō)dual不是作為數(shù)據(jù)存儲(chǔ),而是作為from的源表。
格式
select sysdate from dual; or selec 3+2*5 as result from dual;
解釋
時(shí)間是實(shí)時(shí)變化的,系統(tǒng)調(diào)用時(shí)間,這時(shí)候輸出需要指向一個(gè)源表dual作用可顯而知,而且可以作為運(yùn)算的輸出表。
修改dual數(shù)據(jù)是否會(huì)產(chǎn)生影響,那么我們發(fā)現(xiàn)查詢后dual只有一列,而且只有一個(gè)值Y,我們隨便插入數(shù)據(jù)然后進(jìn)行以上的運(yùn)算發(fā)現(xiàn)結(jié)果都是相同,我們刪除里面的表結(jié)構(gòu)數(shù)值運(yùn)算也是一樣的,那么值的一提的是,Oracle 10g以前對(duì)dual做插入刪除都會(huì)影響運(yùn)算的結(jié)果,那么在oracle 10g之后做了很大改進(jìn),不論對(duì)dual內(nèi)部數(shù)據(jù)進(jìn)行了如何的操作都不會(huì)影響作為虛表的查詢結(jié)果,對(duì)dual內(nèi)部做了很多工作,無(wú)論真實(shí)的數(shù)據(jù)內(nèi)容是啥,都保證了效果和單條記錄是一樣的,Oracle 10g對(duì)該表做了處理機(jī)制做了較大的改進(jìn)。