oracl中視圖和同義詞的區(qū)別_第1頁(yè)
oracl中視圖和同義詞的區(qū)別_第2頁(yè)
oracl中視圖和同義詞的區(qū)別_第3頁(yè)
oracl中視圖和同義詞的區(qū)別_第4頁(yè)
oracl中視圖和同義詞的區(qū)別_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第第頁(yè)oracl中視圖和同義詞的區(qū)別

一、視圖

在之前所學(xué)習(xí)過(guò)的全部的SQL語(yǔ)法之中,查詢(xún)操作是最麻煩的,假如程序開(kāi)發(fā)人員將大量的精力都糜費(fèi)在查詢(xún)的編寫(xiě)上,那么確定影響代碼的工作進(jìn)度,所以一個(gè)好的數(shù)據(jù)庫(kù)設(shè)計(jì)人員,除了依據(jù)業(yè)務(wù)的操作設(shè)計(jì)出數(shù)據(jù)表之外,還需要為用戶(hù)提供假設(shè)干個(gè)視圖,而每一個(gè)視圖包裝了一條條繁復(fù)的SQL語(yǔ)句,視圖的創(chuàng)建語(yǔ)法如下:

CREATE[ORREPLACE]VIEW視圖名稱(chēng)

AS子查詢(xún);

范例:創(chuàng)建一張視圖

CREATEVIEWmyviewASSELECTd.deptno,d.dname,d.loc,COUNT(e.empno)count,AVG(e.sal)avgFROMempe,deptd

WHEREe.deptno(+)=d.deptnoGROUPBYd.deptno,d.dname,d.loc;

現(xiàn)在已經(jīng)創(chuàng)建好了一張視圖,名稱(chēng)為myview,所以現(xiàn)在查詢(xún)myview:

SELECT*FROMmyview;

此時(shí)通過(guò)一個(gè)簡(jiǎn)約的視圖查詢(xún)操作,就可以完成之前的繁復(fù)SQL語(yǔ)句的功能,所以視圖就是包裝了SQL查詢(xún)操作。

范例:創(chuàng)建一張包含簡(jiǎn)約查詢(xún)語(yǔ)句的視圖

DROPVIEWmyview;CREATEVIEWmyviewASSELECT*FROMempWHEREdeptno=20;

可是以上的操作事實(shí)上是屬于一個(gè)視圖的替換操作,所以此時(shí)也可以運(yùn)用另外一種語(yǔ)法:

CREATEORREPLACEVIEWmyviewASSELECT*FROMempWHEREdeptno=20;

此時(shí)表示的是,假如視圖存在那么替換,不存在那么創(chuàng)建一張新的視圖,視圖的概念雖然好理解,但是在創(chuàng)建視圖的時(shí)候存在兩個(gè)選項(xiàng)。

選項(xiàng)一:WITHCHECKOPTION

上面所創(chuàng)建的視圖,是存在一個(gè)創(chuàng)建條件的“WHEREdeptno=20”,那么假如現(xiàn)在更新視圖中的這個(gè)條件呢?

UPDATEmyviewSETdeptno=30WHEREempno=7369;

此時(shí)更新的是一張視圖,但是視圖本身并不是一個(gè)詳細(xì)的數(shù)據(jù)表,而且現(xiàn)在更新的操作又是視圖的創(chuàng)建條件,很明顯這樣的做法不可取,所以此時(shí)為了解決這個(gè)問(wèn)題,可以加入WITHCHECKOPTION;

CREATEORREPLACEVIEWmyviewASSELECT*FROMempWHEREdeptno=20WITHCHECKOPTION;

此時(shí)再次執(zhí)行視圖的更新操作,涌現(xiàn)以下錯(cuò)誤提示:

ORA-01402:視圖WITHCHECKOPTIDNwhere子句違規(guī)

意味著現(xiàn)在根本就不能去更新視圖的創(chuàng)建條件。

選項(xiàng)二:WITHREADONLY

雖然運(yùn)用WITHCHECKOPTION可以保證視圖的創(chuàng)建條件不被更新,但是其他的字段卻允許更新。

UPDATEmyviewSETsal=9000WHEREempno=7369;

與之前的問(wèn)題一樣,視圖本身不是詳細(xì)的真實(shí)數(shù)據(jù),而是一些查詢(xún)語(yǔ)句,所以這樣的更新并不合理,那么在創(chuàng)建視圖的時(shí)候建議將其設(shè)置為只讀視圖:

CREATEORREPLACEVIEWmyviewASSELECT*FROMempWHEREdeptno=20WITHREADONLY;

此時(shí)再次發(fā)出更新的操作,那么徑直提示如下錯(cuò)誤:

ORA-01733:此處不允許虛擬列

而且肯定要留意的是,以上給出的是一個(gè)簡(jiǎn)約的操作語(yǔ)句視圖,假如現(xiàn)在視圖中的查詢(xún)語(yǔ)句是統(tǒng)計(jì)操作,那么根本就不可能更新。

CREATEORREPLACEVIEWmyviewASSELECTd.deptno,d.dname,d.loc,COUNT(e.empno)count,AVG(e.sal)avgFROMempe,deptdWHEREe.deptno(+)=d.deptnoGROUPBYd.deptno,d.dname,d.loc;

現(xiàn)在的信息是統(tǒng)計(jì)而來(lái)的,根本就不可能更新。

在一個(gè)項(xiàng)目之中,視圖的`數(shù)量有可能超過(guò)表的數(shù)量,由于查詢(xún)語(yǔ)句會(huì)許多的。

二、同義詞

同義詞就是意思相近的一組詞語(yǔ),對(duì)于同義詞的操作之前一貫在運(yùn)用,例如,現(xiàn)在有如下一個(gè)查詢(xún)語(yǔ)句:

SELECTSYSDATEFROMdual;

在之前說(shuō)過(guò)“dual”是一張?zhí)摂M表,但是虛擬表也確定應(yīng)當(dāng)有它的用戶(hù),經(jīng)過(guò)查詢(xún)可以發(fā)覺(jué),這張表是屬于SYS用戶(hù)的,但是這個(gè)時(shí)候就涌現(xiàn)一個(gè)問(wèn)題,在之前講解過(guò),不同的用戶(hù)要想訪問(wèn)其他用戶(hù)的表,那么需要寫(xiě)上“用戶(hù).表名稱(chēng)”,那么為什么此時(shí)scott用戶(hù)訪問(wèn)的時(shí)候徑直運(yùn)用dual即可,而不是運(yùn)用“sys.dual”呢,這個(gè)事實(shí)上就是同義詞的應(yīng)用,dual表示的是sys.dual的同義詞,而同義詞在Oracle之中稱(chēng)為SYNONYM,同義詞的創(chuàng)建語(yǔ)法如下:

CREATE[PUBLIC]SYSNONYM同義詞的名稱(chēng)FOR用戶(hù)名.表名稱(chēng);

范例:下面創(chuàng)建一個(gè)同義詞為myemp,此同義詞指向scott.emp

CREATESYNONYMmyempFORscott.emp;

此時(shí)創(chuàng)建勝利之后,以后在sys用戶(hù)中就可以運(yùn)用myemp這個(gè)同義詞的名稱(chēng)了,但是這個(gè)同義詞只適合sys用戶(hù)一個(gè)人運(yùn)用,其他用戶(hù)無(wú)法運(yùn)用,由于創(chuàng)建的時(shí)候沒(méi)有運(yùn)用PUBLIC,假如沒(méi)有運(yùn)用,那么表示創(chuàng)建的不是公共同義詞。

范例:創(chuàng)建公共同義詞

SYNONYMmyemp;SYNONYMmyempscott.emp;

CONNsystem/manager;SELECT*FROMmyemp;

但是同義詞也只是Oracle自己的概念,知道就行了。

三、索引

索引的主要功能就是用于提升數(shù)據(jù)庫(kù)的操作性能。

下面通過(guò)代碼分析一個(gè)最簡(jiǎn)約的索引操作的問(wèn)題;

例如,在之前曾經(jīng)寫(xiě)過(guò)如下的操作語(yǔ)句:

SELECT*FROMempWHEREsal1500;

此時(shí)由于在sal上沒(méi)有設(shè)置索引,所以它的查詢(xún)過(guò)程是采納逐行判斷的方式完成的,這種操作隨著數(shù)據(jù)量的上升,那么性能會(huì)涌現(xiàn)越來(lái)越多的問(wèn)題,但是假如說(shuō)將數(shù)據(jù)排列一下呢?

例如,現(xiàn)在將工作在內(nèi)存之中形成這樣的一種數(shù)據(jù)結(jié)構(gòu);

假如現(xiàn)在假設(shè)全部的數(shù)據(jù)都排列成以上的樹(shù)形結(jié)構(gòu)的話(huà),同樣的查詢(xún),現(xiàn)在還會(huì)查詢(xún)?nèi)坑涗泦??只?huì)查詢(xún)部分。

在Oracle之中創(chuàng)建索引有以下兩種方式:

主鍵約束:假如一張表中的列上存在了主鍵約束的話(huà),自動(dòng)創(chuàng)建索引;

手工創(chuàng)建:在某一個(gè)操作列上指定一個(gè)索引;

范例:在emp.sal字段上創(chuàng)建索引

CREATEINDE*emp_sal_indONemp(sal);

雖然索引創(chuàng)建完成了,但是要想觀測(cè)出特點(diǎn)基本上是不可能的。

但是這種索引有一個(gè)最大的問(wèn)題,即:假如要想實(shí)現(xiàn)性能的提高,那么需要始終維持以上的一棵樹(shù),那么假如說(shuō)現(xiàn)在這棵樹(shù)上的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論