- 相關(guān)推薦
oracl中視圖和同義詞的區(qū)別
oracl中視圖和同義詞分別是什么意思?有什么區(qū)別?以下是小編整理的中視圖和同義詞的區(qū)別,歡迎閱讀。
一、視圖
在之前所學(xué)習(xí)過(guò)的所有的SQL語(yǔ)法之中,查詢操作是最麻煩的,如果程序開(kāi)發(fā)人員將大量的精力都浪費(fèi)在查詢的編寫上,則肯定影響代碼的工作進(jìn)度,所以一個(gè)好的數(shù)據(jù)庫(kù)設(shè)計(jì)人員,除了根據(jù)業(yè)務(wù)的操作設(shè)計(jì)出數(shù)據(jù)表之外,還需要為用戶提供若干個(gè)視圖,而每一個(gè)視圖包裝了一條條復(fù)雜的SQL語(yǔ)句,視圖的創(chuàng)建語(yǔ)法如下:
CREATE [OR REPLACE] VIEW 視圖名稱
AS 子查詢;
范例:創(chuàng)建一張視圖
CREATE VIEW myview AS SELECT d.deptno,d.dname,d.loc,COUNT(e.empno) count,AVG(e.sal) avg FROM emp e,dept d
WHERE e.deptno(+)=d.deptno GROUP BY d.deptno,d.dname,d.loc;
現(xiàn)在已經(jīng)創(chuàng)建好了一張視圖,名稱為myview,所以現(xiàn)在查詢myview:
SELECT * FROM myview;
此時(shí)通過(guò)一個(gè)簡(jiǎn)單的視圖查詢操作,就可以完成之前的復(fù)雜SQL語(yǔ)句的功能,所以視圖就是包裝了SQL查詢操作。
范例:創(chuàng)建一張包含簡(jiǎn)單查詢語(yǔ)句的視圖
DROP VIEW myview;CREATE VIEW myview AS SELECT * FROM emp WHERE deptno=20;
可是以上的操作實(shí)際上是屬于一個(gè)視圖的替換操作,所以此時(shí)也可以使用另外一種語(yǔ)法:
CREATE OR REPLACE VIEW myview AS SELECT * FROM emp WHERE deptno=20;
此時(shí)表示的是,如果視圖存在則替換,不存在則創(chuàng)建一張新的視圖,視圖的概念雖然好理解,但是在創(chuàng)建視圖的時(shí)候存在兩個(gè)選項(xiàng)。
選項(xiàng)一:WITH CHECK OPTION
上面所創(chuàng)建的視圖,是存在一個(gè)創(chuàng)建條件的“WHERE deptno=20”,那么如果現(xiàn)在更新視圖中的這個(gè)條件呢?
UPDATE myview SET deptno=30 WHERE empno=7369;
此時(shí)更新的是一張視圖,但是視圖本身并不是一個(gè)具體的數(shù)據(jù)表,而且現(xiàn)在更新的操作又是視圖的創(chuàng)建條件,很明顯這樣的做法不可取,所以此時(shí)為了解決這個(gè)問(wèn)題,可以加入WITH CHECK OPTION;
CREATE OR REPLACE VIEW myview AS SELECT * FROM emp WHERE deptno=20 WITH CHECK OPTION;
此時(shí)再次執(zhí)行視圖的更新操作,出現(xiàn)以下錯(cuò)誤提示:
ORA-01402: 視圖 WITH CHECK OPTIDN where 子句違規(guī)
意味著現(xiàn)在根本就不能去更新視圖的創(chuàng)建條件。
選項(xiàng)二:WITH READ ONLY
雖然使用WITH CHECK OPTION可以保證視圖的創(chuàng)建條件不被更新,但是其他的字段卻允許更新。
UPDATE myview SET sal=9000 WHERE empno=7369;
與之前的問(wèn)題一樣,視圖本身不是具體的真實(shí)數(shù)據(jù),而是一些查詢語(yǔ)句,所以這樣的更新并不合理,那么在創(chuàng)建視圖的時(shí)候建議將其設(shè)置為只讀視圖:
CREATE OR REPLACE VIEW myview AS SELECT * FROM emp WHERE deptno=20 WITH READ ONLY;
此時(shí)再次發(fā)出更新的操作,則直接提示如下錯(cuò)誤:
ORA-01733: 此處不允許虛擬列
而且一定要注意的是,以上給出的是一個(gè)簡(jiǎn)單的操作語(yǔ)句視圖,如果現(xiàn)在視圖中的查詢語(yǔ)句是統(tǒng)計(jì)操作,則根本就不可能更新。
CREATE OR REPLACE VIEW myview AS SELECT d.deptno,d.dname,d.loc,COUNT(e.empno) count,AVG(e.sal) avg FROM emp e,dept d WHERE e.deptno(+)=d.deptno GROUP BY d.deptno,d.dname,d.loc;
現(xiàn)在的信息是統(tǒng)計(jì)而來(lái)的,根本就不可能更新。
在一個(gè)項(xiàng)目之中,視圖的數(shù)量有可能超過(guò)表的數(shù)量,因?yàn)椴樵冋Z(yǔ)句會(huì)很多的。
二、同義詞
同義詞就是意思相近的一組詞語(yǔ),對(duì)于同義詞的操作之前一直在使用,例如,現(xiàn)在有如下一個(gè)查詢語(yǔ)句:
SELECT SYSDATE FROM dual;
在之前說(shuō)過(guò)“dual”是一張?zhí)摂M表,但是虛擬表也肯定應(yīng)該有它的用戶,經(jīng)過(guò)查詢可以發(fā)現(xiàn),這張表是屬于SYS用戶的,但是這個(gè)時(shí)候就出現(xiàn)一個(gè)問(wèn)題,在之前講解過(guò),不同的用戶要想訪問(wèn)其他用戶的表,則需要寫上“用戶.表名稱”,那么為什么此時(shí)scott用戶訪問(wèn)的時(shí)候直接使用dual即可,而不是使用“sys.dual”呢,這個(gè)實(shí)際上就是同義詞的應(yīng)用,dual表示的是sys.dual的同義詞,而同義詞在Oracle之中稱為SYNONYM,同義詞的創(chuàng)建語(yǔ)法如下:
CREATE [PUBLIC] SYSNONYM 同義詞的名稱 FOR 用戶名.表名稱;
范例:下面創(chuàng)建一個(gè)同義詞為myemp,此同義詞指向scott.emp
CREATE SYNONYM myemp FOR scott.emp;
此時(shí)創(chuàng)建成功之后,以后在sys用戶中就可以使用myemp這個(gè)同義詞的名稱了,但是這個(gè)同義詞只適合sys用戶一個(gè)人使用,其他用戶無(wú)法使用,因?yàn)閯?chuàng)建的時(shí)候沒(méi)有使用PUBLIC,如果沒(méi)有使用,則表示創(chuàng)建的不是公共同義詞。
范例:創(chuàng)建公共同義詞
SYNONYM myemp; SYNONYM myemp scott.emp;
CONN system/manager;SELECT * FROM myemp;
但是同義詞也只是Oracle自己的概念,知道就行了。
三、索引
索引的主要功能就是用于提升數(shù)據(jù)庫(kù)的操作性能。
下面通過(guò)代碼分析一個(gè)最簡(jiǎn)單的索引操作的問(wèn)題;
例如,在之前曾經(jīng)寫過(guò)如下的操作語(yǔ)句:
SELECT * FROM emp WHERE sal>1500;
此時(shí)由于在sal上沒(méi)有設(shè)置索引,所以它的查詢過(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ù)都排列成以上的樹形結(jié)構(gòu)的話,同樣的查詢,現(xiàn)在還會(huì)查詢?nèi)坑涗泦?只?huì)查詢部分。
在Oracle之中創(chuàng)建索引有以下兩種方式:
主鍵約束:如果一張表中的列上存在了主鍵約束的話,自動(dòng)創(chuàng)建索引;
手工創(chuàng)建:在某一個(gè)操作列上指定一個(gè)索引;
范例:在emp.sal字段上創(chuàng)建索引
CREATE INDEX emp_sal_ind ON emp(sal);
雖然索引創(chuàng)建完成了,但是要想觀察出特點(diǎn)基本上是不可能的。
但是這種索引有一個(gè)最大的問(wèn)題,即:如果要想實(shí)現(xiàn)性能的提高,則必須始終維持以上的一棵樹,那么如果說(shuō)現(xiàn)在這棵樹上的數(shù)據(jù)需要頻繁修改的話,則代碼的性能肯定會(huì)有所降低。
所以一般索引只使用在不會(huì)頻繁修改的表中,而如果一張表上頻繁修改數(shù)據(jù)且又使用了索引的話,性能肯定會(huì)嚴(yán)重降低,所以性能的攬永遠(yuǎn)都是相對(duì)的。
以上的索引只是Oracle十幾種索引中的一種,也是最簡(jiǎn)單的一種,稱為B樹索引,還有位圖索引,反向索引,函數(shù)索引等等。
【oracl中視圖和同義詞的區(qū)別】相關(guān)文章:
保險(xiǎn)公司中的區(qū)拓和營(yíng)銷的區(qū)別07-13
在企業(yè)中做出納和考試中的會(huì)計(jì)的區(qū)別07-09
愧疚的同義詞和近義詞08-05
大數(shù)據(jù)分析中,因果和關(guān)聯(lián)之間的區(qū)別和聯(lián)系是什么?07-10
會(huì)計(jì)英語(yǔ)中be charged to和be credited to的區(qū)別?07-10
離職和辭職的區(qū)別?07-12
立冬和冬至的區(qū)別04-04
社保和醫(yī)保的區(qū)別07-02
業(yè)余和專業(yè)的區(qū)別07-03
平板和電腦的區(qū)別07-02