資源描述:
《Oracle維護(hù)數(shù)據(jù)完整性.ppt》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、維護(hù)數(shù)據(jù)完整性目標(biāo)完成這一課的學(xué)習(xí)后,您應(yīng)該能達(dá)到下列目標(biāo):實(shí)施數(shù)據(jù)完整性約束維護(hù)完整性約束從數(shù)據(jù)字典獲取約束信息數(shù)據(jù)完整性應(yīng)用程序代碼表數(shù)據(jù)完整性約束數(shù)據(jù)庫觸發(fā)器約束的類型約束NOTNULLUNIQUEPRIMARYKEYFOREIGNKEYCHECK說明指示出列不能包含空值指示一個列或列的組合是唯一的指示一個列或列的組合作為表的主鍵指示一個列或列的組合在引用完整性約束中作為外鍵指定表中的每一行必須滿足的條件約束的狀態(tài)ENABLENOVALIDATE現(xiàn)有數(shù)據(jù)新數(shù)據(jù)DISABLENOVALIDATEDISABLEVA
2、LIDATE==ENABLEVALIDATE約束的狀態(tài)轉(zhuǎn)換規(guī)則除非指定NOVALIDATE,否則ENABLE表示VALIDATE。除非指定VALIDATE,否則DISABLE表示NOVALIDATE。VALIDATE和NOVALIDATE沒有缺省的ENABLE和DISABLE狀態(tài)。當(dāng)唯一鍵或主鍵從DISABLE狀態(tài)轉(zhuǎn)為ENABLE狀態(tài)且沒有現(xiàn)有索引時(shí),將自動創(chuàng)建唯一索引。(如果索引可延遲,則將存在異常。)與此類似,當(dāng)唯一鍵或主鍵從ENABLE轉(zhuǎn)為DISABLE且是使用唯一索引啟用時(shí),則刪除該唯一索引。當(dāng)任何約束從NOVAL
3、IDATE狀態(tài)轉(zhuǎn)為VALIDATE狀態(tài)時(shí),必須檢查所有的數(shù)據(jù)。但是,從VALIDATE轉(zhuǎn)為NOVALIDATE時(shí),將忽略數(shù)據(jù)已經(jīng)過檢查這一事實(shí)。將單個約束從ENABLENOVALIDATE狀態(tài)轉(zhuǎn)為ENABLEVALIDATE狀態(tài)時(shí),并不禁止使用讀取、寫入或其它DDL語句。約束檢查DML語句檢查不可延遲的約束COMMIT檢查可延遲的約束查看約束信息SELECTCONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,STATUS,DEFERRABLE,DEFERRED,VALIDATEDFROM
4、USER_CONSTRAINTS;將約束定義為立即或延遲使用SETCONSTRAINTS:SETCONSTRAINT
5、CONSTRAINTS{constraint
6、ALL}{IMMEDIATE
7、DEFERRED}ALTERSESSION語句還包含將約束設(shè)置為DEFERRED或IMMEDIATE的子句SETCONSTRAINTS。ALTERSESSIONSETCONSTRAINT[S]={IMMEDIATE
8、DEFERRED
9、DEFAULT}約束定義原則主約束和唯一性約束:將索引放在單獨(dú)的表空間中。如果經(jīng)常使用批量加載,請使用
10、非唯一索引。自引用外鍵:在初始加載后定義或啟用外鍵。延遲約束檢查。外鍵注意事項(xiàng)相應(yīng)解決方法目標(biāo)操作刪除父表級聯(lián)約束截?cái)喔副碓谧颖砩蠄?zhí)行DML操作確保包含父鍵的表空間聯(lián)機(jī)使用CASCADECONSTRAINTS子句刪除包含父表的表空間禁用或刪除外鍵約束的定義在創(chuàng)建表的時(shí)候定義在修改表的時(shí)候定義約束的結(jié)構(gòu)columndatatype[CONSTRAINTconstraint]{[NOT]NULL
11、UNIQUE[USINGINDEXindex_clause]
12、PRIMARYKEY[USINGINDEXindex_clause]
13、R
14、EFERENCES[schema.]table[(column)][ONDELETECASCADE]
15、CHECK(condition)}constraint_state:==[NOTDEFERRABLE
16、DEFERRABLE[INITIALLY{IMMEDIATE
17、DEFERRED}]][DISABLE
18、ENABLE[VALIDATE
19、NOVALIDATE]]創(chuàng)建表時(shí)定義約束createtablecreate_table_cons(id1char(10)constraintcts_id_pkprimarykeyDeferra
20、bleInitiallydeferredusingindextablespaceind1_00001,id2varchar2(20))tablespaceusers;修改表時(shí)定義約束altertablecreate_table_consaddconstraintcts_id2_ukunique(id2)deferrableinitiallyimmediateusingindextablespaceind1_00001;啟用約束對于當(dāng)前已有索引的PRIMARYKEY和UNIQUE約束,啟用NOVALIDATE約束比啟用VALI
21、DATE約束要快得多,這是因?yàn)?,如果約束是可延遲的,則不檢查現(xiàn)有數(shù)據(jù)是否違反約束。不要求鎖定表。ENABLENOVALIDATEaltertablecreate_table_consenablenovalidateconstraintcts_id_pk;啟用ENABLENOVALIDAT