Oracle教程 (第6版)(Oracle 11g版) 課件 第5章 索引與數(shù)據(jù)完整性_第1頁(yè)
Oracle教程 (第6版)(Oracle 11g版) 課件 第5章 索引與數(shù)據(jù)完整性_第2頁(yè)
Oracle教程 (第6版)(Oracle 11g版) 課件 第5章 索引與數(shù)據(jù)完整性_第3頁(yè)
Oracle教程 (第6版)(Oracle 11g版) 課件 第5章 索引與數(shù)據(jù)完整性_第4頁(yè)
Oracle教程 (第6版)(Oracle 11g版) 課件 第5章 索引與數(shù)據(jù)完整性_第5頁(yè)
已閱讀5頁(yè),還剩46頁(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)介

第5章索引與數(shù)據(jù)完整性索

引索引在Oracle11g數(shù)據(jù)庫(kù)中,索引是一種供服務(wù)器在表中快速查找每一行的數(shù)據(jù)庫(kù)結(jié)構(gòu)。在數(shù)據(jù)庫(kù)中建立索引主要有以下作用:(1)快速存取數(shù)據(jù);(2)既可以改善數(shù)據(jù)庫(kù)性能,又可以保證列值的唯一性;(3)實(shí)現(xiàn)表與表之間的參照完整性;(4)在使用ORDERBY子句、GROUPBY子句進(jìn)行數(shù)據(jù)檢索時(shí),利用索引可以減少排序和分組的時(shí)間。01索引的分類(lèi)索引的分類(lèi)(1)索引按存儲(chǔ)方法可以分為兩類(lèi):B*樹(shù)索引和位圖索引。①B*樹(shù)索引。B*樹(shù)索引的存儲(chǔ)結(jié)構(gòu)類(lèi)似圖書(shū)的索引結(jié)構(gòu),有分支和葉塊兩種類(lèi)型,分支塊相當(dāng)于圖書(shū)的大目錄,葉塊相當(dāng)于索引到具體的頁(yè)。Oracle系統(tǒng)用B*樹(shù)(B*-tree)機(jī)制存儲(chǔ)索引條目,以保證用最短路徑訪問(wèn)鍵值。②位圖索引。位圖索引主要用來(lái)節(jié)省空間,減少Oracle系統(tǒng)對(duì)數(shù)據(jù)塊的訪問(wèn)。它采用位圖偏移方式來(lái)與表的行ID號(hào)對(duì)應(yīng)。采用位圖索引一般是在重復(fù)值太多的表字段情況下。索引的分類(lèi)①②③④⑤(2)索引按功能和對(duì)象可分為以下六種類(lèi)型。非唯一索引。非唯一索引是指不對(duì)索引列的值進(jìn)行唯一性限制。分區(qū)索引。分區(qū)索引是指索引可以分散存在于多個(gè)不同的表空間中,其優(yōu)點(diǎn)是能夠提高數(shù)據(jù)查詢的效率。唯一索引。唯一索引意味著不會(huì)有兩行記錄相同的索引鍵值。唯一索引表中的記錄沒(méi)有RowID,所以不能再對(duì)其建立其他索引。未排序索引。未排序索引也稱(chēng)為正向索引。⑥逆序索引。逆序索引也稱(chēng)為反向索引。該索引同樣保持索引列按順序排列,但顛倒了已索引的每列字節(jié)?;诤瘮?shù)的索引?;诤瘮?shù)的索引是指索引中的一列或者多列是一個(gè)函數(shù)或者表達(dá)式,索引根據(jù)函數(shù)或者表達(dá)式計(jì)算索引列的值,并可以將基于函數(shù)的索引創(chuàng)建成為位圖索引。02使用索引的原則使用索引的原則(1)(2)(3)(4)(5)(6)當(dāng)用戶考慮在表中使用索引時(shí),應(yīng)遵循下列一些基本原則。在表中插入數(shù)據(jù)后創(chuàng)建索引。在表中插入數(shù)據(jù)后,創(chuàng)建索引效率將更高。如果在裝載數(shù)據(jù)之前創(chuàng)建索引,那么插入每行時(shí)Oracle系統(tǒng)都必須更改索引。索引正確的表和列。如果經(jīng)常檢索的內(nèi)容少于表中數(shù)據(jù)的15%行,就需要?jiǎng)?chuàng)建索引。為了改善多個(gè)表的相互關(guān)系,常常使用索引列進(jìn)行關(guān)系連接。合理安排索引列。在CREATEINDEX語(yǔ)句中,列的排序會(huì)影響查詢的性能,通常將最常用的列放在前面。限制表中索引的數(shù)量。盡管表可以有任意數(shù)量的索引,但是索引越多,在修改表中的數(shù)據(jù)時(shí)對(duì)索引進(jìn)行相應(yīng)更改的工作量越大,效率也就越低。指定索引數(shù)據(jù)塊空間。創(chuàng)建索引時(shí),索引數(shù)據(jù)塊是用表中現(xiàn)存值填充的,達(dá)到PCTREE時(shí)為止。根據(jù)索引大小設(shè)置存儲(chǔ)參數(shù)。創(chuàng)建索引之前應(yīng)先估計(jì)索引的大小,以便更好地規(guī)劃和管理磁盤(pán)空間。03創(chuàng)建索引1.以界面方式創(chuàng)建索引2.以命令方式創(chuàng)建索引創(chuàng)建索引1.以界面方式創(chuàng)建索引以XSB表的“姓名”列創(chuàng)建索引為例,使用SQLDeveloper創(chuàng)建索引的操作過(guò)程如下。(1)啟動(dòng)SQLDeveloper,右擊要?jiǎng)?chuàng)建索引的XSB表,選擇“索引”的“創(chuàng)建索引”選項(xiàng),如圖。創(chuàng)建索引(2)在彈出的“創(chuàng)建索引”窗口中創(chuàng)建索引,如圖。創(chuàng)建索引(3)所有選項(xiàng)設(shè)置完后,單擊“確定”按鈕完成索引的創(chuàng)建,然后單擊XSB表,在“索引”選項(xiàng)頁(yè)中可以看到新創(chuàng)建的索引XSB_NAME_INDEX,如圖。創(chuàng)建索引2.以命令方式創(chuàng)建索引使用SQL命令可以靈活方便地創(chuàng)建索引。在使用SQL命令創(chuàng)建索引時(shí),必須滿足下列條件之一。索引的表或簇必須在自己的模式中;必須在要索引的表上具有INDEX權(quán)限;必須具有CREATEANYINDEX權(quán)限。語(yǔ)法格式為:CREATE[UNIQUE∣BITMAP]INDEX /*索引類(lèi)型*/ [用戶方案名.]索引名 ON表名(列名|列名表達(dá)式[ASC∣DESC][,…n])[LOGGING|NOLOGGING] /*指定是否創(chuàng)建相應(yīng)的日志記錄*/[COMPUTESTATISTICS] /*生成統(tǒng)計(jì)信息*/[COMPAESS|NOCOMPRESS] /*對(duì)復(fù)合索引進(jìn)行壓縮*/[TABLESPACE表空間名] /*索引所屬表空間*/[SORT|NOSORT] /*指定是否對(duì)表進(jìn)行排序*/[REVERSE]創(chuàng)建索引相關(guān)參數(shù)說(shuō)明如下。(1)UNIQUE:指定索引所基于的列(或多列)值必須唯一。默認(rèn)索引是非唯一索引。(2)BITMAP:指定創(chuàng)建位圖索引而不是B*索引。(3)用戶方案名:表示包含索引的方案。(4)ON子句:在指定表的列中創(chuàng)建索引,ASC和DESC分別表示升序索引和降序索引。(5)列名表達(dá)式:用指定表的列、常數(shù)、SQL函數(shù)和自定義函數(shù)創(chuàng)建的表達(dá)式,用于創(chuàng)建基于函數(shù)的索引。(6)LOLOGGING|NOLOGGING:LOGGING選項(xiàng)規(guī)定在創(chuàng)建索引時(shí),應(yīng)創(chuàng)建相應(yīng)的日志記錄,NOGGING選項(xiàng)則表示創(chuàng)建索引時(shí)不產(chǎn)生重做日志信息,默認(rèn)為L(zhǎng)OGGING。(7)COMPUTESTATISTICS:表示在創(chuàng)建索引時(shí)直接生成索引的統(tǒng)計(jì)信息,這樣可以避免以后對(duì)索引進(jìn)行分析操作。(8)COMPAESS|NOCOMPRESS:對(duì)于復(fù)合索引,如果指定了COMPRESS選項(xiàng),則可以在創(chuàng)建索引時(shí)對(duì)重復(fù)的索引值進(jìn)行壓縮,以節(jié)省索引的存儲(chǔ)空間,但對(duì)索引進(jìn)行壓縮后將會(huì)影響索引的使用效率,其默認(rèn)為NOCOMPRESS。(9)SORT|NOSORT:默認(rèn)情況下,Oracle系統(tǒng)在創(chuàng)建索引時(shí)會(huì)對(duì)表中的記錄進(jìn)行排序,如果表中的記錄已經(jīng)按照順序排序,則可指定NOSORT選項(xiàng),這樣可以省略創(chuàng)建索引時(shí)對(duì)表進(jìn)行的排序操作,加快索引的創(chuàng)建速度。(10)REVERSE:指定以反序索引塊的字節(jié),不包含行標(biāo)識(shí)符。創(chuàng)建索引【例5.1】

為KCB表的課程名列創(chuàng)建索引。CREATEINDEXkcb_name_idx ONkcb(課程名);執(zhí)行結(jié)果如圖。創(chuàng)建索引【例5.2】

根據(jù)XSB表的姓名列和出生時(shí)間列創(chuàng)建復(fù)合索引。CREATEINDEXxsb_ind ONxsb(姓名,出生時(shí)間);執(zhí)行結(jié)果如圖。04維護(hù)索引1.以界面方式維護(hù)索引2.以命令方式維護(hù)索引維護(hù)索引1.以界面方式維護(hù)索引右擊XSB表選擇“編輯”選項(xiàng),在“編輯表”窗口左邊選擇“索引”選項(xiàng),并在中間“索引”框中選中要維護(hù)的索引,在右邊“索引屬性”組中修改索引的信息,單擊“確定”按鈕后完成修改,如圖。維護(hù)索引2.以命令方式維護(hù)索引使用ALTERINDEX命令維護(hù)索引必須在操作者自己的模式中,或者操作者擁有ALTERANYINDEX系統(tǒng)權(quán)限。ALTERINDEX語(yǔ)句的語(yǔ)法格式為:ALTERINDEX[用戶方案名.]索引名[LOGGING|NOLOGGING][TABLESPACE表空間名][SORT|NOSORT][REVERSE][RENAMETO新索引名]【例5.3】

重命名索引kcb_name_idx。ALTERINDEXkcb_name_idx RENAMETOkcb_idx;執(zhí)行結(jié)果如圖。05刪除索引1.以界面方式刪除索引2.以命令方式刪除索引刪除索引1.以界面方式刪除索引在SQLDeveloper中,右擊索引所在的表,選擇“索引”的“刪除”選項(xiàng),在彈出的“刪除”窗口中選擇要?jiǎng)h除的索引,如圖所示,單擊“應(yīng)用”按鈕即可。刪除索引2.以命令方式刪除索引語(yǔ)法格式為:DROPINDEX[用戶方案名.]索引名【例5.4】

刪除XSCJ數(shù)據(jù)庫(kù)中XSB表的復(fù)合索引XSB_ind。DROPINDEXxsb_ind;第5章索引與數(shù)據(jù)完整性數(shù)據(jù)完整性數(shù)據(jù)完整性例如,假設(shè)在KCB表的“開(kāi)課學(xué)期”列上定義了完整性約束,要求該列的值只能是1~8。當(dāng)INSERT語(yǔ)句或者UPDATE語(yǔ)句向該列插入大于8的值,則Oracle系統(tǒng)將回滾語(yǔ)句,并返回錯(cuò)誤信息。使用完整性約束有以下優(yōu)勢(shì):(1)在數(shù)據(jù)庫(kù)應(yīng)用的代碼中增強(qiáng)了商業(yè)規(guī)則;(2)使用存儲(chǔ)過(guò)程,可完整控制對(duì)數(shù)據(jù)的訪問(wèn);(3)增強(qiáng)了觸發(fā)存儲(chǔ)數(shù)據(jù)庫(kù)過(guò)程的商業(yè)規(guī)則。在定義完整性約束時(shí),一般使用SQL語(yǔ)句。當(dāng)定義和修改完整性約束時(shí),不需要額外編程。SQL語(yǔ)句很容易編寫(xiě),可減少編程錯(cuò)誤,Oracle系統(tǒng)能夠控制其功能。01數(shù)據(jù)完整性的分類(lèi)

1.域完整性2.實(shí)體完整性3.參照完整性4.完整性約束的狀態(tài)數(shù)據(jù)完整性的分類(lèi)

1.域完整性域完整性又稱(chēng)列完整性,指一個(gè)數(shù)據(jù)集對(duì)某一個(gè)列是否有效和確定是否允許空值。域完整性通常是使用有效性檢查來(lái)實(shí)現(xiàn)的,還可以通過(guò)限制數(shù)據(jù)類(lèi)型、格式或者可能的取值范圍來(lái)實(shí)現(xiàn)。例如,對(duì)于數(shù)據(jù)庫(kù)XSCJ的KCB表,課程的學(xué)分應(yīng)在0~10分,為了對(duì)學(xué)分這一數(shù)據(jù)項(xiàng)輸入的數(shù)據(jù)范圍進(jìn)行限制,可以在定義KCB表的同時(shí)定義學(xué)分列的約束條件以達(dá)到此目的。2.實(shí)體完整性實(shí)體完整性又稱(chēng)行完整性,要求表中的每一行都有一個(gè)唯一的標(biāo)識(shí)符,這個(gè)標(biāo)識(shí)符就是主關(guān)鍵字,如居民身份證號(hào)是唯一的,這樣才能唯一地確定某一個(gè)人。通過(guò)索引、UNIQUE約束、PRIMARYKEY約束可實(shí)現(xiàn)數(shù)據(jù)的實(shí)體完整性。數(shù)據(jù)完整性的分類(lèi)

3.參照完整性主鍵是指在表中能唯一標(biāo)識(shí)表的每個(gè)數(shù)據(jù)行的一個(gè)或多個(gè)表列。外鍵是指如果一個(gè)表中的一個(gè)或若干個(gè)字段的組合是另一個(gè)表的主鍵,則稱(chēng)該字段或字段組合為該表的外鍵。例如,對(duì)于XSCJ數(shù)據(jù)庫(kù)中XSB表的每一個(gè)學(xué)號(hào),在CJB表中都有相關(guān)的課程成績(jī)記錄,將XSB作為主表,“學(xué)號(hào)”字段定義為主鍵,CJB作為從表,表中的“學(xué)號(hào)”字段定義為外鍵,從而建立主表和從表之間的聯(lián)系實(shí)現(xiàn)參照完整性。XSB和CJB表的對(duì)應(yīng)關(guān)系如表。數(shù)據(jù)完整性的分類(lèi)

一旦定義了兩個(gè)表之間的參照完整性,則有如下要求。(1)從表不能引用不存在的鍵值。例如,對(duì)于CJB表中行記錄出現(xiàn)的學(xué)號(hào)必須是XSB表中已存在的學(xué)號(hào)。如果主表中的鍵值更改了,那么在整個(gè)數(shù)據(jù)庫(kù)中,對(duì)從表中該鍵值的所有引用都要進(jìn)行一致的更改。如果主表中沒(méi)有關(guān)聯(lián)的記錄,則不能將記錄添加到從表中。如果要?jiǎng)h除主表中的某條記錄,應(yīng)先刪除從表中與該記錄匹配的相關(guān)記錄。(2)(3)(4)數(shù)據(jù)完整性的分類(lèi)

完整性約束是通過(guò)限制列數(shù)據(jù)、行數(shù)據(jù)和表之間數(shù)據(jù)來(lái)保證數(shù)據(jù)完整性的有效方法,約束是保證數(shù)據(jù)完整性的標(biāo)準(zhǔn)方法,每一種數(shù)據(jù)完整性類(lèi)型都可以由不同的約束類(lèi)型來(lái)保障,約束能確保有效的數(shù)據(jù)輸入到列中并維護(hù)表與表之間的關(guān)系,如表。約束類(lèi)型描述NOTNULL指定表中某個(gè)列不允許空值,必須為該列提供值UNIQUE使某個(gè)列或某些列的組合唯一,防止出現(xiàn)冗余值PRIMARYKEY使某個(gè)列或某些列的組合唯一,也是表的主關(guān)鍵字FOREIGNKEY使某個(gè)列或某些列為外關(guān)鍵字,其值與本表或者另表的主關(guān)鍵字匹配,實(shí)現(xiàn)引用完整性CHECK指定表中的每一行數(shù)據(jù)必須滿足的條件數(shù)據(jù)完整性的分類(lèi)

4.完整性約束的狀態(tài)在Oracle系統(tǒng)中,完整性約束有四種狀態(tài)。(1)(2)(3)(4)禁止的非校驗(yàn)狀態(tài)。表示該約束是不起作用的,即使該約束定義依然存儲(chǔ)在數(shù)據(jù)字典中。禁止的校驗(yàn)狀態(tài)。表示對(duì)約束列的任何修改都是禁止的。這時(shí)該約束上的索引都被刪除,約束也被禁止,但仍然可以向表中有效地添加數(shù)據(jù),即使這些數(shù)據(jù)與約束有沖突也沒(méi)關(guān)系。允許的非校驗(yàn)狀態(tài)或強(qiáng)制狀態(tài)。該狀態(tài)可以向表中添加數(shù)據(jù),但是與約束有沖突的數(shù)據(jù)不能添加。允許的校驗(yàn)狀態(tài)。表示約束處于正常的狀態(tài)。這時(shí)表中所有數(shù)據(jù)(無(wú)論是已有的還是新添加的)都必須滿足約束條件。02域完整性的實(shí)現(xiàn)

1.以界面方式操作CHECK約束2.以命令方式操作CHECK約束域完整性的實(shí)現(xiàn)

1.以界面方式操作CHECK約束在XSCJ數(shù)據(jù)庫(kù)的CJB表中,學(xué)生每門(mén)功課的成績(jī)?yōu)?~100分,如果對(duì)用戶的輸入數(shù)據(jù)施加這個(gè)限制,則需要?jiǎng)?chuàng)建CHECK約束,其操作過(guò)程如下。右擊CJB表,選擇“約束條件”的“添加檢查”選項(xiàng),如圖,彈出“添加檢查”窗口,在“約束條件名稱(chēng)”欄中輸入約束名CH_CJ,并在“檢查條件”欄中輸入CHECK約束的條件“成績(jī)>=0AND成績(jī)<=100”,完成后單擊“應(yīng)用”按鈕完成CHECK約束的創(chuàng)建。域完整性的實(shí)現(xiàn)

如果要修改或刪除已經(jīng)創(chuàng)建的CHECK約束,可右擊CJB表選擇“編輯”選項(xiàng),進(jìn)入“檢查約束條件”選項(xiàng)頁(yè)面中,如圖。域完整性的實(shí)現(xiàn)

2.以命令方式操作CHECK約束(1)在創(chuàng)建表時(shí)創(chuàng)建約束語(yǔ)法格式為:CREATETABLE表名( 列名數(shù)據(jù)類(lèi)型[DEFAULT默認(rèn)值][NOTNULL|NULL] [CONSTRAINTCHECK約束名]CHECK(CHECK約束表達(dá)式) /*定義為列的約束*/ [,…n] [CONSTRAINTCHECK約束名]CHECK(CHECK約束表達(dá)式) /*定義為表的約束*/)域完整性的實(shí)現(xiàn)

【例5.5】

定義kcb2表,同時(shí)定義其“學(xué)分”列的約束條件。CREATETABLEkcb2(

課程號(hào) char(3) NOTNULL,

課程名 char(16) NOTNULL,

開(kāi)課學(xué)期 number(1) NULL,

學(xué)時(shí) number(2) NULL,

學(xué)分 number(1) CHECK(學(xué)分>=0AND學(xué)分<=10)NOTNULL /*定義為列的約束*/);執(zhí)行結(jié)果如圖。域完整性的實(shí)現(xiàn)

【例5.6】

在XSCJ數(shù)據(jù)庫(kù)中創(chuàng)建books表,其中包含所有的約束定義。CREATETABLEbooks( book_id number(10), book_name varchar2(50) NOTNULL, book_desc varchar2(50) DEFAULT'Newbook', max_lvl number(3,2) NOTNULL, trade_price number(4,1) NOTNULL, CONSTRAINTch_costCHECK(max_lvl<=250) /*定義為表的約束*/);執(zhí)行結(jié)果如圖。域完整性的實(shí)現(xiàn)

(2)在修改表時(shí)創(chuàng)建約束語(yǔ)法格式為:ALTERTABLE表名 ADD(CONSTRAINTCHECK約束名CHECK(CHECK約束表達(dá)式))說(shuō)明:ADDCONSTRAINT表示在已定義的表中增加一個(gè)約束定義。【例5.7】通過(guò)修改XSCJ數(shù)據(jù)庫(kù)的books表,增加trade_price(批發(fā)價(jià))字段的CHECK約束。ALTERTABLEbooks ADD(CONSTRAINTch_priceCHECK(trade_price<=250));執(zhí)行結(jié)果如圖。域完整性的實(shí)現(xiàn)

(3)刪除約束語(yǔ)法格式為:ALTERTABLE表名 DROPCONSTRAINTCHECK約束名說(shuō)明:該語(yǔ)句在指定的表中,刪除名為指定名稱(chēng)的CHECK約束?!纠?.8】

刪除XSCJ數(shù)據(jù)庫(kù)的books表中“批發(fā)價(jià)”字段的CHECK約束。ALTERTABLEbooks DROPCONSTRAINTch_price;03實(shí)體完整性的實(shí)現(xiàn)1.以界面方式操作主鍵及唯一約束2.命令方式操作主鍵及唯一約束實(shí)體完整性的實(shí)現(xiàn)1.以界面方式操作主鍵及唯一約束使用SQLDeveloper創(chuàng)建和刪除PRIMARYKEY約束的方法:右擊要?jiǎng)?chuàng)建約束的表,選擇“編輯”選項(xiàng),并在“編輯表”窗口中選擇“主鍵”選項(xiàng),在右邊頁(yè)面中選擇要添加或刪除的主鍵列,如圖。實(shí)體完整性的實(shí)現(xiàn)創(chuàng)建和刪除UNIQUE約束的方法:在“編輯表”窗口中選擇“唯一約束條件”選項(xiàng),單擊窗口右側(cè)的“添加”按鈕,在“名稱(chēng)”欄中填寫(xiě)UNIQUE約束的名稱(chēng),在“可用列”欄中選擇要添加UNIQUE約束的列后,單擊按鈕,將其添加到“所選列”欄中,單擊“確定”按鈕完成添加,如圖。實(shí)體完整性的實(shí)現(xiàn)2.命令方式操作主鍵及唯一約束(1)創(chuàng)建表的同時(shí)創(chuàng)建約束語(yǔ)法格式為:CREATETABLE表名 /*指定表名*/ (列名數(shù)據(jù)類(lèi)型[NULL|NOTNULL] /*定義字段*/ {[CONSTRAINT約束名] /*定義約束名*/ PRIMARYKEY|UNIQUE} /*定義約束類(lèi)型*/ [,…n] [,[CONSTRAINT約束名]{PRIMARYKEY|UNIQUE}(列名,[,…n])]])在上面語(yǔ)法中,通過(guò)關(guān)鍵字PRIMARYKEY、UNIQUE指定所創(chuàng)建的約束類(lèi)型。實(shí)體完整性的實(shí)現(xiàn)【例5.9】

對(duì)XSCJ數(shù)據(jù)庫(kù)的XSB2表中“學(xué)號(hào)”字段創(chuàng)建PRIMARYKEY約束,并對(duì)“身份證號(hào)”字段定義UNIQUE約束。CREATETABLExsb2(

學(xué)號(hào) char(6) NOTNULLCONSTRAINTPK_XHPRIMARYKEY,

姓名 char(8) NOTNULL,

身份證號(hào) char(20) NOTNULLCONSTRAINTUN_IDUNIQUE,

性別 char(2) DEFAULT'1'NOTNULL,

出生時(shí)間 date NOTNULL,

專(zhuān)業(yè) char(12) NULL,

總學(xué)分 number(2) NULL,

備注 varchar2(200) NULL);執(zhí)行結(jié)果如圖。實(shí)體完整性的實(shí)現(xiàn)(2)通過(guò)修改表來(lái)創(chuàng)建約束語(yǔ)法格式為:ALTERTABLE表名 ADD([CONSTRAINT約束名]{PRIMARYKEY|UNIQUE}(列名[,…n])說(shuō)明:ADDCONSTRAINT表示對(duì)指定表增加一個(gè)約束,約束類(lèi)型為PRIMARYKEY或UNIQE?!纠?.10】

先在XSCJ數(shù)據(jù)庫(kù)中創(chuàng)建XSB3表,然后通過(guò)修改表,對(duì)“學(xué)號(hào)”字段創(chuàng)建PRIMARYKEY約束,對(duì)“身份證號(hào)”字段創(chuàng)建UNIQUE約束。CREATETABLExsb3(

學(xué)號(hào) char(6) NOTNULL,

姓名 char(8) NOTNULL,

身份證號(hào)char(20) NOTNULL,

性別 char(2) DEFAULT'1'NOTNULL,

出生時(shí)間date NOTNULL,

專(zhuān)業(yè) char(12) NULL,

總學(xué)分 number(2)NULL,

備注 varchar2(200)NULL);ALTERTABLExsb3 ADD(PRIMARYKEY(學(xué)號(hào)));ALTERTABLExsb3 ADD(CONSTRAINTUN_XSUNIQUE(身份證號(hào)));執(zhí)行結(jié)果如圖。實(shí)體完整性的實(shí)現(xiàn)(3)刪除約束刪除PRIMARYKEY或UNIQUE約束主要通過(guò)ALTERTABLE語(yǔ)句的DROP子句進(jìn)行。語(yǔ)法格式為:ALTERTABLE表名 DROPCONSTRAINT約束名[,…n];【例5.11】

刪除XSB3的UN_XS約束。ALTERTABLExsb3 DROPCONSTRAINTUN_XS;04參照完整性的實(shí)現(xiàn)1.以界面方式操作表間的參照關(guān)系2.以命令方式操作表間的參照關(guān)系參照完整性的實(shí)現(xiàn)1.以界面方式操作表間的參照關(guān)系例如,建立XSB表和CJB表之間的參照完整性,其操作步驟如下。選擇CJB表,右擊選擇“編輯”選項(xiàng),并在“編輯表”窗口中選擇“外鍵”選項(xiàng),如圖。參照完整性的實(shí)現(xiàn)2.以命令方式操作表間的參照關(guān)系創(chuàng)建主鍵(PRMARYKEY約束)的方法已介紹了,在此將介紹通過(guò)SQL命令創(chuàng)建外鍵的方法。(1)在創(chuàng)建表的同時(shí)定義外鍵約束語(yǔ)法格式為:CREATETABLE從表名( 列定義[CONSTRAINT約束名]REFERENCES主表名[(列名[,...n])] [,…n] [[CONSTRAINT約束名][FOREIGNKEY(列名[,...n])[參照表達(dá)式]]);其中:參照表達(dá)式::= REFERENCES主表名[(列名[,...n])] [ONDELETE{CASCADE|SETNULL}]參照完整性的實(shí)現(xiàn)定義外鍵時(shí)還可以指定如下兩種參照動(dòng)作:ONDELETECASCADE表示從主表刪除數(shù)據(jù)時(shí)自動(dòng)刪除從表中匹配的行;ONDELETESETNULL表示從主表刪除數(shù)據(jù)時(shí),設(shè)置從表

溫馨提示

  • 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)論