Oracle第9章模式對(duì)象_第1頁
Oracle第9章模式對(duì)象_第2頁
Oracle第9章模式對(duì)象_第3頁
Oracle第9章模式對(duì)象_第4頁
Oracle第9章模式對(duì)象_第5頁
已閱讀5頁,還剩175頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Oracle10g 數(shù)據(jù)庫基礎(chǔ)教程第9章 模式對(duì)象Oracle10g數(shù)據(jù)庫基礎(chǔ)教程本章內(nèi)容本章內(nèi)容p模式概念p表管理p索引管理p分區(qū)表與分區(qū)索引的管理p視圖、序列、同義詞、數(shù)據(jù)庫鏈接管理Oracle10g數(shù)據(jù)庫基礎(chǔ)教程本章要求本章要求p掌握表的管理p掌握索引的管理p掌握分區(qū)的概念及分區(qū)管理p了解視圖、序列、同義詞、數(shù)據(jù)庫鏈接等的管理Oracle10g數(shù)據(jù)庫基礎(chǔ)教程9.1模式模式p模式概念p模式與用戶的關(guān)系p模式選擇與切換Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p模式概念n是指一系列邏輯數(shù)據(jù)結(jié)構(gòu)或?qū)ο蟮募?。是指一系列邏輯?shù)據(jù)結(jié)構(gòu)或?qū)ο蟮募稀?p模式與用戶的關(guān)系n模式與用戶相對(duì)應(yīng),一個(gè)模式只能被一個(gè)數(shù)

2、據(jù)庫用戶模式與用戶相對(duì)應(yīng),一個(gè)模式只能被一個(gè)數(shù)據(jù)庫用戶所擁有,并且模式的名稱與這個(gè)用戶的名稱相同。所擁有,并且模式的名稱與這個(gè)用戶的名稱相同。n通常情況下,用戶所創(chuàng)建數(shù)據(jù)庫對(duì)象都保存在與自己通常情況下,用戶所創(chuàng)建數(shù)據(jù)庫對(duì)象都保存在與自己同名的模式中。同名的模式中。n同一模式中數(shù)據(jù)庫對(duì)象的名稱必須惟一,而在不同模同一模式中數(shù)據(jù)庫對(duì)象的名稱必須惟一,而在不同模式中的數(shù)據(jù)庫對(duì)象可以同名。式中的數(shù)據(jù)庫對(duì)象可以同名。n默認(rèn)情況下,用戶引用的對(duì)象是與自己同名模式中的默認(rèn)情況下,用戶引用的對(duì)象是與自己同名模式中的對(duì)象,如果要引用其他模式中的對(duì)象,需要在該對(duì)象對(duì)象,如果要引用其他模式中的對(duì)象,需要在該對(duì)象名之

3、前指明對(duì)象所屬模式。名之前指明對(duì)象所屬模式。 Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p模式選擇與切換n如果用戶以如果用戶以NORMAL身份登錄,則進(jìn)入同名模式;身份登錄,則進(jìn)入同名模式;n若以若以SYSDBA身份登錄,則進(jìn)入身份登錄,則進(jìn)入SYS模式;模式;n如果以如果以SYSOPER身份登錄,則進(jìn)入身份登錄,則進(jìn)入PUBLIC模式。模式。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程9.2 表表p創(chuàng)建表p表約束的管理 p表參數(shù)設(shè)置 p修改表p刪除表p利用OEM管理表Oracle10g數(shù)據(jù)庫基礎(chǔ)教程9.2.1 創(chuàng)建表創(chuàng)建表p表的創(chuàng)建 p創(chuàng)建臨時(shí)表 p利用子查詢創(chuàng)建表 Oracle10g數(shù)據(jù)庫基礎(chǔ)教程(1)表的創(chuàng)建

4、)表的創(chuàng)建p表的規(guī)劃與設(shè)計(jì)n表名稱表名稱n列的數(shù)量列的數(shù)量n列名稱與類型列名稱與類型n表約束表約束n表內(nèi)部數(shù)據(jù)的組織方式(標(biāo)準(zhǔn)表、索引化表、分區(qū)表)表內(nèi)部數(shù)據(jù)的組織方式(標(biāo)準(zhǔn)表、索引化表、分區(qū)表)n表存儲(chǔ)位置、存儲(chǔ)空間分配等。表存儲(chǔ)位置、存儲(chǔ)空間分配等。 Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p使用CREATE TABLE語句 創(chuàng)建表nCREATE TABLE table_namen(column_name datatype ncolumn_level_constraintn,column_name datatype ncolumn_level_constraintn,table_level_con

5、straint) nparameter_list;Oracle10g數(shù)據(jù)庫基礎(chǔ)教程pCREATE TABLE employee(p empno NUMBER(5) PRIMARY KEY,p ename VARCHAR2(15),p deptno NUMBER(3) NOT NULL CONSTRAINT p fk_emp REFERENCES dept(deptno)p)pTABLESPACE USERSpPCTFREE 10 PCTUSED 40pSTORAGE(INITIAL 50K NEXT 50K MAXEXTENTS 10 PCTINCREASE 25);Oracle10g數(shù)據(jù)庫基

6、礎(chǔ)教程p表名(table_name)n必須是合法標(biāo)識(shí)符,長(zhǎng)度為必須是合法標(biāo)識(shí)符,長(zhǎng)度為130 字節(jié),并且以字母字節(jié),并且以字母開頭,可以包含字母開頭,可以包含字母(AZ,az)、數(shù)字(、數(shù)字(09),),下劃線(下劃線(_)、美元符號(hào)()、美元符號(hào)($)和井號(hào)()和井號(hào)(#)。此外,)。此外,表名稱不能是表名稱不能是Oracle數(shù)據(jù)庫的保留字?jǐn)?shù)據(jù)庫的保留字 p數(shù)據(jù)類型(datatype) n字符類型字符類型n數(shù)字類型數(shù)字類型n日期類型日期類型nLOB類型類型n二進(jìn)制類型二進(jìn)制類型 n行類型行類型 Oracle10g數(shù)據(jù)庫基礎(chǔ)教程pCHAR(n)n定長(zhǎng)字符串,n的取值范圍為1-2000字節(jié)pVA

7、RCHAR2(n)n可變字符串,n取值范圍為1-4000字節(jié)n自動(dòng)調(diào)整數(shù)據(jù)長(zhǎng)度pNCHAR(n)n用來存儲(chǔ)Unicode類型字符串。pNVARCHAR2(n) n它用來存儲(chǔ)它用來存儲(chǔ)Unicode類型字符串。類型字符串。pLONGn可變長(zhǎng)字符列,最大長(zhǎng)度為2GBn用于不需設(shè)置成索引的字符,不常用字符類型字符類型Oracle10g數(shù)據(jù)庫基礎(chǔ)教程數(shù)字類型數(shù)字類型pNUMBER(m,n)n用于存儲(chǔ)整數(shù)和實(shí)數(shù)。用于存儲(chǔ)整數(shù)和實(shí)數(shù)。m表示數(shù)值的總位數(shù)(精度),表示數(shù)值的總位數(shù)(精度),取值范圍為取值范圍為138,默認(rèn)為,默認(rèn)為38;n表示小數(shù)位數(shù),若表示小數(shù)位數(shù),若為負(fù)數(shù)則表示把數(shù)據(jù)向小數(shù)點(diǎn)左邊舍入,默

8、認(rèn)值為為負(fù)數(shù)則表示把數(shù)據(jù)向小數(shù)點(diǎn)左邊舍入,默認(rèn)值為0。 Oracle10g數(shù)據(jù)庫基礎(chǔ)教程日期類型日期類型pDATEn可以存儲(chǔ)的日期范圍為公元前可以存儲(chǔ)的日期范圍為公元前4712年年1月月1日到公元日到公元4712年年1月月1日,由世紀(jì)、年、月、日、時(shí)、分、秒組成??梢栽谟脩舢?dāng)日,由世紀(jì)、年、月、日、時(shí)、分、秒組成??梢栽谟脩舢?dāng)前會(huì)話中使用參數(shù)前會(huì)話中使用參數(shù)NLS_DATE_FORMAT指定日期和時(shí)間的格指定日期和時(shí)間的格式,或者使用式,或者使用TO_DATE函數(shù),將表示日期和時(shí)間的字符串按特函數(shù),將表示日期和時(shí)間的字符串按特定格式轉(zhuǎn)換成日期和時(shí)間。定格式轉(zhuǎn)換成日期和時(shí)間。pTIMESTAMP

9、(n):表示時(shí)間戳,是DATE 數(shù)據(jù)類型的擴(kuò)展,允許存儲(chǔ)小數(shù)形式的秒值。n表示秒的小數(shù)位數(shù),取值范圍為19,默認(rèn)值為6。pTIMESTAMP(n) WITH TIME ZONE:通過存儲(chǔ)一個(gè)時(shí)區(qū)偏差來擴(kuò)展TIMESTAMP類型。 時(shí)區(qū)偏差值為相對(duì)于通用協(xié)調(diào)時(shí)間(或稱UTC,以前稱為格林威治時(shí)間或GMT)的時(shí)差。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程pTIMESTAMP(n) WITH LOCAL TIME ZONEn與與TIMESTAMP(n) WITH TIME ZONE的不同之處在于,的不同之處在于,存儲(chǔ)日期時(shí)直接轉(zhuǎn)換為數(shù)據(jù)庫時(shí)區(qū)日期,而讀取日期時(shí)將數(shù)據(jù)庫存儲(chǔ)日期時(shí)直接轉(zhuǎn)換為數(shù)據(jù)庫時(shí)區(qū)日期,而讀

10、取日期時(shí)將數(shù)據(jù)庫時(shí)區(qū)日期轉(zhuǎn)換為用戶會(huì)話時(shí)區(qū)日期。時(shí)區(qū)日期轉(zhuǎn)換為用戶會(huì)話時(shí)區(qū)日期。pINTERVAL YEAR(n) TO MONTHn存儲(chǔ)以年份和月份表示的時(shí)間段。存儲(chǔ)以年份和月份表示的時(shí)間段。n是表示是表示YEAR的最多數(shù)字位的最多數(shù)字位數(shù),默認(rèn)為數(shù),默認(rèn)為2。例如,。例如,INTERVAL 2-11 YEAR TO MONTH表示表示2年年11個(gè)月。個(gè)月。pINTERVAL DAY(m) TO SECOND(n)n存儲(chǔ)以天數(shù)、小時(shí)數(shù)、分鐘數(shù)和秒數(shù)表示的時(shí)間段。存儲(chǔ)以天數(shù)、小時(shí)數(shù)、分鐘數(shù)和秒數(shù)表示的時(shí)間段。m是表示是表示DAY的最多數(shù)字位數(shù),默認(rèn)為的最多數(shù)字位數(shù),默認(rèn)為2。n是表示是表示SE

11、COND的小數(shù)部分的小數(shù)部分的位數(shù),默認(rèn)為的位數(shù),默認(rèn)為6。例如,。例如,INTERVAL 5 10:30:40 DAY TO SECOND表示表示5天天10小時(shí)小時(shí)30分分40秒。秒。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程LOB類型類型pCLOBn用于存儲(chǔ)可變長(zhǎng)度的字符數(shù)據(jù),如文本文件等,最大數(shù)據(jù)量為用于存儲(chǔ)可變長(zhǎng)度的字符數(shù)據(jù),如文本文件等,最大數(shù)據(jù)量為4 GB。pNCLOBn用于存儲(chǔ)可變長(zhǎng)度的用于存儲(chǔ)可變長(zhǎng)度的Unicode字符數(shù)據(jù),最大數(shù)據(jù)量為字符數(shù)據(jù),最大數(shù)據(jù)量為4 GB。pBLOBn用于存儲(chǔ)大型的、未被結(jié)構(gòu)化的可變長(zhǎng)度的二進(jìn)制數(shù)據(jù)(如二進(jìn)用于存儲(chǔ)大型的、未被結(jié)構(gòu)化的可變長(zhǎng)度的二進(jìn)制數(shù)據(jù)(如

12、二進(jìn)制文件、圖片文件、音頻和視頻等非文本文件),最大數(shù)據(jù)量為制文件、圖片文件、音頻和視頻等非文本文件),最大數(shù)據(jù)量為4 GB。pBFILEn用于存儲(chǔ)指向二進(jìn)制格式文件的定位器,該二進(jìn)制文件保存在數(shù)用于存儲(chǔ)指向二進(jìn)制格式文件的定位器,該二進(jìn)制文件保存在數(shù)據(jù)庫外部的操作系統(tǒng)中,文件最大為據(jù)庫外部的操作系統(tǒng)中,文件最大為4 GB。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程二進(jìn)制類型二進(jìn)制類型 pRAW(n)n用于存儲(chǔ)可變長(zhǎng)度的二進(jìn)制數(shù)據(jù),用于存儲(chǔ)可變長(zhǎng)度的二進(jìn)制數(shù)據(jù),n表示數(shù)據(jù)長(zhǎng)度,取表示數(shù)據(jù)長(zhǎng)度,取值范圍為值范圍為12000字節(jié);字節(jié);pLONG RAWn用于存儲(chǔ)可變長(zhǎng)度的二進(jìn)制數(shù)據(jù),最大存儲(chǔ)數(shù)據(jù)量為用于存

13、儲(chǔ)可變長(zhǎng)度的二進(jìn)制數(shù)據(jù),最大存儲(chǔ)數(shù)據(jù)量為2 GB。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程行類型行類型pROWIDn行標(biāo)識(shí)符,表中行的物理地址的偽列類型。行標(biāo)識(shí)符,表中行的物理地址的偽列類型。ROWID類型數(shù)據(jù)由類型數(shù)據(jù)由18位十六進(jìn)制數(shù)構(gòu)成,包括對(duì)象編號(hào)、文位十六進(jìn)制數(shù)構(gòu)成,包括對(duì)象編號(hào)、文件編號(hào)、數(shù)據(jù)塊編號(hào)和塊內(nèi)行號(hào)。件編號(hào)、數(shù)據(jù)塊編號(hào)和塊內(nèi)行號(hào)。pUROWIDn行標(biāo)識(shí)符,用于表示索引化表中行的邏輯地址。行標(biāo)識(shí)符,用于表示索引化表中行的邏輯地址。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p約束(constraint)n在在Oracle數(shù)據(jù)庫中對(duì)列的約束包括主鍵約束、惟一性數(shù)據(jù)庫中對(duì)列的約束包括主鍵約束、惟一

14、性約束、檢查約束、外鍵約束和空約束、檢查約束、外鍵約束和空/非空約束等非空約束等5中,定中,定義方法有表級(jí)約束和列級(jí)約束義方法有表級(jí)約束和列級(jí)約束2種。種。p參數(shù)(parameter_list)n在定義表時(shí),可以通過參數(shù)設(shè)置表存儲(chǔ)在哪一個(gè)表空在定義表時(shí),可以通過參數(shù)設(shè)置表存儲(chǔ)在哪一個(gè)表空間中,和存儲(chǔ)空間分配等。間中,和存儲(chǔ)空間分配等。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程(2)創(chuàng)建臨時(shí)表)創(chuàng)建臨時(shí)表 p臨時(shí)表中的數(shù)據(jù)在特定條件下自動(dòng)釋放,但其結(jié)構(gòu)將一直存在。p根據(jù)臨時(shí)表中數(shù)據(jù)被釋放的時(shí)間不同,臨時(shí)表分為事務(wù)級(jí)別的臨時(shí)表和會(huì)話級(jí)別的臨時(shí)表兩類。nON COMMIT DELETE ROWS /ON CO

15、MMIT DELETE ROWS /事務(wù)級(jí)臨時(shí)表事務(wù)級(jí)臨時(shí)表nON COMMIT PRESERVE ROWS /ON COMMIT PRESERVE ROWS /會(huì)話級(jí)臨時(shí)表會(huì)話級(jí)臨時(shí)表p語法n使用使用CREATE GLOBAL TEMPORARY TABLE語語句創(chuàng)建臨時(shí)表句創(chuàng)建臨時(shí)表n使用使用ON COMMIT子句說明臨時(shí)表的類型,默認(rèn)為事子句說明臨時(shí)表的類型,默認(rèn)為事務(wù)級(jí)別的臨時(shí)表。務(wù)級(jí)別的臨時(shí)表。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p事務(wù)級(jí)別的臨時(shí)表是在事務(wù)提交時(shí)系統(tǒng)自動(dòng)刪除表中所有記錄。nCREATE GLOBAL TEMPORARY TABLE tran_temp(nID NUMBER

16、(2) PRIMARY KEY,nname VARCHAR2(20)n)nON COMMIT DELETE ROWS;Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p會(huì)話級(jí)別的臨時(shí)表是在會(huì)話終止時(shí)系統(tǒng)自動(dòng)刪除表中所有記錄 。nCREATE GLOBAL TEMPORARY TABLE sess_temp(nID NUMBER(2) PRIMARY KEY,nname VARCHAR2(20)n)nON COMMIT PRESERVE ROWS;Oracle10g數(shù)據(jù)庫基礎(chǔ)教程(3)利用子查詢創(chuàng)建表)利用子查詢創(chuàng)建表 p語法語法nCREATE TABLE table_namen(column_name col

17、umn_level_constraintn,column_name column_level_constraintn,table_level_constraint) nparameter_listnAS subquery; Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p注意注意n通過該方法創(chuàng)建表時(shí),可以修改表中列的名稱,但是通過該方法創(chuàng)建表時(shí),可以修改表中列的名稱,但是不能修改列的數(shù)據(jù)類型和長(zhǎng)度;不能修改列的數(shù)據(jù)類型和長(zhǎng)度;n源表中的約束條件和列的缺省值都不會(huì)復(fù)制到新表中;源表中的約束條件和列的缺省值都不會(huì)復(fù)制到新表中;n子查詢中不能包含子查詢中不能包含LOB類型和類型和LONG類型列;類型列;n當(dāng)子查詢

18、條件為真時(shí),新表中包含查詢到的數(shù)據(jù);當(dāng)當(dāng)子查詢條件為真時(shí),新表中包含查詢到的數(shù)據(jù);當(dāng)查詢條件為假時(shí),則創(chuàng)建一個(gè)空表。查詢條件為假時(shí),則創(chuàng)建一個(gè)空表。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p創(chuàng)建一個(gè)標(biāo)準(zhǔn)表,保存工資高于3000的員工的員工號(hào)、員工名和部門號(hào)。語句為nCREATE TABLE nemp_select(emp_no,emp_name,dept_no)nASnSELECT empno,ename,deptno FROM nemployee WHERE sal3000;Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p創(chuàng)建一個(gè)會(huì)話級(jí)臨時(shí)表,保存部門號(hào)、部門人數(shù)和部門的平均工資。nCREATE GLOBAL T

19、EMPORARY TABLE ept_tempnON COMMIT PRESERVE ROWSnASnSELECT deptno,count(*) num,avg(sal) avgsal FROM emp nGROUP BY deptno;Oracle10g數(shù)據(jù)庫基礎(chǔ)教程9.2.2 表約束表約束p約束的類別 p定義約束 p添加和刪除約束 p設(shè)置約束狀態(tài) p約束的延遲檢查 p查詢約束信息 Oracle10g數(shù)據(jù)庫基礎(chǔ)教程(1)約束的類別)約束的類別 p約束作用n是在表中定義的用于維護(hù)數(shù)據(jù)庫完整性的一些規(guī)則。是在表中定義的用于維護(hù)數(shù)據(jù)庫完整性的一些規(guī)則。通過對(duì)表中列定義約束,可以防止在執(zhí)行通過對(duì)表

20、中列定義約束,可以防止在執(zhí)行DML操作時(shí),操作時(shí),將不符合要求的數(shù)據(jù)插入到表中。將不符合要求的數(shù)據(jù)插入到表中。p約束類型nPRIMARY KEYnUNIQUEnCHECKnFOREIGN KEY nNULL/NOT NULL Oracle10g數(shù)據(jù)庫基礎(chǔ)教程PRIMARY KEYp特點(diǎn)n定義主鍵,起惟一標(biāo)識(shí)作用,其值不能為定義主鍵,起惟一標(biāo)識(shí)作用,其值不能為NULL,也,也不能重復(fù);不能重復(fù);n一個(gè)表中只能定義一個(gè)主鍵約束;一個(gè)表中只能定義一個(gè)主鍵約束;n建立主鍵約束的同時(shí),在該列上建立一個(gè)惟一性索引,建立主鍵約束的同時(shí),在該列上建立一個(gè)惟一性索引,可以為它指定存儲(chǔ)位置和存儲(chǔ)參數(shù);可以為它指定

21、存儲(chǔ)位置和存儲(chǔ)參數(shù);n主鍵約束可以是列級(jí)約束,也可以是表級(jí)約束。主鍵約束可以是列級(jí)約束,也可以是表級(jí)約束。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程UNIQUEp特點(diǎn)n定義為惟一性約束的某一列或多個(gè)列的組合的取值必定義為惟一性約束的某一列或多個(gè)列的組合的取值必須惟一;須惟一;n如果某一列或多個(gè)列僅定義惟一性約束,而沒有定義如果某一列或多個(gè)列僅定義惟一性約束,而沒有定義非空約束,則該約束列可以包含多個(gè)空值;非空約束,則該約束列可以包含多個(gè)空值;nOracle自動(dòng)在惟一性約束列上建立一個(gè)惟一性索引,自動(dòng)在惟一性約束列上建立一個(gè)惟一性索引,可以為它指定存儲(chǔ)位置和存儲(chǔ)參數(shù);可以為它指定存儲(chǔ)位置和存儲(chǔ)參數(shù);n惟一

22、性約束可以是列級(jí)約束,也可以是表級(jí)約束。惟一性約束可以是列級(jí)約束,也可以是表級(jí)約束。 Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p在一個(gè)基本表中只能定義一個(gè)PRIMARY KEY約束,但可定義多個(gè)UNIQUE約束;p對(duì)于指定為PRIMARY KEY的一個(gè)列或多個(gè)列的組合,其中任何一個(gè)列都不能出現(xiàn)空值,而對(duì)于UNIQUE所約束的唯一鍵,則允許為空。p不能為同一個(gè)列或一組列既定義UNIQUE約束,又定義PRIMARY KEY約束。PRIMARY KEY與與UNIQUE比較比較Oracle10g數(shù)據(jù)庫基礎(chǔ)教程CHECK p特點(diǎn)n檢查約束用來限制列值所允許的取值范圍,其表達(dá)式檢查約束用來限制列值所允許的取值范圍

23、,其表達(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è)檢查約束;n檢查約束可以是列級(jí)約束,也可以是表級(jí)約束。檢查約束可以是列級(jí)約束,也可以是表級(jí)約束。 Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p概念nFOREIGN KEY約束指定某一個(gè)列或一組列作為約束指定某一個(gè)列或一組列作為外部鍵,其中,包含外部鍵的表稱為從表,包含外外

24、部鍵,其中,包含外部鍵的表稱為從表,包含外部鍵所引用的主鍵或唯一鍵的表稱主表。部鍵所引用的主鍵或唯一鍵的表稱主表。n系統(tǒng)保證從表在外部鍵上的取值要么是主表中某一系統(tǒng)保證從表在外部鍵上的取值要么是主表中某一個(gè)主鍵值或唯一鍵值,要么取空值。以此保證兩個(gè)個(gè)主鍵值或唯一鍵值,要么取空值。以此保證兩個(gè)表之間的連接,確保了實(shí)體的參照完整性。表之間的連接,確保了實(shí)體的參照完整性。FOREIGN KEYOracle10g數(shù)據(jù)庫基礎(chǔ)教程p特點(diǎn)n定義外鍵約束的列的取值要么是主表參照列的值,要定義外鍵約束的列的取值要么是主表參照列的值,要么為空;么為空;n外鍵列只能參照于主表中的主鍵約束列或惟一性約束外鍵列只能參照

25、于主表中的主鍵約束列或惟一性約束列;列;n可以在一列或多列組合上定義外鍵約束;可以在一列或多列組合上定義外鍵約束;n外鍵約束可以是列級(jí)約束,也可以是表級(jí)約束。外鍵約束可以是列級(jí)約束,也可以是表級(jí)約束。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程N(yùn)ULL/NOT NULL p特點(diǎn)n在同一個(gè)表中可以定義多個(gè)在同一個(gè)表中可以定義多個(gè)NOT NULL約束;約束;n只能是列級(jí)約束。只能是列級(jí)約束。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程(2)定義約束)定義約束p列約束n對(duì)某一個(gè)特定列的約束,包含在列定義中,直接跟在對(duì)某一個(gè)特定列的約束,包含在列定義中,直接跟在該列的其他定義之后,用空格分隔該列的其他定義之后,用空格分隔,不

26、必指定列名不必指定列名;p表約束n與列定義相互獨(dú)立,不包括在列定義中。通常用于對(duì)與列定義相互獨(dú)立,不包括在列定義中。通常用于對(duì)多個(gè)列一起進(jìn)行約束,與列定義用多個(gè)列一起進(jìn)行約束,與列定義用,分隔。定義表分隔。定義表約束時(shí)必須指出要約束的那些列的名稱。約束時(shí)必須指出要約束的那些列的名稱。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p定義列級(jí)約束的語法為:nCONSTRAINT constraint_name nconstraint_type conditioin; p定義表級(jí)約束的語法為:nCONSTRAINT constraint_namenconstraint_type(column1_name,ncol

27、umn2_name,|condition);p注意nOracle約束通過名稱進(jìn)行標(biāo)識(shí)。在定義時(shí)可以通過約束通過名稱進(jìn)行標(biāo)識(shí)。在定義時(shí)可以通過CONSTRAINT關(guān)鍵字為約束命名。如果用戶沒有為關(guān)鍵字為約束命名。如果用戶沒有為約束命名,約束命名,Oracle將自動(dòng)為約束命名。將自動(dòng)為約束命名。 Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p創(chuàng)建一個(gè)student表。nCREATE TABLE student(n sno NUMBER(6) CONSTRAINT S_PK n PRIMARY KEY,nsname VARCHAR2(10) NOT NULL,nsex CHAR(2) CONSTRAINT S_

28、CK1 n CHECK(sex in(M, F),nsage NUMBER(6,2),nCONSTRAINT S_CK2 CHECK(n sage between 18 and 60)n);Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p創(chuàng)建一個(gè)course表,同時(shí)為主鍵約束列上的唯一性索引設(shè)置存儲(chǔ)位置和存儲(chǔ)參數(shù),語句為 nCREATE TABLE course(n cno NUMBER(6) PRIMARY KEY,n cname CHAR(20) UNIQUE USING INDEX n TABLESPACE indx STORAGE(n INITIAL 64K NEXT 64K)n); Oracle1

29、0g數(shù)據(jù)庫基礎(chǔ)教程p創(chuàng)建一個(gè)SC表,語句為nCREATE TABLE SC(n sno NUMBER(6) REFERENCES student(sno),n cno NUMBER(6) REFERENCES course(cno),n grade NUMBER(5,2),n CONSTRAINT SC_PK PRIMARY KEY(sno, cno) n); Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p定義列級(jí)FOREIGN KEY約束nCONSTRAINT constraint_name nFOREIGN KEY nREFERENCES ref_table_name (column_name,)p定

30、義表級(jí)FOREIGN KEY約束nCONSTRAINT constraint_name nFOREIGN KEY (column_name,) nREFERENCES ref_table_name (column_name,) nON DELETE CASCADE|SET NULL;Oracle10g數(shù)據(jù)庫基礎(chǔ)教程pON DELETE CASCADEn刪除子表中所有相關(guān)記錄刪除子表中所有相關(guān)記錄pON DELETE SET NULLn將子表中相關(guān)記錄的外鍵約束列值設(shè)置為將子表中相關(guān)記錄的外鍵約束列值設(shè)置為NULLpON DELETE RESTRICTEDn受限刪除,即如果子表中有相關(guān)子記錄存在

31、,則不能受限刪除,即如果子表中有相關(guān)子記錄存在,則不能刪除主表中的父記錄,默認(rèn)引用方式。刪除主表中的父記錄,默認(rèn)引用方式。 Oracle10g數(shù)據(jù)庫基礎(chǔ)教程pDEFAULTn如果用戶在插入新行時(shí)沒有顯示為列提供數(shù)據(jù),系統(tǒng)將默認(rèn)如果用戶在插入新行時(shí)沒有顯示為列提供數(shù)據(jù),系統(tǒng)將默認(rèn)值賦給該列。值賦給該列。n語法語法CONSTRAINT DEFAULT 表達(dá)式表達(dá)式Oracle10g數(shù)據(jù)庫基礎(chǔ)教程(3)添加和刪除約束)添加和刪除約束 p添加約束語法為:nALTER TABLE table_name nADD CONSTRAINT constraint_namenconstraint_type(col

32、umn1_name,column2_name,)condition;Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p創(chuàng)建一個(gè)player表nCREATE TABLE player(n ID NUMBER(6),n sno NUMBER(6),n sname VARCHAR2(10),n sage NUMBER(6,2),n resume VARCHAR2(1000)n); p添加主鍵約束nALTER TABLE player ADD CONSTRAINT P_PK PRIMARY KEY(ID);p添加惟一性約束nALTER TABLE player ADD CONSTRAINT P_UK UNIQUE(s

33、name);Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p添加檢查約束nALTER TABLE player ADD CONSTRAINT P_CK CHECK(sage BETWEEN 20 AND 30);p添加外鍵約束nALTER TABLE playernADD CONSTRAINT P_FK FOREIGN KEY(sno)REFERENCES student(sno) ON DELETE CASCADE;p添加空/非空約束n為表列添加空為表列添加空/非空約束時(shí)必須使用非空約束時(shí)必須使用MODIFY子句代替子句代替ADD子句子句nALTER TABLE player MODIFY resume

34、NOT NULL;nALTER TABLE player MODIFY resume NULL;Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p刪除約束n使用使用ALTER TABLEDROP語句刪除已經(jīng)定義的約語句刪除已經(jīng)定義的約束。束。n可以通過直接指定約束的名稱來刪除約束,或指定約束可以通過直接指定約束的名稱來刪除約束,或指定約束的內(nèi)容來刪除約束。的內(nèi)容來刪除約束。p刪除指定內(nèi)容的約束nALTER TABLE player DROP UNIQUE(sname);p刪除指定名稱的約束nALTER TABLE player DROP CONSTRAINT P_CK; Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p刪除

35、主鍵約束、唯一性約束的同時(shí)將刪除唯一性索引,如果要在刪除約束時(shí)保留唯一性索引,則必須在ALTER TABLEDORP 語句中指定KEEP INDEX 子句。nALTER TABLE player DROP CONSTRAINT P_UK KEEP INDEX;p如果要在刪除約束的同時(shí),刪除引用該約束的其他約束,則需要在ALTER TABLEDORP語句中指定CASCADE關(guān)鍵字。nALTER TABLE player DROP CONSTRAINT P_PK CASCADE;Oracle10g數(shù)據(jù)庫基礎(chǔ)教程(4)設(shè)置約束狀態(tài))設(shè)置約束狀態(tài) p激活(ENABLE)狀態(tài)n當(dāng)約束處于激活狀態(tài)時(shí),約束

36、將對(duì)表的插入或更新操作當(dāng)約束處于激活狀態(tài)時(shí),約束將對(duì)表的插入或更新操作進(jìn)行檢查,與約束規(guī)則沖突的操作被回退。進(jìn)行檢查,與約束規(guī)則沖突的操作被回退。p禁用(DISABLE)狀態(tài)n當(dāng)約束處于禁用狀態(tài)時(shí),約束不起作用,與約束規(guī)則沖當(dāng)約束處于禁用狀態(tài)時(shí),約束不起作用,與約束規(guī)則沖突的插入或更新操作也能夠成功執(zhí)行。突的插入或更新操作也能夠成功執(zhí)行。p利用SQL*Loader從外部數(shù)據(jù)源提取大量數(shù)據(jù)到數(shù)據(jù)庫中;p進(jìn)行數(shù)據(jù)庫中數(shù)據(jù)的大量導(dǎo)入、導(dǎo)出操作;p針對(duì)表執(zhí)行一項(xiàng)包含大量數(shù)據(jù)操作的批處理工作時(shí)。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p禁用約束 n在定義約束時(shí),可以將約束設(shè)置為禁用狀態(tài),默認(rèn)為在定義約束時(shí),可以

37、將約束設(shè)置為禁用狀態(tài),默認(rèn)為激活狀態(tài)。也可以在約束創(chuàng)建后,修改約束狀態(tài)為禁激活狀態(tài)。也可以在約束創(chuàng)建后,修改約束狀態(tài)為禁用。用。n創(chuàng)建表時(shí)禁用約束創(chuàng)建表時(shí)禁用約束pCREATE TABLE S (SNO CHAR(11) PRIMARY KEY DISALBE,);n利用利用ALTER TABLEDISABLE禁用約束禁用約束pALTER TABLE STUDENT DISABLE CONSTRAINT S_CK1;pALTER TABLE STUDENT DISABLE UNIQUE (sname);Oracle10g數(shù)據(jù)庫基礎(chǔ)教程n禁用主鍵約束、惟一性約束時(shí),會(huì)刪除其對(duì)應(yīng)的惟一禁用主鍵約束

38、、惟一性約束時(shí),會(huì)刪除其對(duì)應(yīng)的惟一性索引,而在重新激活時(shí),性索引,而在重新激活時(shí),Oracle為它們重建惟一性為它們重建惟一性索引。若在禁用約束時(shí),保留對(duì)應(yīng)的惟一性索引,可索引。若在禁用約束時(shí),保留對(duì)應(yīng)的惟一性索引,可使用使用ALTER TABLEDISABLEKEEP INDEX語句。語句。pALTER TABLE STUDENT DISABLE UNIQUE (sname) KEEP INDEX;pALTER TABLE STUDENT DISABLE PRIMARY KEY KEEP INDEX;n若當(dāng)前約束若當(dāng)前約束(主鍵約束、惟一性約束主鍵約束、惟一性約束)列被引用,則需列被引用,則

39、需要使用要使用ALTER TABLEDISABLECASCADE語語句同時(shí)禁用引用該約束的約束。句同時(shí)禁用引用該約束的約束。pALTER TABLE STUDENT DISABLE PRIMARY KEY KEEP INDEX CASCADE; Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p激活約束n創(chuàng)建或添加約束時(shí),默認(rèn)為激活狀態(tài)。創(chuàng)建或添加約束時(shí),默認(rèn)為激活狀態(tài)。n利用利用ALTER TABLEENABLE語句激活約束語句激活約束pALTER TABLE STUDENT ENABLE UNIQUE (sname);n禁用主鍵約束、惟一性約束時(shí),會(huì)刪除其對(duì)應(yīng)的惟一禁用主鍵約束、惟一性約束時(shí),會(huì)刪除其對(duì)應(yīng)

40、的惟一性索引,而在重新激活時(shí),性索引,而在重新激活時(shí),Oracle為它們重建惟一性為它們重建惟一性索引,可以為索引設(shè)置存儲(chǔ)位置和存儲(chǔ)參數(shù)索引,可以為索引設(shè)置存儲(chǔ)位置和存儲(chǔ)參數(shù)(索引與表索引與表盡量分開存儲(chǔ)盡量分開存儲(chǔ))。pALTER TABLE STUDENT ENABLE PRIMARY KEY pUSING INDEX TABLESPACE indx STORAGE(INITIAL 32K NEXT 16K);Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p通過ALTER TABLE MODIFY DISABLE| ENABLE 語句改變約束狀態(tài)nALTER TABLE STUDENT MODIFY C

41、ONSTRAINT S_CK2 DISABLE;Oracle10g數(shù)據(jù)庫基礎(chǔ)教程 (5)約束的延遲檢查)約束的延遲檢查 p默認(rèn)情況下,在表中的約束都是不可延遲約束,Oracle在一條DML語句執(zhí)行完畢之后立即進(jìn)行約束檢查(除非禁用)。 p創(chuàng)建約束時(shí)可以顯式使用DEFERRABLE關(guān)鍵字,創(chuàng)建可延遲的約束。pINITIALLY IMMEDIATE 或INITIALLY DEFERRED說明可延遲約束在初始狀態(tài)下是立即檢查還是延遲檢查p如果在定義約束時(shí)設(shè)定為不可延遲,則約束創(chuàng)建后不能更改其可延遲性。只有創(chuàng)建時(shí)設(shè)定為可延遲的約束,創(chuàng)建后才能更改其可延遲性。 Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p創(chuàng)建兩個(gè)

42、表,其約束都是可延遲的。nCREATE TABLE new_dept(ndeptno NUMBER PRIMARY KEY DEFERRABLE INITIALLY IMMEDIATE,ndname CHAR(11) UNIQUEn); nCREATE TABLE new_emp(nempno NUMBER PRIMARY KEY,nename CHAR(11),ndeptno NUMBER CONSTRAINT NE_FK REFERENCES new_dept(deptno)nON DELETE CASCADE DEFERRABLEn);Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p由于外鍵約束的作用

43、,執(zhí)行下面語句時(shí)會(huì)產(chǎn)時(shí)錯(cuò)誤。nINSERT INTO new_emp VALUES(1,ZHANG,11);n*nERROR 位于第位于第 1 行行:nORA-02291: 違反完整約束條件違反完整約束條件 (SCOTT.E_FK) - 未找到父未找到父項(xiàng)關(guān)鍵字項(xiàng)關(guān)鍵字 Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p將new_emp表的外鍵約束檢查延遲。nALTER TABLE new_emp MODIFY CONSTRAINT NE_FK INITIALLY DEFERRED;p此時(shí),由于將new_emp表外鍵約束延遲到事務(wù)結(jié)束后進(jìn)行檢查,因此可以先向new_emp中插入數(shù)據(jù),而后向new_dept中插

44、入數(shù)據(jù)。nINSERT INTO new_emp VALUES(1,ZHANG,11);nINSERT INTO new_dept VALUES(11,COMPUTER);nCOMMIT; Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p操作完后,應(yīng)將new_emp外鍵約束檢查恢復(fù)原來狀態(tài)。nALTER TABLE new_emp MODIFY CONSTRAINT NE_FK INITIALLY IMMEDIATE;p注意n在修改約束的檢查延遲性時(shí),如果無法確定約束的名在修改約束的檢查延遲性時(shí),如果無法確定約束的名稱或需要設(shè)置多個(gè)約束的延遲性,可以一次性將所有稱或需要設(shè)置多個(gè)約束的延遲性,可以一次性將所有

45、可延遲的約束延遲或恢復(fù)??裳舆t的約束延遲或恢復(fù)。pSET CONSTRAINT ALL DEFERRED;pSET CONSTRAINT ALL IMMEDIATE; Oracle10g數(shù)據(jù)庫基礎(chǔ)教程(6)查詢約束信息)查詢約束信息pALL_CONSTRAINTSpUSER_CONSTRAINTSpDBA_CONSTRAINTSpALL_CONS_COLUMNSpUSER_CONS_COLUMNSpDAB_CONS_COLUMNSOracle10g數(shù)據(jù)庫基礎(chǔ)教程p查看student表中的所有約束。nSELECT CONSTRAINT_NAME, nCONSTRAINT_TYPE,DEFERRE

46、D,STATUSnFROM USER_CONSTRAINTS nWHERE TABLE_NAME=STUDENT;p查看student表中各個(gè)約束所作用的列。nSELECT CONSTRAINT_NAME, nCOLUMN_NAME nFROM USER_CONS_COLUMNSnWHERE TABLE_NAME=STUDENT;Oracle10g數(shù)據(jù)庫基礎(chǔ)教程9.2.3 表參數(shù)設(shè)置表參數(shù)設(shè)置pTABLESPACEnTABLESPACE子句用于指定表存儲(chǔ)的表空間。子句用于指定表存儲(chǔ)的表空間。 pSTORAGE nSTORAGE子句用于設(shè)置表的存儲(chǔ)參數(shù)。若不指定,則繼承表空子句用于設(shè)置表的存儲(chǔ)參

47、數(shù)。若不指定,則繼承表空間的存儲(chǔ)參數(shù)設(shè)置。間的存儲(chǔ)參數(shù)設(shè)置。 pNITIAL pNEXTpPCTINCREASEpMINEXTENTSpMAXEXTENTSpBUFFER_POOL (KEEP、RECYCLE、DEFAULT) Oracle10g數(shù)據(jù)庫基礎(chǔ)教程pSTORAGE參數(shù)設(shè)置需注意n如果表空間管理方式為如果表空間管理方式為EXTENT MANAGEMENT LOCAL AUTOALLOCATE,則在,則在STORAGE中只中只能指定能指定INITIAL,NEXT和和MINEXTENTS這這3個(gè)參個(gè)參數(shù);數(shù);n如果表空間管理方式為如果表空間管理方式為EXTENT MANAGEMENT L

48、OCAL UNIFORM,則不能指定任何,則不能指定任何STORAGE子子句;句;n如果表空間管理方式為如果表空間管理方式為EXTENT MANAGEMENT DICTIONARY,則在,則在STORAG中可以設(shè)置任何參中可以設(shè)置任何參數(shù)。數(shù)。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p數(shù)據(jù)塊管理參數(shù) nPCTFREE:用于指定數(shù)據(jù)塊中必須保留的最小空閑:用于指定數(shù)據(jù)塊中必須保留的最小空閑空間??臻g。nPCTUSED:用于指定當(dāng)數(shù)據(jù)塊空閑空間達(dá)到:用于指定當(dāng)數(shù)據(jù)塊空閑空間達(dá)到PCTFREE參數(shù)的限制后,數(shù)據(jù)塊能夠被再次使用前,參數(shù)的限制后,數(shù)據(jù)塊能夠被再次使用前,已占用的存儲(chǔ)空間必須低于的比例。已占用的

49、存儲(chǔ)空間必須低于的比例。nINITRANS:用于指定能夠并發(fā)訪問同一個(gè)數(shù)據(jù)塊的:用于指定能夠并發(fā)訪問同一個(gè)數(shù)據(jù)塊的事務(wù)的數(shù)量。事務(wù)的數(shù)量。nMAXTRANS:用于指定能夠并發(fā)訪問同一個(gè)數(shù)據(jù)塊:用于指定能夠并發(fā)訪問同一個(gè)數(shù)據(jù)塊的事務(wù)的最大數(shù)量。的事務(wù)的最大數(shù)量。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程pLOGGING與NOLOGGING子句n默認(rèn)為默認(rèn)為NOLOGGING,即表的創(chuàng)建操作不會(huì)記錄到,即表的創(chuàng)建操作不會(huì)記錄到重做日志文件中,尤其適合通過查詢創(chuàng)建表的情況。重做日志文件中,尤其適合通過查詢創(chuàng)建表的情況。使用使用LOGGING子句,表的創(chuàng)建操作(包括通過查詢子句,表的創(chuàng)建操作(包括通過查詢創(chuàng)建表

50、時(shí)的插入記錄操作)都將記錄到重做日志文件創(chuàng)建表時(shí)的插入記錄操作)都將記錄到重做日志文件中。中。pPARALLEL、NOPARALLELpCACHE、NOCACHEpMONITORING、NOMONITORINGOracle10g數(shù)據(jù)庫基礎(chǔ)教程9.2.4 修改表修改表p基本語法p列的添加、刪除、修改p表參數(shù)修改p表結(jié)構(gòu)重組p表重命名等p為表和列添加注釋 Oracle10g數(shù)據(jù)庫基礎(chǔ)教程()修改表基本語法()修改表基本語法pALTER TABLE pADD 完整性約束定義pMODIFY pRENAME COLUMN oldname TO newnamepSET UNUSED COLUMN colu

51、mn /single columnpSET UNUSED COLUMNS(column1,column2)pDROP COLUMN /single columnpDROP /multi columnpDROP UNUSED COLUMNSOracle10g數(shù)據(jù)庫基礎(chǔ)教程()列的添加、刪除、修改()列的添加、刪除、修改 p添加列 n語法語法pALTER TABLE table_name pADD(new_column_name datatypeNOT NULLDEFAULT value); n示例示例pALTER TABLE employee pADD(phone VARCHAR2(11),hi

52、redate DATE DEFAULT SYSDATE NOT NULL);Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p修改列類型 n語法語法pALTER TABLE table_name MODIFY column_name new_datatype; n修改表中列類型時(shí),必須滿足下列條件:修改表中列類型時(shí),必須滿足下列條件:p可以增大字符類型列的長(zhǎng)度和數(shù)值類型列的精度;p如果字符類型列、數(shù)值類型列中數(shù)據(jù)滿足新的長(zhǎng)度、精度,則可以縮小類型的長(zhǎng)度、精度;p如果不改變字符串的長(zhǎng)度,可以將VARCHAR2類型和CAHR類型轉(zhuǎn)換;p如果更改數(shù)據(jù)類型為另一種非同系列類型,則列中數(shù)據(jù)必須為NULL。 Oracle

53、10g數(shù)據(jù)庫基礎(chǔ)教程n示例示例pALTER TABLE employee MODIFY ename CHAR(20);pALTER TABLE employee MODIFY phone NUMBER; p修改列名 n語法語法pALTER TABLE table_name RENAME COLUMN oldname TO newname;n示例示例 pALTER TABLE employee RENAME COLUMN ename TO employee_name; Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p刪除列 n直接刪除列語法直接刪除列語法pALTER TABLE table_name pDRO

54、P COLUMN column_name|p(column1_name,column2_name,)pCASCADE CONSTRAINTS; n直接刪除列示例直接刪除列示例pALTER TABLE sc DROP COLUMN sno CASCADE pCONSTRAINTS;pALTER TABLE employee DROP (phone,hiredate);Oracle10g數(shù)據(jù)庫基礎(chǔ)教程n將列標(biāo)記為將列標(biāo)記為UNUSED,然后進(jìn)行刪除。,然后進(jìn)行刪除。pALTER TABLE table_name pSET UNUSED COLUMN column_name|p(column1_na

55、me,column2_name,)pCASCADE CONSTRAINTS; n示例示例pALTER TABLE player SET UNUSED COLUMN sage;pALTER TABLE player SET UNUSED (sname,resume);pALTER TABLE player DROP UNUSED COLUMNS; Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p如果數(shù)據(jù)庫表空間處于字典管理方式,可以對(duì)表的參數(shù)進(jìn)行修改,包括存儲(chǔ)參數(shù)、存儲(chǔ)位置、數(shù)據(jù)塊設(shè)置等。nALTER TABLE employee nPCTFREE 30 PCTUSED 60 STORAGE(NEXT 512

56、K PCTINCREASE 11);p注意n表創(chuàng)建后不能對(duì)表創(chuàng)建后不能對(duì)INITIAL、MINEXTENTS兩個(gè)參兩個(gè)參數(shù)進(jìn)行修改。數(shù)進(jìn)行修改。()表參數(shù)修改()表參數(shù)修改Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p將一個(gè)非分區(qū)的表移動(dòng)到一個(gè)新的數(shù)據(jù)段中,或者移動(dòng)到其他的表空間中,通過這種操作可以重建表的存儲(chǔ)結(jié)構(gòu),稱為表結(jié)構(gòu)重組。p如果發(fā)現(xiàn)表的數(shù)據(jù)段具有不合理的區(qū)分配方式,但是又不能通過別的方法來進(jìn)行調(diào)整(改變存儲(chǔ)參數(shù)不會(huì)影響到已經(jīng)分配的區(qū)),可以考慮將表移動(dòng)到一個(gè)新的數(shù)據(jù)段中。此外,如果頻繁地對(duì)表進(jìn)行DML操作,會(huì)產(chǎn)生大量空間碎片和行遷移、行連接,可以考慮進(jìn)行表結(jié)構(gòu)重組。()表結(jié)構(gòu)重組()表結(jié)構(gòu)重組O

57、racle10g數(shù)據(jù)庫基礎(chǔ)教程p語法nALTER TABLE tbname MOVE TABLESPACE tbs_name p注意 n直到表被完全移動(dòng)到新的數(shù)據(jù)段中之后,直到表被完全移動(dòng)到新的數(shù)據(jù)段中之后,Oracle才會(huì)才會(huì)刪除原來的數(shù)據(jù)段;刪除原來的數(shù)據(jù)段;n表結(jié)構(gòu)重組后,表中每個(gè)記錄的表結(jié)構(gòu)重組后,表中每個(gè)記錄的ROWID會(huì)發(fā)生變化,會(huì)發(fā)生變化,因此該表的所有索引失效,需要重新建立索引;因此該表的所有索引失效,需要重新建立索引;n如果表中包含如果表中包含LOB列,則默認(rèn)情況下不移動(dòng)列,則默認(rèn)情況下不移動(dòng)LOB列數(shù)列數(shù)據(jù)和據(jù)和LOB索引段。索引段。Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p語法n

58、ALTER TABLE old_name RENAME TO new_name;nRENAME old_name TO new_name; p說明n表重命名后,表重命名后,Oracle會(huì)自動(dòng)將舊表上的對(duì)象會(huì)自動(dòng)將舊表上的對(duì)象權(quán)限、約束條件等轉(zhuǎn)換到新表上,但是所有權(quán)限、約束條件等轉(zhuǎn)換到新表上,但是所有與舊表相關(guān)聯(lián)的對(duì)象都會(huì)失效,需要重新編與舊表相關(guān)聯(lián)的對(duì)象都會(huì)失效,需要重新編譯譯。()表重命名()表重命名Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p為表添加注釋nCOMMENT ON TALBE table_name IS;p為列添加注釋nCOMMENT ON COLUMN table_name.colum

59、n_name IS p注釋可以通過以下數(shù)據(jù)字典來查看.nALL_COL_COMMENTSnUSER_COL_COMMENTSnALL_TAB_COMMENTSnUSER_TAB_COMMENTS()為表和列添加注釋()為表和列添加注釋 Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p語法nDROP TABLE table_namenCASCADE CONSTRAINTSPURGE p刪除一個(gè)表同時(shí),Oracle將執(zhí)行下列操作:n刪除該表中所有記錄;刪除該表中所有記錄;n從數(shù)據(jù)字典中刪除該表定義;從數(shù)據(jù)字典中刪除該表定義;n刪除與該表相關(guān)的所有索引和觸發(fā)器;刪除與該表相關(guān)的所有索引和觸發(fā)器;n回收為該表分配的

60、存儲(chǔ)空間;回收為該表分配的存儲(chǔ)空間;n依賴于該表的數(shù)據(jù)庫對(duì)象處于依賴于該表的數(shù)據(jù)庫對(duì)象處于INVALID狀態(tài)。狀態(tài)。9.2.5刪除表刪除表Oracle10g數(shù)據(jù)庫基礎(chǔ)教程p注意n在在Oracle 10g中,使用中,使用DROP TABLE語句刪除一語句刪除一個(gè)表時(shí),并不立即回收該表的空間,而只是將表及其個(gè)表時(shí),并不立即回收該表的空間,而只是將表及其關(guān)聯(lián)對(duì)象的信息寫入一個(gè)稱為關(guān)聯(lián)對(duì)象的信息寫入一個(gè)稱為“回收站回收站”(RECYCLEBIN)的邏輯容器中,從而可以實(shí)現(xiàn)閃)的邏輯容器中,從而可以實(shí)現(xiàn)閃回刪除表操作。如果要回收該表空間,可以采用清空回刪除表操作。如果要回收該表空間,可以采用清空“回收站

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論