目的:
創(chuàng)建簡(jiǎn)單和復(fù)雜視圖
視圖復(fù)取數(shù)據(jù)
創(chuàng)建、維護(hù)和使用序列
創(chuàng)建和維護(hù)索引
創(chuàng)建私有和公有同義詞
數(shù)據(jù)庫(kù)對(duì)象:
Object
|
Description
|
Table
|
Basic unit of storage; composed of rows
|
View
|
Logically represents subsets of data from one or more tables
|
Sequence
|
Generates numeric values
|
Index
|
Improves the performance of some queries
|
Synonym
|
Gives alternative names to objects
|
視圖【View】
什么是視圖?
視圖呈現(xiàn)邏輯子集或數(shù)據(jù)的組合。視圖是基于表或其他視圖的邏輯表。一個(gè)視圖不包含自己的數(shù)據(jù),而是像一個(gè)窗口,通過窗口可以查看或更改表中的數(shù)據(jù)。視圖所基于的表稱為基表。視圖是存儲(chǔ)SELECT 聲明中的數(shù)據(jù)字典。
視圖的好處:
視圖可限制數(shù)據(jù)的訪問,因?yàn)橐晥D只顯示選定的列。
簡(jiǎn)化查詢,視圖進(jìn)行簡(jiǎn)單的查詢來檢索復(fù)雜連接。
提供數(shù)據(jù)獨(dú)立性。一個(gè)視圖可以從多個(gè)表中檢索數(shù)據(jù)。
視圖可根據(jù)特定標(biāo)準(zhǔn)為用戶提供對(duì)數(shù)據(jù)的訪問權(quán)限。
簡(jiǎn)單視圖和復(fù)雜視圖
簡(jiǎn)單視圖:
僅僅從一個(gè)表導(dǎo)出數(shù)據(jù)
不包含函數(shù)或數(shù)組
視圖可以執(zhí)行DML操作
復(fù)雜視圖:
從多個(gè)表導(dǎo)出數(shù)據(jù)
包含函數(shù)或數(shù)組
視圖不允許DML操作
創(chuàng)建視圖語法:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
[(alias[, alias]...)]
AS subquery--子查詢中可包含一個(gè)復(fù)雜的select查詢。
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];
OR REPLACE :已存在的將進(jìn)行覆蓋重建。
FORCE :無論基表是否存在,都進(jìn)行創(chuàng)建。
NOFORCE :使用基表存在的才能創(chuàng)建(默認(rèn)值)
view_name :視圖名稱
alias :別名為視圖查詢選擇的表達(dá)式指定名稱(別名數(shù)必須與視圖選擇的表達(dá)式數(shù)量相匹配。)
subquery :子查詢是一個(gè)完整的SELECT語句(您可以在SELECT列表中使用別名)。
WITH CHECK OPTION :指定僅可以插入或更新視圖可訪問的那些行
WITH READ ONLY :確保在此視圖上不能執(zhí)行DML操作
視圖上執(zhí)行DML操作:
簡(jiǎn)單視圖可以執(zhí)行DML操作
含以下條件則不能對(duì)視圖執(zhí)行DML操作
-組函數(shù)
-GROUP BY子句
-DISTINCT 關(guān)鍵字
-ROWNUM 關(guān)鍵字
-列上含有表達(dá)式,如(salary * 12)
-基表NOT NULL的列未在視圖列表中。
移除視圖:
DROP VIEW view_name;
序列【Sequence】
序列是一個(gè)生成數(shù)值的數(shù)據(jù)庫(kù)對(duì)象??梢詣?chuàng)建序列,然后用來生成數(shù)值。
序列的特征:
-能自動(dòng)產(chǎn)生唯一的數(shù)值
-它是共享對(duì)象
-能用于主鍵值
-替換應(yīng)用代碼
-它的值緩存在內(nèi)存中提升訪問效率
序列是用戶創(chuàng)建的數(shù)據(jù)庫(kù)對(duì)象,可以由多個(gè)用戶共享以生成整數(shù)。
您可以定義一個(gè)序列來生成唯一的值,或者重復(fù)使用相同的數(shù)字。
序列的典型用法是創(chuàng)建一個(gè)主鍵值,每個(gè)行必須是唯一的。 該序列由內(nèi)部Oracle例程生成并遞增(或遞減)。 這可以是一個(gè)節(jié)省時(shí)間的對(duì)象,因?yàn)樗梢詼p少編寫序列生成例程所需的應(yīng)用程序代碼量。
序列號(hào)是獨(dú)立存儲(chǔ)和生成的。 因此,相同的序列可以用于多個(gè)表格。
創(chuàng)建序列的語法:
CREATE SEQUENCE sequence_name
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
INCREMENT BY n:指定序列號(hào)之間的間隔,其中n是一個(gè)整數(shù)(如果忽略此值,則序列增加1)
START WITH n:指定要生成的第一個(gè)序列號(hào)(如果省略此值,則序列以1開頭)
MAXVALUE n:指定序列可以生成的最大值
NOMAXVALUE:指定遞增序列的最大值10^27,對(duì)遞減序列指定-1(默認(rèn)選項(xiàng))
MINVALUE n:指定最小序列值
NOMINVALUE:為遞增序列指定最小值1,對(duì)于遞增序列指定-(10^26)(默認(rèn)選項(xiàng))
CYCLE | NOCYCLE:指定序列達(dá)到最大值或最小值是否繼續(xù)生成值(NOCYCLE是默認(rèn)選項(xiàng))
CACHE| NOCACHE:指定Oracle
服務(wù)器預(yù)分頻和保留在內(nèi)存中的值(默認(rèn)情況下,Oracle服務(wù)器緩存20個(gè)值)
CREATE SEQUENCE sequence_t
INCREMENT BY 1
START WITH 10
MAXVALUE 999
NOCACHE
NOCYCLE;
序列生成后需要NEXTVAL和 CURRVAL偽列引用序列值
NEXTVAL:偽列用于從指定序列中提取連續(xù)的序列號(hào)。必須使用序列名稱來限定nextval。當(dāng)引用sequence.nextval是,會(huì)生成一個(gè)新的序列號(hào),并將當(dāng)前序列置于currval。
CURRVAL:偽列用于引用當(dāng)前用戶剛生成的序列號(hào)。必須使用nextval在當(dāng)前用戶會(huì)話生成一個(gè)序列號(hào),然后才能引用currval。
16:53:05 SQL> select sequence_t.nextval from dual;
NEXTVAL
----------
10
16:53:17 SQL> select sequence_t.currval from dual;
CURRVAL
----------
10
緩存序列的值:
在內(nèi)存中緩存序列,可以快速訪問這些序列值。當(dāng)?shù)谝淮螀⒖夹蛄袝r(shí),將會(huì)自動(dòng)填充緩存。從緩存的序列中檢索下一個(gè)序列值,在使用到最后的序列值之后,序列的下一個(gè)請(qǐng)求會(huì)將另一個(gè)序列的緩存拉入內(nèi)存中緩存。
序列的丟失:
-連續(xù)生成序列的值時(shí),在事務(wù)中回滾會(huì)導(dǎo)致數(shù)值丟失。
-系統(tǒng)的崩潰,導(dǎo)致緩存中的序列丟失。
-多表共用同一序列,會(huì)導(dǎo)致序列丟失。
修改序列:
ALTER SEQUENCE sequence_name
INCREMENT BY 20
MAXVALUE 99999
NOCACHE
NOCYCLE;
刪除序列:
DROP SEQUENCE sequence_name;
索引【Index】
索引是數(shù)據(jù)庫(kù)對(duì)象,用于提高某些查詢的性能。創(chuàng)建主鍵或唯一性約束時(shí)數(shù)據(jù)庫(kù)也會(huì)自動(dòng)創(chuàng)建。
索引:
-它是一個(gè)schema對(duì)象
-它使用指針關(guān)聯(lián)每一個(gè)行提高訪問速度
-它減少磁盤I/O,快速訪問本地?cái)?shù)據(jù)
-它依賴表
-數(shù)據(jù)庫(kù)服務(wù)器自動(dòng)維護(hù)和使用它。
Oracle服務(wù)器索引是一個(gè)模式對(duì)象,可以通過使用指針來加速行的檢索。 索引可以顯式或自動(dòng)創(chuàng)建。 如果在列上沒有索引,則會(huì)發(fā)生全表掃描。
索引提供對(duì)表中行的直接和快速訪問。 其目的是通過使用索引路徑快速定位數(shù)據(jù)來減少磁盤I / O。 該索引由Oracle服務(wù)器自動(dòng)維護(hù)和使用。 索引創(chuàng)建后,用戶不需要直接的活動(dòng)。
索引在邏輯上和物理上獨(dú)立于索引表。 這意味著它們可以隨時(shí)創(chuàng)建或刪除,并且不會(huì)影響基表或其他索引。
注意:刪除表格時(shí),相應(yīng)的索引也會(huì)被刪除。
注意:創(chuàng)建唯一性索引時(shí),建議創(chuàng)建一個(gè)唯一性約束,因?yàn)樗鼤?huì)隱式的創(chuàng)建一個(gè)唯一性索引。
注意:索引越多并不是更好,表上索引越多不會(huì)產(chǎn)生更快的查詢。在有索引列的表上進(jìn)行DML操作意味索引也必須更新。索引依賴表被刪除,索引也會(huì)跟著刪除。
同義詞是能夠以其他名稱調(diào)用表(其他對(duì)象)的數(shù)據(jù)庫(kù)對(duì)象。可以創(chuàng)建同義詞,給一個(gè)表(或其他對(duì)象)的替代名稱。
已刪除同義字.