第6講:管理模式對(duì)象_第1頁(yè)
第6講:管理模式對(duì)象_第2頁(yè)
第6講:管理模式對(duì)象_第3頁(yè)
第6講:管理模式對(duì)象_第4頁(yè)
第6講:管理模式對(duì)象_第5頁(yè)
已閱讀5頁(yè),還剩105頁(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)介

1、廣東技術(shù)師范學(xué)院廣東技術(shù)師范學(xué)院大型數(shù)據(jù)庫(kù)開(kāi)發(fā)訓(xùn)練大型數(shù)據(jù)庫(kù)開(kāi)發(fā)訓(xùn)練課程課程Instructor: Dr. Wen JianfengEmail: 大型數(shù)據(jù)庫(kù)開(kāi)發(fā)訓(xùn)練大型數(shù)據(jù)庫(kù)開(kāi)發(fā)訓(xùn)練第第6講:管理模式對(duì)象講:管理模式對(duì)象內(nèi)容提綱內(nèi)容提綱o 模式(模式(Schemas)o 表(表(Tables)o 索引(索引(Indexes)o 約束(約束(Constraints)o 視圖(視圖(Views)o 序列(序列(Sequences)o 同義詞(同義詞(Synonyms)2模式(模式(Schemas)3模式(模式(Schema)4模式(模式(Schema)o 模式模式是表、視圖、索引和其他數(shù)據(jù)庫(kù)對(duì)象的

2、集合是表、視圖、索引和其他數(shù)據(jù)庫(kù)對(duì)象的集合o 可以認(rèn)為可以認(rèn)為“模式模式”與與“用戶賬戶用戶賬戶”是等同的內(nèi)容是等同的內(nèi)容n 只有一點(diǎn)微小的區(qū)別:用戶賬戶保存著用戶所擁有的只有一點(diǎn)微小的區(qū)別:用戶賬戶保存著用戶所擁有的對(duì)象,而模式則是在那里保存的對(duì)象的集合對(duì)象,而模式則是在那里保存的對(duì)象的集合o 所有數(shù)據(jù)庫(kù)對(duì)象可以劃分為兩大類所有數(shù)據(jù)庫(kù)對(duì)象可以劃分為兩大類n 模式對(duì)象模式對(duì)象:可以被用戶賬戶所擁有的對(duì)象:可以被用戶賬戶所擁有的對(duì)象p 如:表、約束、索引、視圖、序列、私有同義詞、如:表、約束、索引、視圖、序列、私有同義詞、PL/SQL包、存儲(chǔ)過(guò)程等包、存儲(chǔ)過(guò)程等n 非模式對(duì)象非模式對(duì)象:不能被用

3、戶賬戶所擁有的對(duì)象:不能被用戶賬戶所擁有的對(duì)象p 如:表空間、用戶、角色、公有同義詞等如:表空間、用戶、角色、公有同義詞等5模式(模式(Schema)o 在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),將自動(dòng)創(chuàng)建很多在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),將自動(dòng)創(chuàng)建很多用戶用戶及其相關(guān)及其相關(guān)聯(lián)的聯(lián)的模式模式n 用戶如:用戶如:SYS、SYSTEMn SYS模式:模式:p 用戶用戶SYS擁有數(shù)據(jù)字典,擁有數(shù)據(jù)字典,SYS模式中的這組表定義數(shù)據(jù)庫(kù)及模式中的這組表定義數(shù)據(jù)庫(kù)及其內(nèi)容;其內(nèi)容;p SYS還擁有數(shù)百個(gè)還擁有數(shù)百個(gè)PL/SQL包,是為數(shù)據(jù)庫(kù)管理員和開(kāi)發(fā)人包,是為數(shù)據(jù)庫(kù)管理員和開(kāi)發(fā)人員提供的代碼員提供的代碼n SYSTEM模式:模式:p 存儲(chǔ)各

4、種用于管理和監(jiān)視的附加對(duì)象存儲(chǔ)各種用于管理和監(jiān)視的附加對(duì)象6模式(模式(Schema)o 模式與用戶的關(guān)系模式與用戶的關(guān)系n 模式與用戶相對(duì)應(yīng)模式與用戶相對(duì)應(yīng),一個(gè)模式只能被一個(gè)數(shù)據(jù)庫(kù)用,一個(gè)模式只能被一個(gè)數(shù)據(jù)庫(kù)用戶所擁有,并且模式的名稱與這個(gè)用戶的名稱相同戶所擁有,并且模式的名稱與這個(gè)用戶的名稱相同n 通常情況下,用戶所創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象都通常情況下,用戶所創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象都保存在與自保存在與自己同名的模式中己同名的模式中n 同一模式中數(shù)據(jù)庫(kù)對(duì)象的同一模式中數(shù)據(jù)庫(kù)對(duì)象的名稱必須唯一名稱必須唯一,而在不同,而在不同模式中的數(shù)據(jù)庫(kù)對(duì)象可以同名模式中的數(shù)據(jù)庫(kù)對(duì)象可以同名n 默認(rèn)情況下,用戶引用的對(duì)象是與

5、自己同名模式中默認(rèn)情況下,用戶引用的對(duì)象是與自己同名模式中的對(duì)象,如果要引用其他模式中的對(duì)象,需要在該的對(duì)象,如果要引用其他模式中的對(duì)象,需要在該對(duì)象名之前指明對(duì)象所屬模式對(duì)象名之前指明對(duì)象所屬模式 7模式(模式(Schema)o 模式選擇與切換模式選擇與切換n 如果用戶以如果用戶以NORMAL身份登錄,則進(jìn)入同名模式身份登錄,則進(jìn)入同名模式n 若以若以SYSDBA身份登錄,則進(jìn)入身份登錄,則進(jìn)入SYS模式模式n 如果以如果以SYSOPER身份登錄,則進(jìn)入身份登錄,則進(jìn)入PUBLIC模式模式p conn / as sysopero 模式的創(chuàng)建模式的創(chuàng)建n 創(chuàng)建用戶時(shí),就創(chuàng)建了同名的模式,不用另

6、外創(chuàng)建創(chuàng)建用戶時(shí),就創(chuàng)建了同名的模式,不用另外創(chuàng)建n 例如:例如:p CREATE USER gdin IDENTIFIED BY gdin;(創(chuàng)建用戶)(創(chuàng)建用戶)p GRANT CONNECT, RESOURCE TO gdin; (賦權(quán)限)(賦權(quán)限)8模式(模式(Schema)o 舉例:舉例:HR模式模式9表(表(Tables)10創(chuàng)建表創(chuàng)建表o CREATE TABLE語(yǔ)法:語(yǔ)法:n column_level_constraint:列級(jí)約束:列級(jí)約束n table_level_constraint:表級(jí)約束:表級(jí)約束n parameter_list:表的參數(shù):表的參數(shù)11CREATE

7、TABLE table_name( column_name datatype column_level_constraint , column_name datatype column_level_constraint , table_level_constraint)parameter_list;創(chuàng)建表創(chuàng)建表o 舉例:舉例:12CREATE TABLE employees( employee_id NUMBER(6), first_nameVARCHAR2(20), last_name VARCHAR2(25), email VARCHAR2(25), phone_number VARCHA

8、R2(20), hire_date DATE, job_id VARCHAR2(10), salary NUMBER(8,2), commission_pct NUMBER(2,2), manager_id NUMBER(6), department_id NUMBER(4);查看表結(jié)構(gòu)查看表結(jié)構(gòu)o 語(yǔ)法:語(yǔ)法:n DESCRIBE table_namen DESC table_name13Oracle內(nèi)置數(shù)據(jù)類型內(nèi)置數(shù)據(jù)類型14CHAR(N), NCHAR(N)VARCHAR2(N),NVARCHAR2(N)NUMBER(P,S)DATETIMESTAMPRAW(N)BLOB, CLOB,N

9、CLOB, BFILELONG, LONG RAWROWID, UROWIDVARRAYTABLEREFData typeBuilt-in(內(nèi)置)(內(nèi)置)User-definedScalar(標(biāo)量)(標(biāo)量)Relationship(關(guān)系)(關(guān)系)Collection(集合)(集合)字符數(shù)據(jù)類型字符數(shù)據(jù)類型o 字符數(shù)據(jù)可以作為字符數(shù)據(jù)可以作為長(zhǎng)度固定長(zhǎng)度固定或或長(zhǎng)度可變長(zhǎng)度可變的字符的字符串存儲(chǔ)在數(shù)據(jù)庫(kù)中串存儲(chǔ)在數(shù)據(jù)庫(kù)中o CHAR(n)、NCHAR(n)n Character的縮寫(xiě)的縮寫(xiě)n 定長(zhǎng)字符串,定長(zhǎng)字符串,n的取值范圍為的取值范圍為12000字節(jié)字節(jié)n 用空格填滿空白內(nèi)容用空格填滿空白

10、內(nèi)容o VARCHAR2(n)、NVARCHAR2(n)n Variable character的縮寫(xiě)的縮寫(xiě)n 可變字符串,可變字符串,n取值范圍為取值范圍為14000字節(jié)字節(jié)n 自動(dòng)調(diào)整數(shù)據(jù)長(zhǎng)度,僅使用存儲(chǔ)實(shí)際列值所需要的自動(dòng)調(diào)整數(shù)據(jù)長(zhǎng)度,僅使用存儲(chǔ)實(shí)際列值所需要的字節(jié)數(shù),每行的大小可以不同字節(jié)數(shù),每行的大小可以不同15數(shù)字?jǐn)?shù)據(jù)類型數(shù)字?jǐn)?shù)據(jù)類型o 數(shù)字始終以數(shù)字始終以長(zhǎng)度可變長(zhǎng)度可變的數(shù)據(jù)存儲(chǔ),最多可以存的數(shù)據(jù)存儲(chǔ),最多可以存儲(chǔ)儲(chǔ)38個(gè)有效數(shù)位個(gè)有效數(shù)位o NUMBER(p, s) n 用于存儲(chǔ)整數(shù)和實(shí)數(shù)用于存儲(chǔ)整數(shù)和實(shí)數(shù)n p表示數(shù)值的表示數(shù)值的總位數(shù)總位數(shù)(精度,(精度,Precisio

11、n),取值范圍),取值范圍為為138,默認(rèn)為,默認(rèn)為38n s表示表示小數(shù)位數(shù)小數(shù)位數(shù)(Scale),若為負(fù)數(shù)則表示把數(shù)據(jù)),若為負(fù)數(shù)則表示把數(shù)據(jù)向小數(shù)點(diǎn)左邊舍入,默認(rèn)值為向小數(shù)點(diǎn)左邊舍入,默認(rèn)值為0n 例如:例如:p NUMBER(5, 2):當(dāng)輸入值為:當(dāng)輸入值為4.5678時(shí),保存為時(shí),保存為4.57p NUMBER(5, -2):當(dāng)輸入值為:當(dāng)輸入值為1056.34時(shí),保存為時(shí),保存為110016浮點(diǎn)數(shù)據(jù)類型浮點(diǎn)數(shù)據(jù)類型o BINARY_FLOATo BINARY_DOUBLEo 保存的是近似值保存的是近似值o 用于科學(xué)計(jì)算,它們的特點(diǎn)與用于科學(xué)計(jì)算,它們的特點(diǎn)與Java等編程語(yǔ)言等編

12、程語(yǔ)言中的中的float和和double類似類似17日期數(shù)據(jù)類型日期數(shù)據(jù)類型o DATEn 存儲(chǔ)日期和時(shí)間存儲(chǔ)日期和時(shí)間n 保存的域包括世紀(jì)、保存的域包括世紀(jì)、年、月、日、時(shí)、分、秒年、月、日、時(shí)、分、秒(7個(gè)個(gè)字節(jié))字節(jié))n Oracle內(nèi)部以數(shù)字的形式保存內(nèi)部以數(shù)字的形式保存DATE類型數(shù)據(jù)類型數(shù)據(jù)n 默認(rèn)日期顯示格式由參數(shù)默認(rèn)日期顯示格式由參數(shù)NLS_DATE_FORMAT所所定義定義o TIMESTAMP(n)n 存儲(chǔ)日期和時(shí)間存儲(chǔ)日期和時(shí)間n 表示時(shí)間戳,是表示時(shí)間戳,是DATE的擴(kuò)展,允許存儲(chǔ)小數(shù)形式的的擴(kuò)展,允許存儲(chǔ)小數(shù)形式的秒值秒值n n表示表示秒的小數(shù)位數(shù)秒的小數(shù)位數(shù),取值范

13、圍為,取值范圍為19,默認(rèn)值為,默認(rèn)值為618RAW數(shù)據(jù)類型數(shù)據(jù)類型o 可以使用此數(shù)據(jù)類型存儲(chǔ)可以使用此數(shù)據(jù)類型存儲(chǔ)小型二進(jìn)制數(shù)據(jù)小型二進(jìn)制數(shù)據(jù)o 在網(wǎng)絡(luò)中的計(jì)算機(jī)之間傳輸在網(wǎng)絡(luò)中的計(jì)算機(jī)之間傳輸RAW數(shù)據(jù)時(shí),或者數(shù)據(jù)時(shí),或者使用使用Oracle實(shí)用程序?qū)?shí)用程序?qū)AW數(shù)據(jù)從一個(gè)數(shù)據(jù)庫(kù)數(shù)據(jù)從一個(gè)數(shù)據(jù)庫(kù)移到另一個(gè)數(shù)據(jù)庫(kù)時(shí),移到另一個(gè)數(shù)據(jù)庫(kù)時(shí),Oracle服務(wù)器服務(wù)器不執(zhí)行字不執(zhí)行字符集轉(zhuǎn)換符集轉(zhuǎn)換o 存儲(chǔ)實(shí)際列值所需要的字節(jié)數(shù)大小隨每行大小存儲(chǔ)實(shí)際列值所需要的字節(jié)數(shù)大小隨每行大小而異,最多為而異,最多為2000 字節(jié)字節(jié)19LOB數(shù)據(jù)類型(大型對(duì)象)數(shù)據(jù)類型(大型對(duì)象)o Oracle為存儲(chǔ)為

14、存儲(chǔ)LOB提供六種數(shù)據(jù)類型:提供六種數(shù)據(jù)類型:n CLOB和和LONG用于存儲(chǔ)大型的、可變長(zhǎng)度的用于存儲(chǔ)大型的、可變長(zhǎng)度的字符數(shù)字符數(shù)據(jù)據(jù),如文本文件等,最大數(shù)據(jù)量為,如文本文件等,最大數(shù)據(jù)量為4GBn NCLOB用于存儲(chǔ)大型的、可變長(zhǎng)度的用于存儲(chǔ)大型的、可變長(zhǎng)度的國(guó)家字符集數(shù)國(guó)家字符集數(shù)據(jù)據(jù),最大數(shù)據(jù)量為,最大數(shù)據(jù)量為4GBn BLOB和和LONG RAW用于存儲(chǔ)大型的、非結(jié)構(gòu)化的用于存儲(chǔ)大型的、非結(jié)構(gòu)化的可變長(zhǎng)度的可變長(zhǎng)度的二進(jìn)制數(shù)據(jù)二進(jìn)制數(shù)據(jù)(如二進(jìn)制文件、圖片文件、(如二進(jìn)制文件、圖片文件、音頻和視頻等非文本文件),最大數(shù)據(jù)量為音頻和視頻等非文本文件),最大數(shù)據(jù)量為4GBn BFILE

15、用于存儲(chǔ)用于存儲(chǔ)操作系統(tǒng)文件操作系統(tǒng)文件中的非結(jié)構(gòu)化數(shù)據(jù)中的非結(jié)構(gòu)化數(shù)據(jù)p 注:注:LONG和和LONG RAW已由已由CLOB和和BLOG取代取代,保留它,保留它們主要用于向后兼容,它們的最大數(shù)據(jù)量為們主要用于向后兼容,它們的最大數(shù)據(jù)量為2Gp 當(dāng)數(shù)據(jù)量大于當(dāng)數(shù)據(jù)量大于4000字節(jié)時(shí),字節(jié)時(shí),LOB在表中存儲(chǔ)一個(gè)定位器,而在表中存儲(chǔ)一個(gè)定位器,而將數(shù)據(jù)存儲(chǔ)在另一位置。將數(shù)據(jù)存儲(chǔ)在另一位置。LOB允許將數(shù)據(jù)存儲(chǔ)在單獨(dú)的段和允許將數(shù)據(jù)存儲(chǔ)在單獨(dú)的段和表空間中,或者存儲(chǔ)在主機(jī)文件中表空間中,或者存儲(chǔ)在主機(jī)文件中20ROWID和和UROWID數(shù)據(jù)類型數(shù)據(jù)類型o ROWIDn ROWID是數(shù)據(jù)庫(kù)中每行

16、的唯一標(biāo)識(shí)符是數(shù)據(jù)庫(kù)中每行的唯一標(biāo)識(shí)符n ROWID并不顯式地作為一個(gè)列值存儲(chǔ)(偽列)并不顯式地作為一個(gè)列值存儲(chǔ)(偽列)n ROWID并不直接給出一行的物理地址,但它可以并不直接給出一行的物理地址,但它可以用來(lái)定位行用來(lái)定位行n ROWID為訪問(wèn)表中的行提供了最快的方法為訪問(wèn)表中的行提供了最快的方法n ROWID存儲(chǔ)在索引中來(lái)指定具有一組給定的鍵值存儲(chǔ)在索引中來(lái)指定具有一組給定的鍵值的行的行n ROWID類型可以作為表中某個(gè)列的數(shù)據(jù)類型類型可以作為表中某個(gè)列的數(shù)據(jù)類型o UROWID(通用(通用ROWID)n 它支持外表(非它支持外表(非Oracle 表)的表)的ROWID,并且可存,并且可存

17、儲(chǔ)各種類型的儲(chǔ)各種類型的ROWID21集合數(shù)據(jù)類型集合數(shù)據(jù)類型o VARRAY(變化數(shù)組)(變化數(shù)組)n 變化數(shù)組對(duì)于存儲(chǔ)包含少量組成元素的列表(如客變化數(shù)組對(duì)于存儲(chǔ)包含少量組成元素的列表(如客戶的電話號(hào)碼)非常有用戶的電話號(hào)碼)非常有用n VARRAY具有以下特征:具有以下特征:p 數(shù)組即一組有序的數(shù)據(jù)組成元素?cái)?shù)組即一組有序的數(shù)據(jù)組成元素p 一個(gè)給定數(shù)組的所有組成元素的數(shù)據(jù)類型相同一個(gè)給定數(shù)組的所有組成元素的數(shù)據(jù)類型相同p 每個(gè)組成元素都有索引,即與數(shù)組中組成元素的位置相對(duì)每個(gè)組成元素都有索引,即與數(shù)組中組成元素的位置相對(duì)應(yīng)的編號(hào)應(yīng)的編號(hào)p 數(shù)組中組成元素的數(shù)目決定了數(shù)組的大小數(shù)組中組成元素

18、的數(shù)目決定了數(shù)組的大小p Oracle服務(wù)器允許數(shù)組的大小可以變化,這就是它們被稱服務(wù)器允許數(shù)組的大小可以變化,這就是它們被稱為為VARRAY(意為變化數(shù)組)的原因,但在聲明數(shù)組類型(意為變化數(shù)組)的原因,但在聲明數(shù)組類型時(shí)必須指定最大大小時(shí)必須指定最大大小22集合數(shù)據(jù)類型集合數(shù)據(jù)類型o TABLE(嵌套表)(嵌套表)n 嵌套表提供一種將一個(gè)表定義為另一個(gè)表內(nèi)一列的嵌套表提供一種將一個(gè)表定義為另一個(gè)表內(nèi)一列的方法。嵌套表可用來(lái)存儲(chǔ)可能包含大量記錄的集合方法。嵌套表可用來(lái)存儲(chǔ)可能包含大量記錄的集合(比如一個(gè)訂單中的若干條目)(比如一個(gè)訂單中的若干條目)n 嵌套表一般具有以下特征:嵌套表一般具有以

19、下特征:p 嵌套表是一組無(wú)次序的記錄或行嵌套表是一組無(wú)次序的記錄或行p 嵌套表中的各行結(jié)構(gòu)相同嵌套表中的各行結(jié)構(gòu)相同p 嵌套表中的行與父表分別存儲(chǔ),并且父表中的對(duì)應(yīng)行有一嵌套表中的行與父表分別存儲(chǔ),并且父表中的對(duì)應(yīng)行有一個(gè)指針個(gè)指針p 嵌套表的存儲(chǔ)特點(diǎn)可由數(shù)據(jù)庫(kù)管理員來(lái)定義嵌套表的存儲(chǔ)特點(diǎn)可由數(shù)據(jù)庫(kù)管理員來(lái)定義p 嵌套表沒(méi)有預(yù)先確定的最大大小嵌套表沒(méi)有預(yù)先確定的最大大小23關(guān)系數(shù)據(jù)類型關(guān)系數(shù)據(jù)類型o REFn 關(guān)系類型在數(shù)據(jù)庫(kù)內(nèi)用作指針關(guān)系類型在數(shù)據(jù)庫(kù)內(nèi)用作指針n 使用這些類型需要使用這些類型需要“對(duì)象對(duì)象” (Objects) 選項(xiàng)。(比如:選項(xiàng)。(比如:訂單的每一項(xiàng)都可以指向或引用訂單的每

20、一項(xiàng)都可以指向或引用PRODUCTS表中的表中的一行,而不必存儲(chǔ)產(chǎn)品代碼)一行,而不必存儲(chǔ)產(chǎn)品代碼)24用戶定義的數(shù)據(jù)類型用戶定義的數(shù)據(jù)類型o Oracle允許用戶定義抽象的數(shù)據(jù)類型并在應(yīng)用允許用戶定義抽象的數(shù)據(jù)類型并在應(yīng)用程序內(nèi)使用這些數(shù)據(jù)類型程序內(nèi)使用這些數(shù)據(jù)類型25ROWID格式格式o 擴(kuò)展的擴(kuò)展的ROWID在磁盤上需要在磁盤上需要10 個(gè)字節(jié)的存儲(chǔ)個(gè)字節(jié)的存儲(chǔ)空間,并使用空間,并使用18 個(gè)字符來(lái)顯示個(gè)字符來(lái)顯示o 它包含下列組成元素:它包含下列組成元素:n 數(shù)據(jù)對(duì)象編號(hào)數(shù)據(jù)對(duì)象編號(hào):每個(gè)數(shù)據(jù)對(duì)象(如表或索引)在創(chuàng):每個(gè)數(shù)據(jù)對(duì)象(如表或索引)在創(chuàng)建時(shí)都分配有此編號(hào),并且此編號(hào)在數(shù)據(jù)庫(kù)中

21、是唯建時(shí)都分配有此編號(hào),并且此編號(hào)在數(shù)據(jù)庫(kù)中是唯一的一的n 相關(guān)文件編號(hào)相關(guān)文件編號(hào):此編號(hào)對(duì)于表空間中的每個(gè)文件是:此編號(hào)對(duì)于表空間中的每個(gè)文件是唯一的唯一的n 塊編號(hào)塊編號(hào):表示包含此行的塊在文件中的位置:表示包含此行的塊在文件中的位置n 行編號(hào)行編號(hào):標(biāo)識(shí)塊頭中行目錄位置的位置:標(biāo)識(shí)塊頭中行目錄位置的位置26OOOOOOBBBBBBFFFRRRData object numberRelative file numberRow numberBlock numberROWID格式格式o 例如:例如:n AAAS13是數(shù)據(jù)對(duì)象編號(hào)是數(shù)據(jù)對(duì)象編號(hào)n AAE是相關(guān)文件編號(hào)是相關(guān)文件編號(hào)n AAAA

22、CV是塊編號(hào)是塊編號(hào)n AAA是員工號(hào)為是員工號(hào)為7369的行的行編號(hào)的行的行編號(hào)27使用使用ROWID定位行定位行o ROWID可以用來(lái)定位一個(gè)數(shù)據(jù)庫(kù)中的任意行可以用來(lái)定位一個(gè)數(shù)據(jù)庫(kù)中的任意行n 因?yàn)橐粋€(gè)段只能駐留在一個(gè)表空間中,所以,因?yàn)橐粋€(gè)段只能駐留在一個(gè)表空間中,所以,Oracle服務(wù)器可以使用服務(wù)器可以使用數(shù)據(jù)對(duì)象編號(hào)數(shù)據(jù)對(duì)象編號(hào)來(lái)確定包含某來(lái)確定包含某一行的表空間一行的表空間n 表空間中的相關(guān)表空間中的相關(guān)文件編號(hào)文件編號(hào)用來(lái)定位文件,用來(lái)定位文件,塊編號(hào)塊編號(hào)用用來(lái)定位包含該行的塊,來(lái)定位包含該行的塊,行編號(hào)行編號(hào)用來(lái)定位該行的行目用來(lái)定位該行的行目錄條目錄條目n 行目錄條目可以

23、用來(lái)定位行首行目錄條目可以用來(lái)定位行首28使用使用ROWID定位行定位行o ROWID是是偽列偽列,計(jì)算出來(lái)的,表中并沒(méi)有存,計(jì)算出來(lái)的,表中并沒(méi)有存儲(chǔ)儲(chǔ)ROWID,每一行的,每一行的ROWID是根據(jù)該行的物是根據(jù)該行的物理位置計(jì)算出來(lái)的,我們根據(jù)理位置計(jì)算出來(lái)的,我們根據(jù)ROWID可以獲可以獲得該行的所在的物理位置得該行的所在的物理位置29行的結(jié)構(gòu)行的結(jié)構(gòu)o 行數(shù)據(jù)作為長(zhǎng)度可變的記錄存儲(chǔ)在數(shù)據(jù)庫(kù)塊中。行數(shù)據(jù)作為長(zhǎng)度可變的記錄存儲(chǔ)在數(shù)據(jù)庫(kù)塊中。通常,一個(gè)行的各列按其定義時(shí)的順序存儲(chǔ),并通常,一個(gè)行的各列按其定義時(shí)的順序存儲(chǔ),并且不存儲(chǔ)尾隨的且不存儲(chǔ)尾隨的NULL列列n 注:對(duì)于非尾隨的注:對(duì)于

24、非尾隨的NULL列,列長(zhǎng)度需占用一個(gè)字節(jié)列,列長(zhǎng)度需占用一個(gè)字節(jié)o 表中的每行具有:表中的每行具有:n 行頭:用來(lái)存儲(chǔ)行中的列數(shù)、鏈接信息和行鎖定狀態(tài)行頭:用來(lái)存儲(chǔ)行中的列數(shù)、鏈接信息和行鎖定狀態(tài)n 行數(shù)據(jù):對(duì)于每一列,行數(shù)據(jù):對(duì)于每一列,Oracle服務(wù)器存儲(chǔ)列的長(zhǎng)度和服務(wù)器存儲(chǔ)列的長(zhǎng)度和值,列值在緊靠列長(zhǎng)度字節(jié)后面存儲(chǔ)值,列值在緊靠列長(zhǎng)度字節(jié)后面存儲(chǔ)n 相鄰的行之間不需要任何空格相鄰的行之間不需要任何空格n 塊中的每一行在行目錄中都有一個(gè)位置,目錄位置指塊中的每一行在行目錄中都有一個(gè)位置,目錄位置指向行首向行首30行的結(jié)構(gòu)行的結(jié)構(gòu)31Database blockRow headerColu

25、mn lengthColumn value創(chuàng)建表時(shí)使用的參數(shù)創(chuàng)建表時(shí)使用的參數(shù)o TABLESPACE子句子句n 指定將要在其中創(chuàng)建表的表空間指定將要在其中創(chuàng)建表的表空間n 如果省略如果省略TABLESPACE參數(shù),則參數(shù),則Oracle在包含該表在包含該表的模式的所有者的缺省表空間中創(chuàng)建表的模式的所有者的缺省表空間中創(chuàng)建表o STORAGE子句子句n 指定表的存儲(chǔ)特性。若不指定,則繼承表空間的存指定表的存儲(chǔ)特性。若不指定,則繼承表空間的存儲(chǔ)參數(shù)設(shè)置儲(chǔ)參數(shù)設(shè)置p INITIAL:初始分配區(qū)的大?。撼跏挤峙鋮^(qū)的大小p NEXT:下一個(gè)分配區(qū)的大?。合乱粋€(gè)分配區(qū)的大小p MINEXTENTS:分配

26、的最小區(qū)數(shù):分配的最小區(qū)數(shù)p MAXEXTENTS:分配的最大區(qū)數(shù):分配的最大區(qū)數(shù)p PCTINCREASE:NEXT區(qū)及以后的區(qū)有關(guān)區(qū)大小增長(zhǎng)的區(qū)及以后的區(qū)有關(guān)區(qū)大小增長(zhǎng)的百分比百分比p 例如:例如:STORAGE(INITIAL 200K NEXT 200K PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS 5)32利用子查詢創(chuàng)建表利用子查詢創(chuàng)建表o 語(yǔ)法:語(yǔ)法:n 通過(guò)該方法創(chuàng)建表時(shí),可以修改表中列的名稱,但是通過(guò)該方法創(chuàng)建表時(shí),可以修改表中列的名稱,但是不能修改列的數(shù)據(jù)類型和長(zhǎng)度不能修改列的數(shù)據(jù)類型和長(zhǎng)度n 源表中的約束條件和列的默認(rèn)值都不會(huì)復(fù)制到新表中源表中

27、的約束條件和列的默認(rèn)值都不會(huì)復(fù)制到新表中n 當(dāng)子查詢條件為真時(shí),新表中包含查詢到的數(shù)據(jù);當(dāng)當(dāng)子查詢條件為真時(shí),新表中包含查詢到的數(shù)據(jù);當(dāng)子查詢條件為假時(shí),則創(chuàng)建一個(gè)空表子查詢條件為假時(shí),則創(chuàng)建一個(gè)空表33CREATE TABLE table_name (column_name column_level_constraint , column_name column_level_constraint , table_level_constraint) parameter_list AS subquery; 利用子查詢創(chuàng)建表利用子查詢創(chuàng)建表o 例如:創(chuàng)建一個(gè)表,保存工資高于例如:創(chuàng)建一個(gè)表,保存工

28、資高于15000元的員元的員工的員工號(hào)、員工姓名和部門號(hào)。工的員工號(hào)、員工姓名和部門號(hào)。n 注:注:employees表在表在HR模式中模式中34修改表修改表o 修改表的基本語(yǔ)法:修改表的基本語(yǔ)法:n SET UNUSED:標(biāo)記列為:標(biāo)記列為“未用未用”n DROP UNUSED COLUMNS:永久刪除標(biāo)記為:永久刪除標(biāo)記為“未未用用”的列的列35ALTER TABLE table_nameADD column_name datatype column_level_constraintMODIFY column_name datatype RENAME COLUMN oldname TO n

29、ewnameDROP COLUMN column_name DROP (column_name1, column_name2, .)SET UNUSED COLUMN column_nameSET UNUSED (column_name1, column_name2, .)DROP UNUSED COLUMNS刪除表刪除表o 語(yǔ)法:語(yǔ)法:n 刪除一個(gè)表的同時(shí),刪除一個(gè)表的同時(shí),Oracle將執(zhí)行下列操作:將執(zhí)行下列操作:p 刪除該表中所有記錄刪除該表中所有記錄p 從數(shù)據(jù)字典中刪除該表定義從數(shù)據(jù)字典中刪除該表定義p 刪除與該表相關(guān)的所有索引和觸發(fā)器刪除與該表相關(guān)的所有索引和觸發(fā)器p 回收為該表分

30、配的存儲(chǔ)空間回收為該表分配的存儲(chǔ)空間p 依賴于該表的數(shù)據(jù)庫(kù)對(duì)象處于依賴于該表的數(shù)據(jù)庫(kù)對(duì)象處于INVALID狀態(tài)狀態(tài)n 如果該表是外鍵關(guān)系中的父表,就必須使用如果該表是外鍵關(guān)系中的父表,就必須使用CASCADE CONSTRAINTS選項(xiàng)選項(xiàng)n 使用使用PURGE選項(xiàng)將徹底刪除表,不放入回收站選項(xiàng)將徹底刪除表,不放入回收站36DROP TABLE table_nameCASCADE CONSTRAINTSPURGE 截?cái)啾斫財(cái)啾韔 語(yǔ)法:語(yǔ)法:n 截?cái)嘁粋€(gè)表將刪除表中所有行,釋放已使用的空間截?cái)嘁粋€(gè)表將刪除表中所有行,釋放已使用的空間n 不會(huì)生成任何還原數(shù)據(jù)不會(huì)生成任何還原數(shù)據(jù)n 對(duì)應(yīng)的索引將被

31、截?cái)鄬?duì)應(yīng)的索引將被截?cái)鄋 不能截?cái)嗄硞€(gè)外鍵正在引用的表不能截?cái)嗄硞€(gè)外鍵正在引用的表n 使用此命令時(shí)不會(huì)觸發(fā)刪除觸發(fā)器使用此命令時(shí)不會(huì)觸發(fā)刪除觸發(fā)器37TRUNCATE TABLE table_nameDROP | REUSE STORAGE 查詢表的數(shù)據(jù)字典查詢表的數(shù)據(jù)字典o DBA_TABLES、ALL_TABLES、USER_TABLESo DBA_TAB_COLUMNS、ALL_TAB_COLUMNS、USER_TAB_COLUMNSo DBA_OBJECTS、ALL_OBJECTS、USER_OBJECTS38索引(索引(Indexes)39索引索引o 表的數(shù)據(jù)是無(wú)序的,因?yàn)閿?shù)據(jù)是隨機(jī)

32、存儲(chǔ)的,所表的數(shù)據(jù)是無(wú)序的,因?yàn)閿?shù)據(jù)是隨機(jī)存儲(chǔ)的,所以在查詢的時(shí)候需要全表掃描。索引就是將無(wú)序以在查詢的時(shí)候需要全表掃描。索引就是將無(wú)序的數(shù)據(jù)有序化,這樣就可以在查詢數(shù)據(jù)的時(shí)候減的數(shù)據(jù)有序化,這樣就可以在查詢數(shù)據(jù)的時(shí)候減少數(shù)據(jù)塊的讀取,實(shí)現(xiàn)快速定位數(shù)據(jù)少數(shù)據(jù)塊的讀取,實(shí)現(xiàn)快速定位數(shù)據(jù)o 索引是一種允許對(duì)表中的行進(jìn)行直接訪問(wèn)的樹(shù)型索引是一種允許對(duì)表中的行進(jìn)行直接訪問(wèn)的樹(shù)型結(jié)構(gòu)結(jié)構(gòu)n B樹(shù)索引(平衡樹(shù)索引)(默認(rèn)是樹(shù)索引(平衡樹(shù)索引)(默認(rèn)是B樹(shù)索引)樹(shù)索引)n 位圖索引位圖索引o 索引的作用:快速定位數(shù)據(jù),減少磁盤索引的作用:快速定位數(shù)據(jù),減少磁盤 I/O40索引索引o Oracle自動(dòng)使用和維

33、護(hù)索引自動(dòng)使用和維護(hù)索引o 在表上執(zhí)行在表上執(zhí)行DML操作時(shí),操作時(shí),Oracle服務(wù)器將維護(hù)服務(wù)器將維護(hù)所有的索引所有的索引n 插入操作導(dǎo)致在適當(dāng)?shù)膲K中插入索引項(xiàng)插入操作導(dǎo)致在適當(dāng)?shù)膲K中插入索引項(xiàng)n 刪除行只導(dǎo)致邏輯刪除索引項(xiàng)刪除行只導(dǎo)致邏輯刪除索引項(xiàng)n 更新鍵列將導(dǎo)致邏輯刪除和向索引插入項(xiàng)更新鍵列將導(dǎo)致邏輯刪除和向索引插入項(xiàng)o 索引的缺點(diǎn):索引的缺點(diǎn):n 占用硬盤和內(nèi)存空間占用硬盤和內(nèi)存空間n 會(huì)減慢數(shù)據(jù)更新的速度會(huì)減慢數(shù)據(jù)更新的速度o 索引不能盲目建立索引不能盲目建立41B樹(shù)索引樹(shù)索引o B樹(shù)樹(shù)n 占用空間多,適合索引值基數(shù)高、重復(fù)率低的應(yīng)用占用空間多,適合索引值基數(shù)高、重復(fù)率低的應(yīng)用4

34、2Index entry headerKey column lengthKey column valueROWID根節(jié)點(diǎn)根節(jié)點(diǎn)分支節(jié)點(diǎn)分支節(jié)點(diǎn)葉節(jié)點(diǎn)葉節(jié)點(diǎn)Index entryB樹(shù)索引樹(shù)索引o 根根和和枝干枝干中存放鍵值范圍的導(dǎo)引指針中存放鍵值范圍的導(dǎo)引指針o 葉子葉子中存放的是條目中存放的是條目o 條目條目中存放的是索引的鍵值和該數(shù)據(jù)行的中存放的是索引的鍵值和該數(shù)據(jù)行的ROWIDo 葉子間有雙重鏈接,有助于按鍵值的升序和降序葉子間有雙重鏈接,有助于按鍵值的升序和降序掃描索引掃描索引43位圖索引位圖索引o 位圖位圖n 占用空間少,適合索引值基數(shù)少、重復(fù)率高的應(yīng)用占用空間少,適合索引值基數(shù)少、重

35、復(fù)率高的應(yīng)用44keystartROWIDendROWID bitmap(位圖)(位圖)TableIndexBlock 10Block 11Block 12File 3位圖索引位圖索引o 可以將位圖索引組織為可以將位圖索引組織為B 樹(shù),但葉節(jié)點(diǎn)樹(shù),但葉節(jié)點(diǎn)存儲(chǔ)每存儲(chǔ)每個(gè)鍵值的位圖個(gè)鍵值的位圖而非而非ROWID。位圖中的每一位。位圖中的每一位對(duì)應(yīng)一個(gè)可能的對(duì)應(yīng)一個(gè)可能的ROWID,如果設(shè)置了位,則,如果設(shè)置了位,則意味著具有相應(yīng)意味著具有相應(yīng)ROWID的行包含鍵值的行包含鍵值o 位圖索引的結(jié)構(gòu)位圖索引的結(jié)構(gòu)n Start ROWIDp 例如:文件號(hào)例如:文件號(hào)3、塊號(hào)、塊號(hào)10 、行號(hào)、行號(hào)0n

36、 End ROWIDp 例如:文件號(hào)例如:文件號(hào)3、塊號(hào)、塊號(hào)12 、行號(hào)、行號(hào)8n 位圖段位圖段p 由位串組成(對(duì)應(yīng)的行包含鍵值時(shí)設(shè)置位;不包含鍵值時(shí)由位串組成(對(duì)應(yīng)的行包含鍵值時(shí)設(shè)置位;不包含鍵值時(shí)不設(shè)置位)不設(shè)置位)45B樹(shù)索引樹(shù)索引 vs. 位圖索引位圖索引B 樹(shù)樹(shù)位圖位圖適用于高基數(shù)列適用于低基數(shù)列更新鍵列的成本相對(duì)較低更新鍵列的成本非常高使用OR謂詞進(jìn)行查詢時(shí)效率較低使用OR謂詞進(jìn)行查詢時(shí)效率較高對(duì)OLTP很有用對(duì)數(shù)據(jù)倉(cāng)庫(kù)很有用46索引使用原則索引使用原則o 在在大表大表上建立索引上建立索引o 在在WHERE子句子句或或連接條件連接條件上經(jīng)常使用的列上上經(jīng)常使用的列上建立索引建立索

37、引o 對(duì)于取值范圍很大的列應(yīng)當(dāng)創(chuàng)建對(duì)于取值范圍很大的列應(yīng)當(dāng)創(chuàng)建B樹(shù)索引樹(shù)索引o 對(duì)于取值范圍很小的列應(yīng)當(dāng)創(chuàng)建對(duì)于取值范圍很小的列應(yīng)當(dāng)創(chuàng)建位圖索引位圖索引o Oracle會(huì)自動(dòng)在會(huì)自動(dòng)在PRIMARY KEY和和UNIQUE約約束的列上創(chuàng)建唯一性索引束的列上創(chuàng)建唯一性索引o 限制表中索引的限制表中索引的數(shù)目數(shù)目 47創(chuàng)建索引創(chuàng)建索引o 語(yǔ)法語(yǔ)法n UNIQUE表示建立惟一性索引表示建立惟一性索引n BITMAP表示建立位圖索引表示建立位圖索引n ASC/DESC用于指定索引值的排列順序,用于指定索引值的排列順序,ASC表示按表示按升序排序,升序排序,DESC表示按降序排序,缺省值為表示按降序排序

38、,缺省值為ASCn REVERSE表示建立反鍵索引表示建立反鍵索引n parameter_list用于指定索引的存放位置、存儲(chǔ)空間分用于指定索引的存放位置、存儲(chǔ)空間分配和數(shù)據(jù)塊參數(shù)設(shè)置配和數(shù)據(jù)塊參數(shù)設(shè)置48CREATE UNIQUE|BITMAP INDEX index_nameON table_name(column_nameASC|DESC,|expression) REVERSEparameter_list;隱式創(chuàng)建索引隱式創(chuàng)建索引o 如果在一個(gè)表上創(chuàng)建了一個(gè)如果在一個(gè)表上創(chuàng)建了一個(gè)PRIMARY KEY或或UNIQUE類型的約束,類型的約束,SQL將自動(dòng)創(chuàng)建一個(gè)索將自動(dòng)創(chuàng)建一個(gè)索引來(lái)支

39、持列上的約束引來(lái)支持列上的約束49顯式創(chuàng)建索引顯式創(chuàng)建索引o 單列索引單列索引n CREATE INDEX ix_inv_date ON invoices (invoice_date)o 復(fù)合索引復(fù)合索引n CREATE INDEX ix_inv_invoice_vendor_id ON invoices (vendor_id, invoice_date)o 唯一索引唯一索引n CREATE UNIQUE INDEX ix_emp_ssn ON employees (ssn)50重建索引重建索引o 使用使用ALTER INDEX命令執(zhí)行以下操作:命令執(zhí)行以下操作:n 將索引移到另一個(gè)表空間中將

40、索引移到另一個(gè)表空間中n 通過(guò)移除已刪除的項(xiàng),提高空間的使用率通過(guò)移除已刪除的項(xiàng),提高空間的使用率n ALTER INDEX orders_id_idx REBUILD TABLESPACE index251合并索引合并索引o 遇到索引碎片時(shí),可以重建或合并索引遇到索引碎片時(shí),可以重建或合并索引n ALTER INDEX orders_id_idx COALESCE52合并前合并前合并后合并后檢查索引及其有效性檢查索引及其有效性53ANALYZE INDEX orders_id_idxVALIDATE STRUCTURE;INDEX_STATS檢查索引及其有效性檢查索引及其有效性n HEIGH

41、T:索引的層數(shù):索引的層數(shù)n BLOCKS:索引總塊數(shù):索引總塊數(shù)n BR_BLKS:枝干塊數(shù):枝干塊數(shù)n LF_BLKS:葉子塊數(shù):葉子塊數(shù)n LF_ROWS:葉子內(nèi)行數(shù):葉子內(nèi)行數(shù)n DEL_LF_ROWS:葉子中被刪除的行數(shù):葉子中被刪除的行數(shù)n 如果索引中已刪除行的比例很高,請(qǐng)重新組織該索引如果索引中已刪除行的比例很高,請(qǐng)重新組織該索引p 例如:當(dāng)例如:當(dāng)DEL_LF_ROWS占占LF_ROWS的比率超過(guò)的比率超過(guò)30%時(shí)時(shí)54刪除索引刪除索引o 語(yǔ)法:語(yǔ)法:o 在下面幾種情況下,可以考慮刪除索引在下面幾種情況下,可以考慮刪除索引 n 該索引不再使用該索引不再使用n 通過(guò)一段時(shí)間監(jiān)視,

42、發(fā)現(xiàn)幾乎沒(méi)有查詢或只有極少通過(guò)一段時(shí)間監(jiān)視,發(fā)現(xiàn)幾乎沒(méi)有查詢或只有極少數(shù)查詢會(huì)使用該索引數(shù)查詢會(huì)使用該索引n 由于索引中包含損壞的數(shù)據(jù)塊或包含過(guò)多的存儲(chǔ)碎由于索引中包含損壞的數(shù)據(jù)塊或包含過(guò)多的存儲(chǔ)碎片等,需要?jiǎng)h除該索引,然后重建索引片等,需要?jiǎng)h除該索引,然后重建索引n 由于移動(dòng)了表數(shù)據(jù)而導(dǎo)致索引失效由于移動(dòng)了表數(shù)據(jù)而導(dǎo)致索引失效55DROP INDEX index_name標(biāo)識(shí)未用索引標(biāo)識(shí)未用索引o 開(kāi)始監(jiān)視索引的使用開(kāi)始監(jiān)視索引的使用o 停止監(jiān)視索引的使用停止監(jiān)視索引的使用o 查看數(shù)據(jù)字典查看數(shù)據(jù)字典V$OBJECT_USAGE56ALTER INDEX index_name MONITOR

43、ING USAGEALTER INDEX index_name NOMONITORING USAGE查詢索引的數(shù)據(jù)字典查詢索引的數(shù)據(jù)字典o DBA_INDEXES、ALL_INDEXES、USER_INDEXESo DBA_ IND_COLUMNS、ALL_ IND_COLUMNS、USER_ IND_COLUMNSo V$OBJECT_USAGEn 提供有關(guān)索引使用情況的信息提供有關(guān)索引使用情況的信息57約束(約束(Constraints)58數(shù)據(jù)完整性(數(shù)據(jù)完整性(Data Integrity)59應(yīng)用程序代碼應(yīng)用程序代碼Table數(shù)據(jù)數(shù)據(jù)完整性約束完整性約束數(shù)據(jù)庫(kù)觸發(fā)器數(shù)據(jù)庫(kù)觸發(fā)器約束(

44、約束(Constraint)o 約束的作用約束的作用n 是在表中定義的用于維護(hù)數(shù)據(jù)庫(kù)完整性的一些規(guī)則。是在表中定義的用于維護(hù)數(shù)據(jù)庫(kù)完整性的一些規(guī)則。通過(guò)對(duì)表中列定義約束,可以防止在執(zhí)行通過(guò)對(duì)表中列定義約束,可以防止在執(zhí)行DML操作操作時(shí),將不符合要求的數(shù)據(jù)插入到表中。時(shí),將不符合要求的數(shù)據(jù)插入到表中。o 約束類型約束類型n PRIMARY KEY(主鍵約束)(主鍵約束)n UNIQUE(唯一性約束)(唯一性約束)n CHECK(檢查約束)(檢查約束)n FOREIGN KEY (外鍵約束)(外鍵約束)n NULL/NOT NULL (空(空/非空約束)非空約束)60主鍵約束(主鍵約束(PRIM

45、ARY KEY)o 主鍵的特點(diǎn)主鍵的特點(diǎn)n 起惟一標(biāo)識(shí)作用,其值不能為起惟一標(biāo)識(shí)作用,其值不能為NULL,也不能重復(fù),也不能重復(fù)n 一個(gè)表中只能定義一個(gè)主鍵約束一個(gè)表中只能定義一個(gè)主鍵約束n 建立主鍵約束的同時(shí),在該列上建立一個(gè)惟一性索引建立主鍵約束的同時(shí),在該列上建立一個(gè)惟一性索引61UNIQUE(唯一性約束)(唯一性約束)o 唯一性約束的特點(diǎn)唯一性約束的特點(diǎn)n 定義為惟一性約束的某一列或多個(gè)列的組合的取值定義為惟一性約束的某一列或多個(gè)列的組合的取值必須惟一必須惟一n 如果某一列或多個(gè)列僅定義惟一性約束,而沒(méi)有定如果某一列或多個(gè)列僅定義惟一性約束,而沒(méi)有定義非空約束,則該約束列可以包含多個(gè)空

46、值義非空約束,則該約束列可以包含多個(gè)空值n Oracle自動(dòng)在惟一性約束列上建立一個(gè)惟一性索引自動(dòng)在惟一性約束列上建立一個(gè)惟一性索引62PRIMARY KEY vs. UNIQUEo 在一個(gè)基本表中只能定義一個(gè)在一個(gè)基本表中只能定義一個(gè)PRIMARY KEY約束,但可定義多個(gè)約束,但可定義多個(gè)UNIQUE約束約束o 對(duì)于指定為對(duì)于指定為PRIMARY KEY的一個(gè)列或多個(gè)列的一個(gè)列或多個(gè)列的組合,其中任何一個(gè)列都不能出現(xiàn)空值,而的組合,其中任何一個(gè)列都不能出現(xiàn)空值,而對(duì)于對(duì)于UNIQUE所約束的唯一鍵,則允許為空所約束的唯一鍵,則允許為空o 不能為同一個(gè)列或一組列既定義不能為同一個(gè)列或一組列既

47、定義UNIQUE約束,約束,又定義又定義PRIMARY KEY約束約束63CHECK(檢查約束)(檢查約束)o 檢查約束的特點(diǎn)檢查約束的特點(diǎn)n 檢查約束用來(lái)限制列值所允許的取值范圍,其表達(dá)檢查約束用來(lái)限制列值所允許的取值范圍,其表達(dá)式中必須引用相應(yīng)列,并且表達(dá)式的計(jì)算結(jié)果必須式中必須引用相應(yīng)列,并且表達(dá)式的計(jì)算結(jié)果必須是一個(gè)布爾值是一個(gè)布爾值n 約束表達(dá)式中不能包含子查詢,也不能包含約束表達(dá)式中不能包含子查詢,也不能包含SYSDATE、USER等等SQL函數(shù),以及函數(shù),以及ROWID、ROWNUM等偽列等偽列n 一個(gè)列可以定義多個(gè)檢查約束一個(gè)列可以定義多個(gè)檢查約束64FOREIGN KEY (

48、外鍵約束)(外鍵約束)o 外鍵約束的概念外鍵約束的概念n FOREIGN KEY約束指定某一個(gè)列或一組列作為外約束指定某一個(gè)列或一組列作為外部鍵,其中,包含外部鍵的表稱為從表,包含外部部鍵,其中,包含外部鍵的表稱為從表,包含外部鍵所引用的主鍵或唯一鍵的表稱主表鍵所引用的主鍵或唯一鍵的表稱主表n 系統(tǒng)保證從表在外部鍵上的取值要么是主表中某一系統(tǒng)保證從表在外部鍵上的取值要么是主表中某一個(gè)主鍵值或唯一鍵值,要么取空值。以此保證兩個(gè)個(gè)主鍵值或唯一鍵值,要么取空值。以此保證兩個(gè)表之間的連接,確保了實(shí)體的參照完整性表之間的連接,確保了實(shí)體的參照完整性65FOREIGN KEY (外鍵約束)(外鍵約束)o

49、外鍵約束的特點(diǎn)外鍵約束的特點(diǎn)n 定義外鍵約束的列的取值要么是主表參照列的值,定義外鍵約束的列的取值要么是主表參照列的值,要么為空要么為空n 外鍵列只能參照于主表中的主鍵約束列或惟一性約外鍵列只能參照于主表中的主鍵約束列或惟一性約束列束列n 可以在一列或多列組合上定義外鍵約束可以在一列或多列組合上定義外鍵約束66NULL/NOT NULL(空(空/非空約束)非空約束)o 空空/非空約束的特點(diǎn)非空約束的特點(diǎn)n 在同一個(gè)表中可以定義多個(gè)在同一個(gè)表中可以定義多個(gè)NOT NULL約束約束n 只能是列級(jí)約束只能是列級(jí)約束67DEFAULT(默認(rèn)值約束)(默認(rèn)值約束)o 如果用戶在插入新行時(shí)沒(méi)有顯示為列提供

50、數(shù)據(jù),如果用戶在插入新行時(shí)沒(méi)有顯示為列提供數(shù)據(jù),系統(tǒng)將默認(rèn)值賦給該列系統(tǒng)將默認(rèn)值賦給該列o 語(yǔ)法:語(yǔ)法:68CONSTRAINT DEFAULT 表達(dá)式表達(dá)式定義約束定義約束o 列級(jí)約束列級(jí)約束n 對(duì)某一個(gè)特定列的約束,包含在列定義中,直接跟在對(duì)某一個(gè)特定列的約束,包含在列定義中,直接跟在該列的其他定義之后,用空格分隔,不必指定列名該列的其他定義之后,用空格分隔,不必指定列名o 定義列級(jí)約束的語(yǔ)法為:定義列級(jí)約束的語(yǔ)法為:69CONSTRAINT constraint_name constraint_type conditioin; 定義約束定義約束o 表級(jí)約束表級(jí)約束n 與列定義相互獨(dú)立,不

51、包括在列定義中。通常用于與列定義相互獨(dú)立,不包括在列定義中。通常用于對(duì)多個(gè)列一起進(jìn)行約束,與列定義用逗號(hào)分隔。定對(duì)多個(gè)列一起進(jìn)行約束,與列定義用逗號(hào)分隔。定義表約束時(shí)必須指出要約束的那些列的名稱義表約束時(shí)必須指出要約束的那些列的名稱o 定義表級(jí)約束的語(yǔ)法為:定義表級(jí)約束的語(yǔ)法為:70CONSTRAINT constraint_name constraint_type(column1_name,column2_name,|condition);定義約束定義約束o 注意注意n Oracle約束通過(guò)名稱進(jìn)行標(biāo)識(shí)。在定義時(shí)可以通過(guò)約束通過(guò)名稱進(jìn)行標(biāo)識(shí)。在定義時(shí)可以通過(guò)CONSTRAINT關(guān)鍵字為約束命

52、名。如果用戶沒(méi)有關(guān)鍵字為約束命名。如果用戶沒(méi)有為約束命名,為約束命名,Oracle將自動(dòng)為約束命名。將自動(dòng)為約束命名。71添加和刪除約束添加和刪除約束o 添加約束語(yǔ)法:添加約束語(yǔ)法:o 刪除約束語(yǔ)法:刪除約束語(yǔ)法:n 可以通過(guò)直接指定約束的名稱來(lái)刪除約束,或指定可以通過(guò)直接指定約束的名稱來(lái)刪除約束,或指定約束的內(nèi)容來(lái)刪除約束約束的內(nèi)容來(lái)刪除約束72ALTER TABLE table_name ADD CONSTRAINT constraint_nameconstraint_type(column1_name,column2_name,)condition;ALTER TABLE table_n

53、ame DROP 在在CREATE TABLE中創(chuàng)建約束中創(chuàng)建約束o 列級(jí)約束列級(jí)約束n 在在PORT_ID列上創(chuàng)建列上創(chuàng)建PRIMARY KEY約束約束n 在在STATUS列上創(chuàng)建列上創(chuàng)建NOT NULL約束約束73在在CREATE TABLE中創(chuàng)建約束中創(chuàng)建約束o 表級(jí)約束表級(jí)約束n 在在PORT_ID列上創(chuàng)建列上創(chuàng)建PRIMARY KEY約束約束74在在CREATE TABLE中創(chuàng)建約束中創(chuàng)建約束o 例:例:UNIQUE約束約束75在在CREATE TABLE中創(chuàng)建約束中創(chuàng)建約束o 例:例:FOREIGN KEY約束約束76在在CREATE TABLE中創(chuàng)建約束中創(chuàng)建約束o 例:例:CH

54、ECK約束約束77在在CREATE TABLE中創(chuàng)建約束中創(chuàng)建約束o 例:創(chuàng)建表是同時(shí)聲明多個(gè)約束例:創(chuàng)建表是同時(shí)聲明多個(gè)約束78修改約束修改約束o 語(yǔ)法:語(yǔ)法:79ALTER TABLE table_name ADD CONSTRAINT constraint_name constraint_type(column1,) condition| MODIFY column NOT NULL|NULL| DROP CONSTRAINT constraint_name| PRIMARY KEY|UNIQUE(column)通過(guò)通過(guò)ALTER TABLE創(chuàng)建約束創(chuàng)建約束o 先建表,然后修改列的聲明,

55、增加主鍵約束先建表,然后修改列的聲明,增加主鍵約束80通過(guò)通過(guò)ALTER TABLE創(chuàng)建約束創(chuàng)建約束o 先建表,然后為列增加主鍵約束先建表,然后為列增加主鍵約束81查詢約束信息查詢約束信息o 通過(guò)查詢以下視圖獲取有關(guān)約束的信息:通過(guò)查詢以下視圖獲取有關(guān)約束的信息:n DBA_CONSTRAINTS、ALL_CONSTRAINTS、USER_CONSTRAINTSp CONSTRAINT_TYPE列的值:如果為主鍵約束,則約束列的值:如果為主鍵約束,則約束類型為類型為P;如果為唯一性約束,則為;如果為唯一性約束,則為U;如果為外鍵約束,;如果為外鍵約束,則為則為R;如果為檢查約束,則為;如果為檢

56、查約束,則為C。NOT NULL 約束存儲(chǔ)約束存儲(chǔ)為檢查約束。為檢查約束。n DBA_CONS_COLUMNS、ALL_CONS_COLUMNS、USER_CONS_COLUMNS82視圖(視圖(Views)83視圖視圖o 視圖是從一個(gè)或多個(gè)表或視圖中提取出來(lái)的數(shù)據(jù)視圖是從一個(gè)或多個(gè)表或視圖中提取出來(lái)的數(shù)據(jù)的一種邏輯表現(xiàn)形式的一種邏輯表現(xiàn)形式o 使用視圖具有下列優(yōu)點(diǎn):使用視圖具有下列優(yōu)點(diǎn):n 可以限制對(duì)基表數(shù)據(jù)的訪問(wèn),只允許用戶通過(guò)視圖看可以限制對(duì)基表數(shù)據(jù)的訪問(wèn),只允許用戶通過(guò)視圖看到表中的一部分?jǐn)?shù)據(jù)到表中的一部分?jǐn)?shù)據(jù)n 可以使復(fù)雜的查詢簡(jiǎn)單化可以使復(fù)雜的查詢簡(jiǎn)單化n 提供了數(shù)據(jù)的透明性,用戶

57、并不知道數(shù)據(jù)來(lái)自于何處提供了數(shù)據(jù)的透明性,用戶并不知道數(shù)據(jù)來(lái)自于何處n 提供了對(duì)相同數(shù)據(jù)的不同顯示提供了對(duì)相同數(shù)據(jù)的不同顯示84視圖視圖85HR.EMPLOYEES表表CREATE VIEW創(chuàng)建視圖創(chuàng)建視圖o 語(yǔ)法:語(yǔ)法:n FORCE:不管基表是否存在都創(chuàng)建視圖:不管基表是否存在都創(chuàng)建視圖n NOFORCE:僅當(dāng)基表存在時(shí)才創(chuàng)建視圖(默認(rèn)):僅當(dāng)基表存在時(shí)才創(chuàng)建視圖(默認(rèn))n subquery為子查詢,決定了視圖中數(shù)據(jù)的來(lái)源為子查詢,決定了視圖中數(shù)據(jù)的來(lái)源n WITH READ ONLY指明視圖為只讀視圖,不能修改指明視圖為只讀視圖,不能修改n WITH CHECK OPTION指明在使用視

58、圖時(shí),檢查數(shù)指明在使用視圖時(shí),檢查數(shù)據(jù)是否符合子查詢中的約束條件據(jù)是否符合子查詢中的約束條件n CONSTRAINT constraint為使用為使用WITH CHECK OPTION選項(xiàng)時(shí)指定的約束命名選項(xiàng)時(shí)指定的約束命名 86CREATE OR REPLACE FORCE|NOFORCE VIEW schema.view_name(column1,column2,) AS subqueryWITH READ ONLY|WITH CHECK OPTIONCONSTRIANT constraintCREATE VIEW創(chuàng)建視圖創(chuàng)建視圖o 創(chuàng)建簡(jiǎn)單視圖創(chuàng)建簡(jiǎn)單視圖n 簡(jiǎn)單視圖的子查詢只從簡(jiǎn)單視圖

59、的子查詢只從一個(gè)基表一個(gè)基表中導(dǎo)出數(shù)據(jù),并且中導(dǎo)出數(shù)據(jù),并且不包含連接、組函數(shù)不包含連接、組函數(shù)等等n 例如:(注:使用例如:(注:使用HR模式中的模式中的employees表)表)87CREATE VIEW創(chuàng)建視圖創(chuàng)建視圖o 創(chuàng)建復(fù)雜視圖創(chuàng)建復(fù)雜視圖n 復(fù)雜視圖的子查詢從復(fù)雜視圖的子查詢從一個(gè)或多個(gè)表一個(gè)或多個(gè)表中導(dǎo)出數(shù)據(jù),也中導(dǎo)出數(shù)據(jù),也可以是可以是經(jīng)過(guò)運(yùn)算經(jīng)過(guò)運(yùn)算得到的數(shù)據(jù)得到的數(shù)據(jù)n 例如:創(chuàng)建一個(gè)視圖,包含各個(gè)員工的員工號(hào)、員例如:創(chuàng)建一個(gè)視圖,包含各個(gè)員工的員工號(hào)、員工名及其部門名稱(注:使用工名及其部門名稱(注:使用SCOTT模式中的表)模式中的表)88CREATE VIEW創(chuàng)建

60、視圖創(chuàng)建視圖o 內(nèi)嵌視圖內(nèi)嵌視圖n 在在FROM子句中使用的子查詢,習(xí)慣上又稱為內(nèi)嵌子句中使用的子查詢,習(xí)慣上又稱為內(nèi)嵌視圖。內(nèi)嵌視圖可以將復(fù)雜的連接查詢簡(jiǎn)單化,可視圖。內(nèi)嵌視圖可以將復(fù)雜的連接查詢簡(jiǎn)單化,可以將多個(gè)查詢壓縮成一個(gè)簡(jiǎn)單查詢,因此通常用于以將多個(gè)查詢壓縮成一個(gè)簡(jiǎn)單查詢,因此通常用于簡(jiǎn)化復(fù)雜的查詢簡(jiǎn)化復(fù)雜的查詢n 例如:查詢各個(gè)部門的部門名、部門的最高工資和例如:查詢各個(gè)部門的部門名、部門的最高工資和最低工資(注:使用最低工資(注:使用SCOTT模式中的表)模式中的表)89視圖操作視圖操作o 數(shù)據(jù)查詢數(shù)據(jù)查詢、DML操作操作 (數(shù)據(jù)的插入、刪除、修數(shù)據(jù)的插入、刪除、修改改) 等等o

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論