最新oracle-第10章模式對(duì)象課件_第1頁(yè)
最新oracle-第10章模式對(duì)象課件_第2頁(yè)
最新oracle-第10章模式對(duì)象課件_第3頁(yè)
最新oracle-第10章模式對(duì)象課件_第4頁(yè)
最新oracle-第10章模式對(duì)象課件_第5頁(yè)
已閱讀5頁(yè),還剩315頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

oracle第10章模式對(duì)象oracle第10章模式對(duì)象本章要求掌握表的管理掌握索引的管理掌握索引化表的概念及其管理掌握分區(qū)的概念及分區(qū)管理了解簇、視圖、序列、同義詞、數(shù)據(jù)庫(kù)鏈接等的管理本章要求掌握表的管理10.1模式模式概念模式與用戶的關(guān)系模式選擇與切換10.1模式模式概念模式概念是指一系列邏輯數(shù)據(jù)結(jié)構(gòu)或?qū)ο蟮募稀DJ脚c用戶的關(guān)系模式與用戶相對(duì)應(yīng),一個(gè)模式只能被一個(gè)數(shù)據(jù)庫(kù)用戶所擁有,并且模式的名稱與這個(gè)用戶的名稱相同。通常情況下,用戶所創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象都保存在與自己同名的模式中。同一模式中數(shù)據(jù)庫(kù)對(duì)象的名稱必須惟一,而在不同模式中的數(shù)據(jù)庫(kù)對(duì)象可以同名。默認(rèn)情況下,用戶引用的對(duì)象是與自己同名模式中的對(duì)象,如果要引用其他模式中的對(duì)象,需要在該對(duì)象名之前指明對(duì)象所屬模式。模式概念模式選擇與切換如果用戶以NORMAL身份登錄,則進(jìn)入同名模式;若以SYSDBA身份登錄,則進(jìn)入SYS模式;如果以SYSOPER身份登錄,則進(jìn)入PUBLIC模式。模式選擇與切換10.2表Oracle常用數(shù)據(jù)類型表的創(chuàng)建表中約束的管理表參數(shù)設(shè)置表的修改表的刪除利用OEM管理表10.2表Oracle常用數(shù)據(jù)類型CREATETABLEtable_name(column_namedatatype[column_level_constraint][,column_namedatatype[column_level_constraint]…][,table_level_constraint])[parameter_list]直接創(chuàng)建表CREATETABLEtable_name直接創(chuàng)建表CREATETABLEemployee(empnoNUMBER(5)PRIMARYKEY,enameVARCHAR2(15),deptnoNUMBER(3)NOTNULLCONSTRAINTfk_empREFERENCESdept)TABLESPACEUSERSPCTFREE10PCTUSED40STORAGE(INITIAL50KNEXT50KMAXEXTENTS10PCTINCREASE25);CREATETABLEemployee(表名(table_name)必須是合法標(biāo)識(shí)符,長(zhǎng)度為1~30字節(jié),并且以字母開頭,可以包含字母(A~Z,a~z)、數(shù)字(0~9),下劃線(_)、美元符號(hào)($)和井號(hào)(#)。此外,表名稱不能是Oracle數(shù)據(jù)庫(kù)的保留字?jǐn)?shù)據(jù)類型(datatype)字符類型數(shù)字類型日期類型大對(duì)象類型其他類型表名(table_name)CHAR(n)定長(zhǎng)字符串,n的取值范圍為1-2000字節(jié)VARCHAR2(n)可變字符串,n取值范圍為1-4000字節(jié)自動(dòng)調(diào)整數(shù)據(jù)長(zhǎng)度NCHAR(n)用來(lái)存儲(chǔ)Unicode類型字符串。NVARCHAR2(n)它用來(lái)存儲(chǔ)Unicode類型字符串。LONG可變長(zhǎng)字符列,最大長(zhǎng)度為2GB用于不需設(shè)置成索引的字符,不常用字符類型CHAR(n)字符類型數(shù)字?jǐn)?shù)據(jù)類型NUMBER(m,n)可變長(zhǎng)的數(shù)值列,m是所有有效數(shù)字的位數(shù),n為小數(shù)點(diǎn)后的位數(shù)數(shù)字?jǐn)?shù)據(jù)類型NUMBER(m,n)日期數(shù)據(jù)類型DATE公元前4712年1月1日到公元4712年1月1日默認(rèn)格式:DD-MON-YY習(xí)慣格式:YYYY-MM-DDHH:MM:SS日期數(shù)據(jù)類型DATE大對(duì)象數(shù)據(jù)類型BLOB、CLOB、NCLOB用來(lái)保存較大的圖形文件或帶格式的文本文件、音頻和視頻等非文本文件最大長(zhǎng)度4GBBFILE在數(shù)據(jù)庫(kù)外部保存的大型二進(jìn)制對(duì)象文件。不能寫,只能讀、查詢大小有操作系統(tǒng)決定大對(duì)象數(shù)據(jù)類型BLOB、CLOB、NCLOB其他數(shù)據(jù)類型RAW(n)可變長(zhǎng)二進(jìn)制數(shù)據(jù)保存較小的圖形文件或帶格式的文本文件N取1-2000字節(jié)LONGRAW可變長(zhǎng)二進(jìn)制數(shù)據(jù)保存較大的圖形文件或帶格式的文本文件N取2GB字節(jié)ROWIDUROWID其他數(shù)據(jù)類型RAW(n)約束(constraint)在Oracle數(shù)據(jù)庫(kù)中對(duì)列的約束包括主鍵約束、惟一性約束、檢查約束、外鍵約束和空/非空約束等5中,定義方法有表級(jí)約束和列級(jí)約束2種。關(guān)于表的約束詳見10.2.2表約束中介紹。參數(shù)(parameter_list)在定義表時(shí),可以通過(guò)參數(shù)設(shè)置表存儲(chǔ)在哪一個(gè)表空間中,和存儲(chǔ)空間分配等。約束(constraint)利用子查詢創(chuàng)建表語(yǔ)法CREATETABLEtable_name(column_name[column_level_constraint][,column_name[column_level_constraint]…][,table_level_constraint])[parameter_list]ASsubquery;

利用子查詢創(chuàng)建表語(yǔ)法注意通過(guò)該方法創(chuàng)建表時(shí),可以修改表中列的名稱,但是不能修改列的數(shù)據(jù)類型和長(zhǎng)度;源表中的約束條件和列的缺省值都不會(huì)復(fù)制到新表中;子查詢中不能包含LOB類型和LONG類型列;當(dāng)子查詢條件為真時(shí),新表中包含查詢到的數(shù)據(jù);當(dāng)查詢條件為假時(shí),則創(chuàng)建一個(gè)空表。注意創(chuàng)建一個(gè)表,保存工資高于3000的員工的員工號(hào)、員工名和部門號(hào)。語(yǔ)句為:CREATETABLEemp_select(emp_no,emp_name,dept_no)ASSELECTempno,ename,deptnoFROMemployeeWHEREsal>3000;創(chuàng)建一個(gè)表,保存工資高于3000的員工的員工號(hào)、員工名和部門CREATETABLEEMP_SELECT(EMPNO,ENAME,JOB,DEPTNO,SALARY)PCTFREE10PCTUSED40TABLESPACEusersSTORAGE(INITIAL50KNEXT50KMAXEXTENTS10PCTINCREASE25)ASSELECTEMPNO,ENAME,JOB,EDPTNO,SALFROMEMPLOYEESWHERESAL>1000

CREATETABLEEMP_SELECT(EMPNO創(chuàng)建臨時(shí)表臨時(shí)表中的數(shù)據(jù)在特定條件下自動(dòng)釋放,但其結(jié)構(gòu)將一直存在。臨時(shí)表中的數(shù)據(jù)只在當(dāng)前會(huì)話或當(dāng)前事務(wù)中是有效的。根據(jù)臨時(shí)表中數(shù)據(jù)被釋放的時(shí)間不同,臨時(shí)表分為事務(wù)級(jí)別的臨時(shí)表和會(huì)話級(jí)別的臨時(shí)表兩類。ONCOMMITDELETEROWS//事務(wù)級(jí)臨時(shí)表ONCOMMITPRESERVEROWS//會(huì)話級(jí)臨時(shí)表創(chuàng)建臨時(shí)表臨時(shí)表中的數(shù)據(jù)在特定條件下自動(dòng)釋放,但其結(jié)構(gòu)將一事務(wù)級(jí)別的臨時(shí)表是在事務(wù)提交時(shí)系統(tǒng)自動(dòng)刪除表中所有記錄。CREATEGLOBALTEMPORARYTABLEtran_temp(IDNUMBER(2)PRIMARYKEY,nameVARCHAR2(20))ONCOMMITDELETEROWS;事務(wù)級(jí)別的臨時(shí)表是在事務(wù)提交時(shí)系統(tǒng)自動(dòng)刪除表中所有記錄。會(huì)話級(jí)別的臨時(shí)表是在會(huì)話終止時(shí)系統(tǒng)自動(dòng)刪除表中所有記錄。CREATEGLOBALTEMPORARYTABLEsess_temp(IDNUMBER(2)PRIMARYKEY,nameVARCHAR2(20))ONCOMMITPRESERVEROWS;會(huì)話級(jí)別的臨時(shí)表是在會(huì)話終止時(shí)系統(tǒng)自動(dòng)刪除表中所有記錄。10.2.2表約束約束的類別定義約束添加和刪除約束設(shè)置約束狀態(tài)約束的延遲檢查查詢約束信息10.2.2表約束約束的類別約束的類別約束作用是在表中定義的用于維護(hù)數(shù)據(jù)庫(kù)完整性的一些規(guī)則。通過(guò)對(duì)表中列定義約束,可以防止在執(zhí)行DML操作時(shí),將不符合要求的數(shù)據(jù)插入到表中。約束類型PRIMARYKEYUNIQUECHECKFOREIGNKEYNULL/NOTNULL約束的類別約束作用PRIMARYKEY特點(diǎn)定義主鍵,起惟一標(biāo)識(shí)作用,其值不能為NULL,也不能重復(fù);一個(gè)表中只能定義一個(gè)主鍵約束;建立主鍵約束的同時(shí),在該列上建立一個(gè)惟一性索引,可以為它指定存儲(chǔ)位置和存儲(chǔ)參數(shù);主鍵約束可以是列級(jí)約束,也可以是表級(jí)約束。PRIMARYKEY特點(diǎn)UNIQUE特點(diǎn)定義為惟一性約束的某一列或多個(gè)列的組合的取值必須惟一;如果某一列或多個(gè)列僅定義惟一性約束,而沒有定義非空約束,則該約束列可以包含多個(gè)空值;Oracle自動(dòng)在惟一性約束列上建立一個(gè)惟一性索引,可以為它指定存儲(chǔ)位置和存儲(chǔ)參數(shù);惟一性約束可以是列級(jí)約束,也可以是表級(jí)約束。

UNIQUE特點(diǎn)在一個(gè)基本表中只能定義一個(gè)PRIMARYKEY約束,但可定義多個(gè)UNIQUE約束;對(duì)于指定為PRIMARYKEY的一個(gè)列或多個(gè)列的組合,其中任何一個(gè)列都不能出現(xiàn)空值,而對(duì)于UNIQUE所約束的唯一鍵,則允許為空。不能為同一個(gè)列或一組列既定義UNIQUE約束,又定義PRIMARYKEY約束。PRIMARYKEY與UNIQUE比較在一個(gè)基本表中只能定義一個(gè)PRIMARYKEY約束,但可定CHECK特點(diǎn)檢查約束用來(lái)限制列值所允許的取值范圍,其表達(dá)式中必須引用相應(yīng)列,并且表達(dá)式的計(jì)算結(jié)果必須是一個(gè)布爾值;約束表達(dá)式中不能包含子查詢,也不能包含SYSDATE、USER等SQL函數(shù),和ROWID、ROWNUM等偽列;一個(gè)列可以定義多個(gè)檢查約束;檢查約束可以是列級(jí)約束,也可以是表級(jí)約束。

CHECK特點(diǎn)概念FOREIGNKEY約束指定某一個(gè)列或一組列作為外部鍵,其中,包含外部鍵的表稱為從表,包含外部鍵所引用的主鍵或唯一鍵的表稱主表。系統(tǒng)保證從表在外部鍵上的取值要么是主表中某一個(gè)主鍵值或唯一鍵值,要么取空值。以此保證兩個(gè)表之間的連接,確保了實(shí)體的參照完整性。FOREIGNKEY概念FOREIGNKEYFOREIGNKEY特點(diǎn)定義外鍵約束的列的取值要么是主表參照列的值,要么為空;外鍵列只能參照于主表中的主鍵約束列或惟一性約束列;可以在一列或多列組合上定義外鍵約束;外鍵約束可以是列級(jí)約束,也可以是表級(jí)約束。FOREIGNKEY特點(diǎn)NULL/NOTNULL特點(diǎn)在同一個(gè)表中可以定義多個(gè)NOTNULL約束;只能是列級(jí)約束。NULL/NOTNULL特點(diǎn)定義約束列約束是對(duì)某一個(gè)特定列的約束,包含在列定義中,直接跟在該列的其他定義之后,用空格分隔,不必指定列名;表約束與列定義相互獨(dú)立,不包括在列定義中。通常用于對(duì)多個(gè)列一起進(jìn)行約束,與列定義用’,’分隔。定義表約束時(shí)必須指出要約束的那些列的名稱。定義約束列約束是對(duì)某一個(gè)特定列的約束,包含在列定義中,直接跟定義列級(jí)約束的語(yǔ)法為:[CONSTRAINTconstraint_name]constraint_type[conditioin];定義表級(jí)約束的語(yǔ)法為:[CONSTRAINTconstraint_name]constraint_type([column1_name,column2_name,…]|[condition]);注意Oracle約束通過(guò)名稱進(jìn)行標(biāo)識(shí)。在定義時(shí)可以通過(guò)CONSTRAINT關(guān)鍵字為約束命名。如果用戶沒有為約束命名,Oracle將自動(dòng)為約束命名。定義列級(jí)約束的語(yǔ)法為:CREATETABLEstudent(snoNUMBER(6)CONSTRAINTS_PKPRIMARYKEY,snameVARCHAR2(10)NOTNULL,sexCHAR(2)CONSTRAINTS_CK1check(sexin('M','F')),sageNUMBER(6,2),CONSTRAINTS_CK2CHECK(sagebetween18and60));

CREATETABLEcourse(cnoNUMBER(6)PRIMARYKEY,cnameCHAR(20)UNIQUEUSINGINDEXTABLESPACEindxSTORAGE(INITIAL64KNEXT64K));CREATETABLEstudent(定義列級(jí)FOREIGNKEY約束[CONSTRAINTconstraint_name][FOREIGNKEY]

REFERENCESref_table_name(column_name,…)定義表級(jí)FOREIGNKEY約束[CONSTRAINTconstraint_name]FOREIGNKEY(column_name,…)REFERENCESref_table_name(column_name,…)[ONDELETECASCADE|SETNULL];定義列級(jí)FOREIGNKEY約束ONDELETECASCADE刪除子表中所有相關(guān)記錄ONDELETESETNULL將子表中相關(guān)記錄的外鍵約束列值設(shè)置為NULLONDELETERESTRICTED受限刪除,即如果子表中有相關(guān)子記錄存在,則不能刪除主表中的父記錄,默認(rèn)引用方式。ONDELETECASCADEDEFAULT如果用戶在插入新行時(shí)沒有顯示為列提供數(shù)據(jù),系統(tǒng)將默認(rèn)值賦給該列。語(yǔ)法[CONSTRAINT<約束名>]DEFAULT表達(dá)式DEFAULT添加約束添加約束語(yǔ)法為:ALTERTABLEtable_nameADD[CONSTRAINTconstraint_name]constraint_type(column1_name,column2_name,…)[condition];添加約束添加約束語(yǔ)法為:創(chuàng)建一個(gè)表CREATETABLEplayer(IDNUMBER(6),snoNUMBER(6),snameVARCHAR2(10),sageNUMBER(6,2),resumeVARCHAR2(1000));添加主鍵約束ALTERTABLEplayerADDCONSTRAINTP_PKPRIMARYKEY(ID);添加惟一性約束ALTERTABLEplayerADDCONSTRAINTP_UKUNIQUE(sname);創(chuàng)建一個(gè)表添加檢查約束ALTERTABLEplayerADDCONSTRAINTP_CKCHECK(sageBETWEEN20AND30);添加外鍵約束ALTERTABLEplayerADDCONSTRAINTP_FKFOREIGNKEY(sno)REFERENCESstudent(sno)ONDELETECASCADE;添加空/非空約束注意:為表列添加空/非空約束時(shí)必須使用MODIFY子句代替ADD子句。ALTERTABLEplayerMODIFYresumeNOTNULL;ALTERTABLEplayerMODIFYresumeNULL;添加檢查約束修改約束ALTERTABLE<table_name>ADD<constraint>MODIFY<constraint>ENABLE<constraint>DISABLE<constraint>DROP<constraint>修改約束ALTERTABLE<table_name>刪除約束刪除指定內(nèi)容的約束ALTERTABLEplayerDROPUNIQUE(sname);刪除指定名稱的約束ALTERTABLEplayerDROPCONSTRAINTP_CK;如果要在刪除主鍵約束、惟一性約束同時(shí)保留惟一性索引,則必須在ALTERTABLE…DORP語(yǔ)句中指定KEEPINDEX子句。ALTERTABLEplayerDROPCONSTRAINTP_UKKEEPINDEX;如果要?jiǎng)h除約束同時(shí),刪除引用該約束的其他約束,則需要在ALTERTABLE…DORP語(yǔ)句中指定CASCADE關(guān)鍵字。ALTERTABLEplayerDROPCONSTRAINTP_PKCASCADE;刪除約束刪除指定內(nèi)容的約束設(shè)置約束狀態(tài)激活(ENABLE)狀態(tài)當(dāng)約束處于激活狀態(tài)時(shí),約束將對(duì)表的插入或更新操作進(jìn)行檢查,與約束規(guī)則沖突的操作被回退。禁用(DISABLE)狀態(tài)當(dāng)約束處于禁用狀態(tài)時(shí),約束不起作用,與約束規(guī)則沖突的插入或更新操作也能夠成功執(zhí)行。利用SQL*Loader從外部數(shù)據(jù)源提取大量數(shù)據(jù)到數(shù)據(jù)庫(kù)中;進(jìn)行數(shù)據(jù)庫(kù)中數(shù)據(jù)的大量導(dǎo)入、導(dǎo)出操作;針對(duì)表執(zhí)行一項(xiàng)包含大量數(shù)據(jù)操作的批處理工作時(shí)。設(shè)置約束狀態(tài)激活(ENABLE)狀態(tài)禁用約束在定義約束時(shí),可以將約束設(shè)置為禁用狀態(tài),默認(rèn)為激活狀態(tài)。也可以在約束創(chuàng)建后,修改約束狀態(tài)為禁用。創(chuàng)建表時(shí)禁用約束CREATETABLES(SNOCHAR(10)PRIMARYKEYDISALBE,…);利用ALTERTABLE…DISABLE禁用約束ALTERTABLESTUDENTDISABLECONSTRAINTS_CK1;ALTERTABLESTUDENTDISABLEUNIQUE(sname);禁用約束禁用主鍵約束、惟一性約束時(shí),會(huì)刪除其對(duì)應(yīng)的惟一性索引,而在重新激活時(shí),Oracle為它們重建惟一性索引。若在禁用約束時(shí),保留對(duì)應(yīng)的惟一性索引,可使用ALTERTABLE…DISABLE…KEEPINDEX語(yǔ)句。ALTERTABLESTUDENTDISABLEUNIQUE(sname)KEEPINDEX;ALTERTABLESTUDENTDISABLEPRIMARYKEYKEEPINDEX;若當(dāng)前約束(主鍵約束、惟一性約束)列被引用,則需要使用ALTERTABLE…DISABLE…CASCADE語(yǔ)句同時(shí)禁用引用該約束的約束。ALTERTABLESTUDENTDISABLEPRIMARYKEYKEEPINDEXCASCADE;禁用主鍵約束、惟一性約束時(shí),會(huì)刪除其對(duì)應(yīng)的惟一性索引,而在重激活約束創(chuàng)建或添加約束時(shí),默認(rèn)為激活狀態(tài)。利用ALTERTABLE…ENABLE…語(yǔ)句激活約束ALTERTABLESTUDENTENABLEUNIQUE(sname);禁用主鍵約束、惟一性約束時(shí),會(huì)刪除其對(duì)應(yīng)的惟一性索引,而在重新激活時(shí),Oracle為它們重建惟一性索引,可以為索引設(shè)置存儲(chǔ)位置和存儲(chǔ)參數(shù)(索引與表盡量分開存儲(chǔ))。ALTERTABLESTUDENTENABLEPRIMARYKEYUSINGINDEXTABLESPACEindxSTORAGE(INITIAL32KNEXT16K);通過(guò)ALTERTABLE…MODIFY…DISABLE|ENABLE語(yǔ)句改變約束狀態(tài)ALTERTABLESTUDENTMODIFYCONSTRAINTS_CK2DISABLE;激活約束約束的延遲檢查默認(rèn)情況下,在表中的約束都是不可延遲約束,Oracle在一條DML語(yǔ)句執(zhí)行完畢之后立即進(jìn)行約束檢查(除非禁用)。

創(chuàng)建約束時(shí)可以顯式使用DEFERRABLE關(guān)鍵字,創(chuàng)建可延遲的約束。INITIALLYIMMEDIATE或INITIALLYDEFERRED說(shuō)明可延遲約束在初始狀態(tài)下是立即檢查還是延遲檢查如果在定義約束時(shí)設(shè)定為不可延遲,則約束創(chuàng)建后不能更改其可延遲性。只有創(chuàng)建時(shí)設(shè)定為可延遲的約束,創(chuàng)建后才能更改其可延遲性。約束的延遲檢查默認(rèn)情況下,在表中的約束都是不可延遲約束,創(chuàng)建兩個(gè)表,其約束都是可延遲的。CREATETABLEnew_dept(deptnoNUMBERPRIMARYKEYDEFERRABLEINITIALLYIMMEDIATE,dnameCHAR(10)UNIQUE);CREATETABLEnew_emp(empnoNUMBERPRIMARYKEY,enameCHAR(10),deptnoNUMBERCONSTRAINTNE_FKREFERENCESnew_dept(deptno)ONDELETECASCADEDEFERRABLE);創(chuàng)建兩個(gè)表,其約束都是可延遲的。由于外鍵約束的作用,執(zhí)行下面語(yǔ)句時(shí)會(huì)產(chǎn)時(shí)錯(cuò)誤。INSERTINTOnew_empVALUES(1,'ZHANG',10);*ERROR位于第1行:ORA-02291:違反完整約束條件(SCOTT.E_FK)-未找到父項(xiàng)關(guān)鍵字

由于外鍵約束的作用,執(zhí)行下面語(yǔ)句時(shí)會(huì)產(chǎn)時(shí)錯(cuò)誤。將new_emp表的外鍵約束檢查延遲。ALTERTABLEnew_empMODIFYCONSTRAINTNE_FKINITIALLYDEFERRED;此時(shí),由于將new_emp表外鍵約束延遲到事務(wù)結(jié)束后進(jìn)行檢查,因此可以先向new_emp中插入數(shù)據(jù),而后向new_dept中插入數(shù)據(jù)。INSERTINTOnew_empVALUES(1,'ZHANG',10);INSERTINTOnew_deptVALUES(10,'COMPUTER');COMMIT;將new_emp表的外鍵約束檢查延遲。操作完后,應(yīng)將new_emp外鍵約束檢查恢復(fù)原來(lái)狀態(tài)。ALTERTABLEnew_empMODIFYCONSTRAINTNE_FKINITIALLYIMMEDIATE;注意:在修改約束的檢查延遲性時(shí),如果無(wú)法確定約束的名稱或需要設(shè)置多個(gè)約束的延遲性,可以一次性將所有可延遲的約束延遲或恢復(fù)。SETCONSTRAINTALLDEFERRED;SETCONSTRAINTALLIMMEDIATE;

操作完后,應(yīng)將new_emp外鍵約束檢查恢復(fù)原來(lái)狀態(tài)。查詢約束信息ALL_CONSTRAINTSUSER_CONSTRAINTSDBA_CONSTRAINTSALL_CONS_COLUMNSUSER_CONS_COLUMNSDAB_CONS_COLUMNS查詢約束信息ALL_CONSTRAINTS從表USER_CONSTRAINTS中查看所有約束的名字、定義

SELECTconstraint_name,constraint_typesearch_conditionFROM user_constraintsWHERE table_name='EMP';從視圖USER_CONS_COLUMNS中查看約束關(guān)聯(lián)的列

SELECT constraint_name,column_nameFROMuser_cons_columnsWHERE table_name='EMP';從表USER_CONSTRAINTS中查看所有約束的名字、定10.2.3表參數(shù)設(shè)置TABLESPACETABLESPACE子句用于指定表存儲(chǔ)的表空間。STORAGESTORAGE子句用于設(shè)置表的存儲(chǔ)參數(shù)。若不指定,則繼承表空間的存儲(chǔ)參數(shù)設(shè)置。NITIALNEXTPCTINCREASEMINEXTENTSMAXEXTENTSBUFFER_POOL(KEEP、RECYCLE、DEFAULT)

10.2.3表參數(shù)設(shè)置TABLESPACESTORAGE參數(shù)設(shè)置需注意:如果表空間管理方式為EXTENTMANAGEMENTLOCALAUTOALLOCATE,則在STORAGE中只能指定INITIAL,NEXT和MINEXTENTS這3個(gè)參數(shù);如果表空間管理方式為EXTENTMANAGEMENTLOCALUNIFORM,則不能指定任何STORAGE子句;如果表空間管理方式為EXTENTMANAGEMENTDICTIONARY,則在STORAG中可以設(shè)置任何參數(shù)。STORAGE參數(shù)設(shè)置需注意:數(shù)據(jù)塊管理參數(shù)PCTFREE:用于指定數(shù)據(jù)塊中必須保留的最小空閑空間。PCTUSED:用于指定當(dāng)數(shù)據(jù)塊空閑空間達(dá)到PCTFREE參數(shù)的限制后,數(shù)據(jù)塊能夠被再次使用前,已占用的存儲(chǔ)空間必須低于的比例。INITRANS:用于指定能夠并發(fā)訪問(wèn)同一個(gè)數(shù)據(jù)塊的事務(wù)的數(shù)量。MAXTRANS:用于指定能夠并發(fā)訪問(wèn)同一個(gè)數(shù)據(jù)塊的事務(wù)的最大數(shù)量。數(shù)據(jù)塊管理參數(shù)LOGGING子句默認(rèn)為NOLOGGING,即表的創(chuàng)建操作不會(huì)記錄到重做日志文件中,尤其適合通過(guò)查詢創(chuàng)建表的情況。使用LOGGING子句,表的創(chuàng)建操作(包括通過(guò)查詢創(chuàng)建表時(shí)的插入記錄操作)都將記錄到重做日志文件中。LOGGING、NOLOGGINGPARALLEL、NOPARALLELCACHE、NOCACHEMONITORING、NOMONITORINGLOGGING子句10.2.4修改表基本語(yǔ)法列的添加、刪除、修改約束添加、刪除、修改表參數(shù)修改表結(jié)構(gòu)重組表重命名等為表和列添加注釋10.2.4修改表基本語(yǔ)法ALTERTABLE<表名>ADD<新列名><數(shù)據(jù)類型>[<完整性約束定義]MODIFY<列名><數(shù)據(jù)類型>RENAMECOLUMNoldnameTOnewnameSETUNUSEDCOLUMNcolumn//singlecolumnSETUNUSEDCOLUMNS(column1,column2…)DROPCOLUMN<col>//singlecolumnDROP<col1,col2…>//multicolumnDROPUNUSEDCOLUMNSALTERTABLE<表名>添加列語(yǔ)法ALTERTABLEtable_nameADD(new_column_namedatatype[NOTNULL][DEFAULTvalue]);示例ALTERTABLEemployeeADD(phoneVARCHAR2(10),hiredateDATEDEFAULTSYSDATENOTNULL);添加列修改列類型語(yǔ)法ALTERTABLEtable_nameMODIFYcolumn_namenew_datatype;修改表中列類型時(shí),必須滿足下列條件:可以增大字符類型列的長(zhǎng)度和數(shù)值類型列的精度;如果字符類型列、數(shù)值類型列中數(shù)據(jù)滿足新的長(zhǎng)度、精度,則可以縮小類型的長(zhǎng)度、精度;如果不改變字符串的長(zhǎng)度,可以將VARCHAR2類型和CAHR類型轉(zhuǎn)換;如果更改數(shù)據(jù)類型為另一種非同系列類型,則列中數(shù)據(jù)必須為NULL。修改列類型示例ALTERTABLEemployeeMODIFYenameCHAR(20);ALTERTABLEemployeeMODIFYphoneNUMBER;修改列名語(yǔ)法ALTERTABLEtable_nameRENAMECOLUMNoldnameTOnewname;示例ALTERTABLEemployeeRENAMECOLUMNenameTOemployee_name;示例刪除列直接刪除列語(yǔ)法ALTERTABLEtable_nameDROP[COLUMNcolumn_name]|[(column1_name,column2_name,…)][CASCADECONSTRAINTS];直接刪除列示例ALTERTABLEscDROPCOLUMNsnoCASCADECONSTRAINTS;ALTERTABLEemployeeDROP(phone,hiredate);刪除列將列標(biāo)記為UNUSED,然后進(jìn)行刪除。ALTERTABLEtable_nameSETUNUSED[COLUMNcolumn_name]|[(column1_name,column2_name,…)][CASCADECONSTRAINTS];示例ALTERTABLEplayerSETUNUSEDCOLUMNsage;ALTERTABLEplayerSETUNUSED(sname,resume);ALTERTABLEplayerDROPUNUSEDCOLUMNS;將列標(biāo)記為UNUSED,然后進(jìn)行刪除。表參數(shù)修改可以對(duì)表的參數(shù)進(jìn)行修改,包括存儲(chǔ)參數(shù)、存儲(chǔ)位置、數(shù)據(jù)塊設(shè)置等。ALTERTABLEemployeePCTFREE30PCTUSED60STORAGE(NEXT512KPCTINCREASE10);注意:表創(chuàng)建后不能對(duì)INITIAL、MINEXTENTS兩個(gè)參數(shù)進(jìn)行修改。表參數(shù)修改表結(jié)構(gòu)重組將一個(gè)非分區(qū)的表移動(dòng)到一個(gè)新的數(shù)據(jù)段中,或者移動(dòng)到其他的表空間中,通過(guò)這種操作可以重建表的存儲(chǔ)結(jié)構(gòu),稱為表結(jié)構(gòu)重組。語(yǔ)法ALTERTABLEtbnameMOVE[TABLESPACEtbs_name]注意直到表被完全移動(dòng)到新的數(shù)據(jù)段中之后,Oracle才會(huì)刪除原來(lái)的數(shù)據(jù)段;表結(jié)構(gòu)重組后,表中每個(gè)記錄的ROWID會(huì)發(fā)生變化,因此該表的所有索引失效,需要重新建立索引;如果表中包含LOB列,則默認(rèn)情況下不移動(dòng)LOB列數(shù)據(jù)和LOB索引段。表結(jié)構(gòu)重組表重命名語(yǔ)法ALTERTABLEtable_old_nameRENAMETOtable_new_name;RENAMEtable_old_nameTOtable_new_name;說(shuō)明Oracle自動(dòng)更新相應(yīng)的約束、索引和與此表相關(guān)的權(quán)限;同時(shí)以此表為參考的視圖、同義詞、存儲(chǔ)過(guò)程和函數(shù)為非法。表重命名為表添加注釋語(yǔ)法COMMENTONTALBEtable_nameIS…;為列添加注釋語(yǔ)法COMMENTONCOLUMNtable_name.column_nameIS…注釋可以通過(guò)以下數(shù)據(jù)字典來(lái)查看.ALL_COL_COMMENTSUSER_COL_COMMENTSALL_TAB_COMMENTSUSER_TAB_COMMENTS為表添加注釋最新oracle-第10章模式對(duì)象課件10.2.5刪除表使用DELETE語(yǔ)句刪減表使用TRUNCATE語(yǔ)句刪減表TRUNCATETABLEEMP[REUSESTORAGE]

使用DROP語(yǔ)句刪除表DROPTABLEEMP[CASCADECONSTRAINTS]

DELETE、TRUNCATE、DROP 區(qū)別10.2.5刪除表使用DELETE語(yǔ)句刪減表刪除一個(gè)表同時(shí),Oracle將執(zhí)行下列操作:刪除該表中所有記錄;從數(shù)據(jù)字典中刪除該表定義;刪除與該表相關(guān)的所有索引和觸發(fā)器;回收為該表分配的存儲(chǔ)空間;依賴于該表的數(shù)據(jù)庫(kù)對(duì)象處于INVALID狀態(tài)。刪除一個(gè)表同時(shí),Oracle將執(zhí)行下列操作:10.2.6利用OEM管理表創(chuàng)建表刪除表修改表查詢表10.2.6利用OEM管理表創(chuàng)建表10.3索引索引概述索引管理利用OEM管理索引10.3索引索引概述10.3.1索引概述索引概念及作用索引是為了加速對(duì)表中元組的檢索而創(chuàng)建的一種分散存儲(chǔ)結(jié)構(gòu);是對(duì)表而建立的,由除存放表的數(shù)據(jù)頁(yè)面以外的索引頁(yè)面組成,獨(dú)立于被索引的表;通過(guò)使用索引加速行的檢索,但減慢更新的速度;快速定位數(shù)據(jù),減少磁盤I/O;Oracle自動(dòng)使用、維護(hù)索引10.3.1索引概述索引概念及作用索引分類惟一性索引與非惟一性索引平衡樹索引與位圖索引單列索引與復(fù)合索引函數(shù)索引聚簇索引全局索引與本地索引索引分類索引使用原則導(dǎo)入數(shù)據(jù)后再創(chuàng)建索引

在適當(dāng)?shù)谋砗妥侄紊蟿?chuàng)建索引

經(jīng)常查詢的記錄數(shù)目少于表中所有記錄總數(shù)的5%;經(jīng)常進(jìn)行連接查詢表,在連接列上建立索引能夠顯著提高查詢的速度;對(duì)于取值范圍很大的列應(yīng)當(dāng)創(chuàng)建B樹索引;對(duì)于取值范圍很小的列應(yīng)當(dāng)創(chuàng)建位圖索引不能在LONG、LONGRAW、LOB數(shù)據(jù)類型的列上創(chuàng)建索引;Oracle會(huì)自動(dòng)在PRIMARYKEY和UNIQUE約束的列上創(chuàng)建惟一性索引。合理設(shè)置復(fù)合索引中的字段順序

索引使用原則限制表中索引的數(shù)目

表中索引數(shù)目越多,查詢速度越快,但表的更新速度越慢。因?yàn)樗饕蕉啵S護(hù)索引所需開銷越大,當(dāng)更新表時(shí),需要同時(shí)更新與表相關(guān)的所有索引。為索引設(shè)置合適的PCTFREE參數(shù)

選擇存儲(chǔ)索引的表空間默認(rèn)情況下,索引與表存儲(chǔ)在同一表空間中。索引與表存儲(chǔ)在同一表空間中,有利于數(shù)據(jù)庫(kù)維護(hù)操作,具有較高的可用性;反之,若索引與表存儲(chǔ)在不同的表空間中,則可提高系統(tǒng)的存取性能,減少硬盤I/O沖突,但是表與索引可用狀態(tài)可能出現(xiàn)不一致,如一個(gè)處于聯(lián)機(jī)狀態(tài),另一個(gè)處于脫機(jī)狀態(tài)。限制表中索引的數(shù)目10.3.2管理索引創(chuàng)建索引修改索引刪除索引索引的查詢10.3.2管理索引創(chuàng)建索引語(yǔ)法CREATE[UNIQUE]|[BITMAP]INDEXindex_nameONtable_name([column_name[ASC|DESC],…]|[expression])[REVERSE][parameter_list];說(shuō)明UNIQUE表示建立惟一性索引;BITMAP表示建立位圖索引;ASC/DESC用于指定索引值的排列順序,ASC表示按升序排序,DESC表示按降序排序,缺省值為ASC;REVERSE表示建立反鍵索引;parameter_list用于指定索引的存放位置、存儲(chǔ)空間分配和數(shù)據(jù)塊參數(shù)設(shè)置。創(chuàng)建索引語(yǔ)法創(chuàng)建索引創(chuàng)建非惟一性索引

CREATEINDEXemployee_enameONemployee(ename)TABLESPACEusersSTORAGE(INITIAL20KNEXT20kPCTINCREASE75);創(chuàng)建惟一性索引

CREATEUNIQUEINDEXdeptartment_indexONdepartment(dname);創(chuàng)建位圖索引

CREATEBITMAPINDEXstudent_sexONstudent(sex);創(chuàng)建反序索引

創(chuàng)建反序索引CREATEINDEXplayer_sageONplayer(sage)REVERSE;創(chuàng)建非惟一性索引創(chuàng)建函數(shù)索引

CREATEINDEXidxONemployee(UPPER(ename));定義約束時(shí)創(chuàng)建索引CREATETABLEnew_employee(empnoNUMBER(5)PRIMARYKEYUSINGINDEXTABLESPACEusersPCTFREE0,enameVARCHAR2(20));創(chuàng)建函數(shù)索引修改索引修改索引的存儲(chǔ)參數(shù)

ALTERINDEXemployee_enameSTORAGE(PCTINCREASE50);合并索引

ALTERINDEX…COALESCEALTERINDEXemployee_enameCOALESCE;修改索引修改索引的存儲(chǔ)參數(shù)重建索引

ALTERINDEX…REBUILDERALTERINDEXplayer_sageREBUILD;合并索引與重建索引比較合并索引重建索引不能將索引移到其他表空間中可以將索引移到其他表空間中代價(jià)較低,不需要使用額外的存儲(chǔ)空間代價(jià)較高,需要使用額外的存儲(chǔ)空間只能在B樹的同一子樹中進(jìn)行合并,不會(huì)改變樹的高度重建整個(gè)B樹,可能會(huì)降低樹的高度可以快速釋放葉子節(jié)點(diǎn)中未使用的存儲(chǔ)空間可以快速更改索引的存儲(chǔ)參數(shù)。在重建過(guò)程中如果指定了ONLINE關(guān)鍵字,不會(huì)影響對(duì)當(dāng)前索引的使用重建索引合并索引重建索引不能將索引移到其他表空監(jiān)視索引

ALTERINDEX…MONITORINGUSAGEALTERINDEXemployee_enameMONITORINGUSAGE;ALTERINDEXemployee_enameNOMONITORINGUSAGE;索引重命名ALTERINDEX…RENAMETO…ALTERINDEXemployee_enameRENAMETOemployee_new_ename;監(jiān)視索引刪除索引語(yǔ)法DROPINDEXindex_name;在下面幾種情況下,可以考慮刪除索引該索引不再使用。通過(guò)一段時(shí)間監(jiān)視,發(fā)現(xiàn)幾乎沒有查詢或只有極少數(shù)查詢會(huì)使用該索引。由于索引中包含損壞的數(shù)據(jù)塊或包含過(guò)多的存儲(chǔ)碎片等,需要?jiǎng)h除該索引,然后重建索引。由于移動(dòng)了表數(shù)據(jù)而導(dǎo)致索引失效刪除索引語(yǔ)法索引的查詢DBA_INDEXES、ALL_INDEXES、USER_INDEXES包含索引的基本描述信息和統(tǒng)計(jì)信息,包括索引的所有者、索引的名稱、索引的類型、對(duì)應(yīng)表的名稱、索引的存儲(chǔ)參數(shù)設(shè)置、由分析得到的統(tǒng)計(jì)信息等信息DBA_IND_COLUMNS、ALL_IND_COLUMNS、USER_IND_COLUMNS包含索引列的描述信息,包括索引的名稱、表的名稱和索引列的名稱等信息DBA_IND_EXPRESSIONS、ALL_IND_EXPRESSIONS、USER_IND_EXPRESSIONS包含函數(shù)索引的描述信息,通過(guò)該視圖可以查看到函數(shù)索引的函數(shù)或表達(dá)式V$OBJECT_USAGE包含通過(guò)ALTERINDEX…MONITORINGUSAGE語(yǔ)句對(duì)索引進(jìn)行監(jiān)視后得到的索引使用信息。索引的查詢DBA_INDEXES、ALL_INDEXES、10.3.3利用OEM管理索引創(chuàng)建索引修改索引刪除索引查詢索引10.3.3利用OEM管理索引創(chuàng)建索引最新oracle-第10章模式對(duì)象課件10.4索引化表索引化表概念創(chuàng)建索引化表設(shè)置溢出存儲(chǔ)修改索引化表利用OEM管理索引化表10.4索引化表索引化表概念索引化表概念索引化表(Index-OrganizedTable,IOT)是一種特殊的表,它按B樹的索引結(jié)構(gòu)來(lái)組織和存儲(chǔ)數(shù)據(jù),將表的數(shù)據(jù)和索引的數(shù)據(jù)存儲(chǔ)在一起。主要適合于經(jīng)常通過(guò)主鍵查詢整個(gè)記錄或部分記錄的情況,表中記錄的存放順序與主鍵的順序一致。索引化表類似于B樹結(jié)構(gòu),不過(guò)索引條目不是標(biāo)準(zhǔn)B樹結(jié)構(gòu)中索引值與ROWID這樣的結(jié)構(gòu),而是主鍵列與非主鍵列形式的結(jié)構(gòu)。索引化表概念索引化表(Index-OrganizedTab10.4.1創(chuàng)建索引化表說(shuō)明在CREATETABLE語(yǔ)句中指定ORGANIZATIONINDEX關(guān)鍵字必須建立一個(gè)PRIMARYKEY約束示例CREATETABLEnew_student(snoNUMBERPRIMARYKEY,snameCHAR(10),sageNUMBER,sexCHAR(2))ORGANIZATIONINDEXTABLESPACEUSERS;10.4.1創(chuàng)建索引化表說(shuō)明可以通過(guò)子查詢創(chuàng)建索引化表CREATETABLEnew_emp(empnoPRIMARYKEY,ename)ORGANIZATIONINDEXASSELECTempno,enameFROMemp;注意利用子查詢創(chuàng)建索引化表時(shí),必須指定主鍵列和其他所有列,指定的列的個(gè)數(shù)必須與查詢語(yǔ)句中目標(biāo)列個(gè)數(shù)一致。可以通過(guò)子查詢創(chuàng)建索引化表10.4.2設(shè)置溢出存儲(chǔ)所謂的溢出存儲(chǔ)是指將索引化表中每個(gè)記錄分成兩部分,其中一部分(包含主鍵列)保存在索引化表自身中(以索引的樹狀結(jié)構(gòu)存儲(chǔ),稱為索引條目部分),而另一部分保存在溢出表空間中(以標(biāo)準(zhǔn)表的堆結(jié)構(gòu)存儲(chǔ),稱為溢出部分)。若要啟用溢出存儲(chǔ)功能,必須在創(chuàng)建索引化表時(shí)指定OVERFLOW子句指定溢出部分的存儲(chǔ)空間,同時(shí)使用PCTTHRESHOLD子句或INCLUDING子句來(lái)設(shè)置溢出方式。10.4.2設(shè)置溢出存儲(chǔ)所謂的溢出存儲(chǔ)是指將索引化表中每個(gè)記用PCTTHRESHOLD設(shè)置溢出存儲(chǔ)示例CREATETABLEiot_pct(IDNUMBERPRIMARYKEY,col1VARCHAR2(20),col2VARCHAR2(10),col3NUMBER)ORGANIZATIONINDEXTABLESPACEUSERSPCTTHRESHOLD30OVERFLOWABLESPACEORCLTBS1;用PCTTHRESHOLD設(shè)置溢出存儲(chǔ)使用PCTTHRESHOLD子句設(shè)置溢出比例時(shí)注意:溢出存儲(chǔ)是以列為單位,一個(gè)列要么全部保留在索引條目中,要么全部溢出;列的順序主要取決于創(chuàng)建表時(shí)的列的定義順序,但是Oracle會(huì)自動(dòng)將主鍵列移動(dòng)到非主鍵列的前面,保證主鍵列保存在索引條目中;PCTTHRESHOLD子句所指定的比例必須包含索引化表中所有主鍵列。使用PCTTHRESHOLD子句設(shè)置溢出比例時(shí)注意:用INCLUDING設(shè)置溢出存儲(chǔ)示例CREATETABLEiot_pct_include(IDNUMBERPRIMARYKEY,col1VARCHAR2(20),col2VARCHAR2(10),col3NUMBER)ORGANIZATIONINDEXTABLESPACEUSERSPCTTHRESHOLD30INCLUDINGcol3OVERFLOWTABLESPACEORCLTBS1;用INCLUDING設(shè)置溢出存儲(chǔ)10.4.3修改索引化表

修改索引數(shù)據(jù)段與溢出數(shù)據(jù)段

重建索引化表

將索引化表轉(zhuǎn)換為普通表

10.4.3修改索引化表修改索引數(shù)據(jù)段與溢出數(shù)據(jù)段修改索引數(shù)據(jù)段與溢出數(shù)據(jù)段使用ALTERTABLE語(yǔ)句可以對(duì)索引化表中索引數(shù)據(jù)段和溢出數(shù)據(jù)段進(jìn)行修改,包括存儲(chǔ)參數(shù)和溢出方式的修改。其中OVERFLOW關(guān)鍵字之前的參數(shù)都是針對(duì)索引條目數(shù)據(jù)段的,而OVERFLOW之后的參數(shù)都是針對(duì)溢出數(shù)據(jù)段的。ALTERTABLEnew_studentINITRANS4OVERFLOWINITRANS6;ALTERTABLEiot_pct_includPCTTHRESHOLD15INCLUDINGcol2;如果原來(lái)的索引化表中沒有使用溢出存儲(chǔ)功能,可以通過(guò)ALTERTABLE…ADDOVERFLOW為它應(yīng)用溢出存儲(chǔ)功能。ALTERTABLEstudentADDOVERFLOWTABLESPACEORCLTBS2修改索引數(shù)據(jù)段與溢出數(shù)據(jù)段重建索引化表在不斷對(duì)索引化表進(jìn)行更新操作之后,將在索引化表中產(chǎn)生許多不連續(xù)的存儲(chǔ)碎片,降低索引化表的查詢效率。可以使用ALTERTABLE…MOVE語(yǔ)句重建索引化表,以消除其中的存儲(chǔ)碎片。重建索引化表可以在原來(lái)的表空間中進(jìn)行,也可以在新的表空間中進(jìn)行。ALTERTABLEnew_studentMOVEINITRANS10;ALTERTABLEiot_pct_includeMOVETABLESPACEORCLTBS2OVERFLOWTABLESPACEORCLTBS3重建索引化表將索引化表轉(zhuǎn)換為標(biāo)準(zhǔn)表使用Oracle中的EMPORT和IMPORT工具,將索引化表中的數(shù)據(jù)全部導(dǎo)出,然后再重新導(dǎo)入到一個(gè)標(biāo)準(zhǔn)表中。使用CREATETABLE…ASSELECT語(yǔ)句,通過(guò)對(duì)索引化表的查詢來(lái)創(chuàng)建一個(gè)標(biāo)準(zhǔn)表。將索引化表轉(zhuǎn)換為標(biāo)準(zhǔn)表10.4.4利用OEM管理索引化表創(chuàng)建索引化表索引化表的其他管理10.4.4利用OEM管理索引化表創(chuàng)建索引化表最新oracle-第10章模式對(duì)象課件最新oracle-第10章模式對(duì)象課件10.5分區(qū)表與分區(qū)索引分區(qū)概述創(chuàng)建分區(qū)表創(chuàng)建分區(qū)索引維護(hù)分區(qū)表與分區(qū)索引10.5分區(qū)表與分區(qū)索引分區(qū)概述分區(qū)概述分區(qū)概念所謂的分區(qū)是指將一個(gè)巨型表或巨型索引分成若干獨(dú)立的組成部分進(jìn)行存儲(chǔ)和管理,每一個(gè)相對(duì)小的、可以獨(dú)立管理的部分,稱為原來(lái)表或索引的分區(qū)。每個(gè)分區(qū)都具有相同的邏輯屬性,但物理屬性可以不同。如具有相同列、數(shù)據(jù)類型、約束等,但可以具有不同的存儲(chǔ)參數(shù)、位于不同的表空間等。分區(qū)后,表中每個(gè)記錄或索引條目根據(jù)分區(qū)條件分散存儲(chǔ)到不同分區(qū)中。分區(qū)概述分區(qū)概念分區(qū)條件表的大小超過(guò)2GB要對(duì)一個(gè)表進(jìn)行并行DML操作,必須分區(qū)為了平衡硬盤的I/O操作,將一個(gè)表分散存儲(chǔ)在不同的表空間中,必須對(duì)它進(jìn)行分區(qū)如果需要將表一部分設(shè)置為只讀,另一部分為可更新的,必須對(duì)表進(jìn)行分區(qū)分區(qū)條件10.5.1創(chuàng)建分區(qū)表分區(qū)方法范圍分區(qū)列表分區(qū)散列分區(qū)復(fù)合分區(qū)10.5.1創(chuàng)建分區(qū)表分區(qū)方法范圍分區(qū)參數(shù)PARTITIONBYRANGE(col1,…)PARTITIONpartion_nameVALUELESSTHAN示例,創(chuàng)建一個(gè)分區(qū)表,將學(xué)生信息根據(jù)其出生日期不同進(jìn)行分區(qū),將1980年1月1日前出生的學(xué)生信息保存在ORCLTBS1表空間中,1980年1月1日到1990年1月1日出生的學(xué)生信息保存在ORCLTBS2表空間中,其他學(xué)生信息保存在ORCLTBS3表空間中。范圍分區(qū)CREATETABLEstudent_range(snoNUMBER(6)PRIMARYKEY,snameVARCHAR2(10),sageint,birthdayDATE)PARTITIONBYRANGE(birthday)(PARTITIONp1VALUESLESSTHAN(TO_DATE('1980-1-1','YYYY-MM-DD'))TABLESPACEORCLTBS1,PARTITIONp2VALUESLESSTHAN(TO_DATE('1990-1-1','YYYY-MM-DD'))TABLESPACEORCLTBS2,PARTITIONp3VALUESLESSTHAN(MAXVALUE)TABLESPACEORCLTBS3STORAGE(INITIAL10MNEXT20M))STORAGE(INITIAL20MNEXT10MMAXEXTENTS10);CREATETABLEstudent_range(列表分區(qū)

參數(shù)PARTITIONBYLIST(col1,…)PARTITIONpartition_nameVALUE示例創(chuàng)建一個(gè)分區(qū)表,將學(xué)生信息按性別不同進(jìn)行分區(qū),男學(xué)生信息保存在表空間ORCLTBS1中,而女學(xué)生信息保存在ORCLTBS2中。列表分區(qū)CREATETABLEstudent_list(snoNUMBER(6)PRIMARYKEY,snameVARCHAR2(10),sexCHAR(2)CHECK(sexin('M','F')))PARTITIONBYLIST(sex)(PARTITIONstudent_maleVALUES('M')TABLESPACEORCLTBS1,PARTITIONstudent_femaleVALUES('F')TABLESPACEORCLTBS2)STORAGE(INITIAL10MNEXT10MMAXEXTENTS5);CREATETABLEstudent_list(散列分區(qū)參數(shù)PARITITIONBYHASH(col1,…)使用PARTITION指定分區(qū)數(shù)量及STOREIN指定分區(qū)存儲(chǔ)空間;或使用PARTITON指定每個(gè)分區(qū)名稱以及其存儲(chǔ)空間。

示例創(chuàng)建一個(gè)分區(qū)表,根據(jù)學(xué)號(hào)將學(xué)生信息均勻分布到ORCLTBS1和ORCLTBS2兩個(gè)表空間中。創(chuàng)建分區(qū)表散列分區(qū)創(chuàng)建分區(qū)表CREATETABLEstudent_hash(snoNUMBER(6)PRIMARYKEY,snameVARCHAR2(10))PARTITIONBYHASH(sno)(PARTITIONp1TABLESPACEORCLTBS1,PARTITIONp2TABLESPACEORCLTBS2);CREATETABLEstudent_hash2(snoNUMBER(6)PRIMARYKEY,snameVARCHAR2(10))PARTITIONBYHASH(sno)PARTITIONS2STOREIN(ORCLTBS1,ORCLTBS2);CREATETABLEstudent_hash(復(fù)合分區(qū)參數(shù)PARTITIONBYRANGE(col1,…)SUBPARTITIONBYHASH(col1,…)每個(gè)子分區(qū)的子分區(qū)數(shù)量或子分區(qū)的描述。示例創(chuàng)建一個(gè)復(fù)合分區(qū)表,將1980年1月1日前出生的學(xué)生信息均勻保存在ORCLTBS1和ORCLTBS2表空間中,1980年1月1日到1990年1月1日出生的學(xué)生信息保存在ORCLTBS3和ORCLTBS4表空間中,其他學(xué)生信息保存在ORCLTBS5表空間中。復(fù)合分區(qū)CREATETABLEstudent_composition(snoNUMBER(6)PRIMARYKEY,snameVARCHAR2(10),sageNUMBER(4),birthdayDATE)PARTITIONBYRANGE(birthday)SUBPARTITIONBYHASH(sage)(PARTITIONp1VALUESLESSTHAN(TO_DATE('1980-1-1','YYYY-MM-DD'))(SUBPARTITIONp1_sub1TABLESPACEORCLTBS1,SUBPARTITIONp1_sub2TABLESPACEORCLTBS2),PARTITIONp2VALUESLESSTHAN(TO_DATE('1990-1-1','YYYY-MM-DD'))(SUBPARTITIONp2_sub1TABLESPACEORCLTBS3,SUBPARTITIONp2_sub2TABLESPACEORCLTBS4),PARTITIONp3VALUESLESSTHAN(MAXVALUE)TABLESPACEORCLTBS5);CREATETABLEstudent_compositi四種分區(qū)方法的比較四種分區(qū)方法的比較10.5.2創(chuàng)建分區(qū)索引分區(qū)索引類型創(chuàng)建分區(qū)索引10.5.2創(chuàng)建分區(qū)索引分區(qū)索引類型分區(qū)索引類型本地分區(qū)索引

本地分區(qū)索引是指為分區(qū)表中的各個(gè)分區(qū)單獨(dú)建立索引分區(qū),各個(gè)索引分區(qū)之間是相互獨(dú)立的。全局分區(qū)索引

全局分區(qū)索引是指先對(duì)整個(gè)分區(qū)表建立索引,然后再對(duì)索引進(jìn)行分區(qū)。全局非分區(qū)索引

全局非分區(qū)索引是指對(duì)整個(gè)分區(qū)表創(chuàng)建標(biāo)準(zhǔn)的未分區(qū)的索引。分區(qū)索引類型創(chuàng)建本地分區(qū)索引分區(qū)表創(chuàng)建后,可以對(duì)分區(qū)表創(chuàng)建本地分區(qū)索引。在指明分區(qū)方法時(shí)使用LOCAL關(guān)鍵字標(biāo)識(shí)本地分區(qū)索引。CREATEINDEXstudent_range_localONstudent_range(sname)LOCAL;創(chuàng)建全局分區(qū)索引索引分區(qū)方法也包括范圍分區(qū)、列表分區(qū)、散列分區(qū)和復(fù)合分區(qū)4種。在指明分區(qū)方法時(shí)使用GLOBAL關(guān)鍵字標(biāo)識(shí)全局分區(qū)索引。CREATEINDEXstudent_range_globalONstudent_range(sage)GLOBALPARTITIONBYRANGE(sage)(PARTITIONp1VALUESLESSTHAN(80)TABLESPACEORCLTBS1,PARTITIONp2VALUESLESSTHAN(MAXVALUE)TABLESPACEORCLTBS2);創(chuàng)建本地分區(qū)索引全局非分區(qū)索引為分區(qū)表創(chuàng)建全局非分區(qū)索引與為標(biāo)準(zhǔn)表創(chuàng)建索引一樣。例如,為分區(qū)表student_list_index創(chuàng)建全局非分區(qū)索引,語(yǔ)句為:CREATEINDEXstudent_list_indexONstudent_list(sname);全局非分區(qū)索引10.5.3維護(hù)分區(qū)表與分區(qū)索引使用ALTERTABLE語(yǔ)句來(lái)維護(hù)分區(qū)表,包括增加分區(qū)、合并分區(qū)、刪除分區(qū)、交換分區(qū)、融合分區(qū)、修改分區(qū)增加值、修改分區(qū)刪除值、移動(dòng)分區(qū)、更名分區(qū)、分割分區(qū)、舍棄分區(qū)等。ALTERTABLEstudent_hashADDPARTITIONp3TABLESPACEORCLTBS3;ALTERTABLEstudent_rangeMERGEPARTITIONSp1,p2INTOPARTITIONp1;10.5.3維護(hù)分區(qū)表與分區(qū)索引使用ALTERTABLE語(yǔ)10.6其他模式對(duì)象簇視圖序列同義詞數(shù)據(jù)庫(kù)鏈接10.6其他模式對(duì)象簇10.6.1簇簇的概念創(chuàng)建簇

創(chuàng)建聚簇表

修改簇創(chuàng)建聚簇索引

刪除簇

查詢簇信息

利用OEM管理簇10.6.1簇簇的概念簇的概念簇是一種存儲(chǔ)表數(shù)據(jù)的方法,一個(gè)簇由共享相同數(shù)據(jù)塊的一組表組成。在一個(gè)簇中,Oracle將多個(gè)表中具有相同相關(guān)列的記錄聚簇在相同的數(shù)據(jù)塊中(類似于連接結(jié)果)。對(duì)于經(jīng)常需要訪問(wèn)這些列的應(yīng)用來(lái)說(shuō),能夠減少硬盤I/O時(shí)間、改善連接查詢的效率。簇的概念創(chuàng)建簇在數(shù)據(jù)庫(kù)中,簇占據(jù)實(shí)際的存儲(chǔ)空間,因此用戶必須具有足夠的表空間配額。CREATECLUSTERstudent_class(class_idNUMBER(3))SIZE600TABLESPACEusersSTORAGE(INITIAL200KNEXT300KMINEXTENTS2MAXEXTENTS20);創(chuàng)建簇創(chuàng)建聚簇表通過(guò)將兩個(gè)或多個(gè)聚簇表保存在同一個(gè)簇中,可以將兩個(gè)表中具有相同的聚簇字段值的記錄集中存放在同一個(gè)數(shù)據(jù)塊(或相鄰的多個(gè)數(shù)據(jù)塊)中。CREATETABLEclasses(class_idNUMBER(3)PRIMARYKEY,cnameVARCHAR2(10))CLUSTERstudent_class(class_id);CREATETABLEstudents(snoNUMBER(5)PRIMARYKEY,snameVARCHAR2(15)NOTNULL,class_idNUMBER(3)REFERENCESclasses)CLUSTERstudent_class(class_id);注意:聚簇表中的聚簇字段必須與創(chuàng)建簇時(shí)指定的聚簇字段具有相同的名稱和數(shù)據(jù)類型。創(chuàng)建聚簇表修改簇簇創(chuàng)建之后,用戶可以對(duì)簇進(jìn)行修改,包括:修改簇的物理存儲(chǔ)參數(shù)(PCTFREE,PCTUSED,STORAGE等)、修改SIZE值的大小。ALTERCLUSTERstudent_classPCTFREE30PCTUSED60;注意:不能修改聚簇表的PCTFREE、PCTUSED、INITRANS和MAXTRANS參數(shù)。這些參數(shù)是由簇的物理存儲(chǔ)參數(shù)設(shè)置的。修改簇創(chuàng)建聚簇索引可以為簇中的聚族字段創(chuàng)建索引,這種類型的索引稱為“聚簇索引”。聚簇索引必須在向簇中的聚簇表中插入任何記錄之前創(chuàng)建。聚簇表中數(shù)據(jù)的存儲(chǔ)順序與聚簇索引中索引值排序相一致。CREATEINDEXstudent_class_indexONCLUSTERstudent_classTABLESPACEUSERSSTORAGE(INITIAL10KNEXT10KMINEXTENTS2MAXEXTENTS10)PCTFREE10;創(chuàng)建聚簇索引根據(jù)簇中是否包含表,簇刪除可以分為下列3中情況。使用DROPCLUSTER刪除不包含聚簇表的簇及簇索引。DROPCLUSTERstudent_class;使用DROPCLUSTER...INCLUDINGTABLES語(yǔ)句刪除包含聚簇表的簇。DROPCLUSTERstudent_classINCLUDINGTABLES;如果聚簇表中包含其他表外鍵參考的主鍵約束列或惟一性約束列,則需要使用CASCADECONSTRAINTS子句刪除約束同時(shí)刪除簇。DROPCLUSTERstudent_classINCLUDINGTABLESCASCADECONSTRAINTS;根據(jù)簇中是否包含表,簇刪除可以分為下列3中情況。查詢簇信息DBA_CLUSTERS:包含數(shù)據(jù)庫(kù)中所有簇的信息。ALL_CLUSTERS:包含當(dāng)前用戶可以訪問(wèn)的簇的信息。USER_CLUSTERS:包含當(dāng)前用戶的所有簇的信息。DBA_CLU_COLUMNS:包含數(shù)據(jù)庫(kù)中所有聚簇列信息。USER_CLU_COLUMNS:包含當(dāng)前用戶所有聚簇列信息。查詢簇信息利用OEM管理簇創(chuàng)建簇刪除簇修改簇查詢簇利用OEM管理簇最新oracle-第10章模式對(duì)象課件10.6.2視圖視圖概念及作用創(chuàng)建視圖視圖操作修改視圖刪除視圖利用OEM管理視圖10.6.2視圖視圖概念及作用視圖概念及作用視圖是從一個(gè)或多個(gè)表或視圖中提取出來(lái)的數(shù)據(jù)的一種表現(xiàn)形式。在數(shù)據(jù)庫(kù)中只有視圖的定義,而沒有實(shí)際對(duì)應(yīng)“表”的存在,因此視圖是一個(gè)“虛”表。當(dāng)對(duì)視圖進(jìn)行操作時(shí),系統(tǒng)根據(jù)視圖定義臨時(shí)生成數(shù)據(jù)。通過(guò)視圖的使用可以提高數(shù)據(jù)安全性、隱藏?cái)?shù)據(jù)的復(fù)雜性、簡(jiǎn)化查詢語(yǔ)句、分離應(yīng)用程序與基礎(chǔ)表、保存復(fù)雜查詢等。視圖概念及作用創(chuàng)建視圖語(yǔ)法CREATEORREPLACEVIEW[schema.]view_name[(column1,column2,…)]ASsubquery[WITHREADONLY]|[WITHCHECKOPTION][CONSTRIANTconstraint];說(shuō)明Subquery為子查詢,決定了視圖中數(shù)據(jù)的來(lái)源;WITHREADONLY指明該視圖為只讀視圖,不能修改;WITHCHECKOPTION指明在使用視圖時(shí),檢查數(shù)據(jù)是否符合子查詢中的約束條件;CONSTRAINTconstraint為使用WITHCHECKOPTION選項(xiàng)時(shí)指定的約束命名創(chuàng)建視圖CREATEVIEWemp_info_view(deptno,avgsal,empcount)ASSELECTdeptno,avg(sal),count(*)FROMempGROUPBYdeptno;CREATEVIEWemp_sal_viewASSELECT*FROMempWHEREsal>2000WITHCHECKOPTION;CREATEVIEWemp_dept_viewASSELECTempno,ename,dnameFROMemp,deptWHEREemp.deptno=dept.deptnoCREATEVIEWemp_info_view(dept視圖操作視圖創(chuàng)建后,就可以對(duì)視圖進(jìn)行操作,包括數(shù)據(jù)查詢、DML操作(數(shù)據(jù)的插入、刪除、修改)等。因?yàn)橐晥D是“虛表”,因此對(duì)視圖的操作最終轉(zhuǎn)換為對(duì)基本表的操作。對(duì)視圖的查詢象對(duì)標(biāo)準(zhǔn)表查詢一樣,但是對(duì)視圖執(zhí)行DML操作時(shí)需要注意,如果視圖定義包括下列任何一項(xiàng),則不可直接對(duì)視圖進(jìn)行插入、刪除和修改等操作,需要通過(guò)觸發(fā)器來(lái)實(shí)現(xiàn)。集合操作符(UNION,UNIONALL,MINUS,INTERSECT)。聚集函數(shù)(SUM,AVG等)。GROUPBY,CONNECTBY,或STARTWITH子句。DISTINCT操作符。(部分)連接操作。視圖操作修改視圖可以采用CREATEORREPLACEVIEW語(yǔ)句修改視圖,實(shí)質(zhì)是刪除原視圖并重建該視圖,但是會(huì)保留該視圖上授予的各種權(quán)限。CREATEORREPLACEVIEWemp_dept_viewASSELECTempno,ename,sal,dnameFROMemp,deptWHEREemp.deptno=dept.deptno;修改視圖刪除視圖可以使用DROPVIEW語(yǔ)句刪除視圖。刪除視圖后,該視圖的定義從數(shù)據(jù)字典中刪除,同時(shí)該視圖上的權(quán)限被回收,但是對(duì)數(shù)據(jù)庫(kù)表沒有任何影響。DROPVIEWemp_dept_view;刪除視圖利用OEM管理視圖視圖的創(chuàng)建、查看、修改和刪除等。利用OEM管理視圖10.6.3序列序列的概念創(chuàng)建序列使用序列修改序列刪除序列利用OEM管理序列10.6.3序列序列的概念序列的概念序列用于產(chǎn)生惟一序號(hào)的數(shù)據(jù)庫(kù)對(duì)象,用于為多個(gè)數(shù)據(jù)庫(kù)用戶依次生成不重復(fù)的連續(xù)整數(shù)。通常使用序列自動(dòng)生成表中的主鍵值。序列產(chǎn)生的數(shù)字最大長(zhǎng)度可達(dá)到38位十進(jìn)制數(shù)。序列不占用實(shí)際的存儲(chǔ)空間,在數(shù)據(jù)字典中只存儲(chǔ)序列的定義描述。序列的概念創(chuàng)建序列語(yǔ)法CREATESEQUENCEsequence [INCREMENTBYn] [STARTWITHn] [MAXVALUEn|NOMAXVALUE] [MINVALUEn|NOMINVALUE] [CYCLE|NOCYCLE] [CACHEn|NOCACHE];示例CREATESEQUENCEstud_sequenceINCREMENTBY1STARTWITH100MAXVALUE1000;創(chuàng)建序列參數(shù)說(shuō)明INCREMENTBY子句用于設(shè)置相鄰兩個(gè)元素之間的

溫馨提示

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

評(píng)論

0/150

提交評(píng)論