資源描述:
《實(shí)現(xiàn)數(shù)據(jù)完整性約束》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用袁寶庫(kù)yuanbaoku@bupt.edu.cn實(shí)現(xiàn)數(shù)據(jù)完整性約束數(shù)據(jù)完整性基本概念實(shí)現(xiàn)聲明完整性實(shí)現(xiàn)過程完整性數(shù)據(jù)完整性基本概念數(shù)據(jù)的完整性是為了防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù)。這些加在數(shù)據(jù)庫(kù)數(shù)據(jù)之上的語(yǔ)義約束條件就是數(shù)據(jù)完整性約束條件。這些約束條件作為表定義的一部分存儲(chǔ)在數(shù)據(jù)庫(kù)中。DBMS檢查數(shù)據(jù)是否滿足完整性條件的機(jī)制就稱為完整性檢查。完整性約束條件的作用對(duì)象列級(jí)約束對(duì)數(shù)據(jù)類型的約束對(duì)數(shù)據(jù)格式的約束對(duì)取值范圍或取值集合的約束對(duì)空值的約束元組約束元組中各個(gè)字段之間的聯(lián)系的約束,如:開始日期小于結(jié)束日期。關(guān)系約束是
2、若干元組之間、關(guān)系之間的聯(lián)系的約束。實(shí)現(xiàn)數(shù)據(jù)完整性的方法一種是在定義表時(shí)聲明數(shù)據(jù)完整性,稱為聲明完整性,另一種是在服務(wù)器端編寫觸發(fā)器來實(shí)現(xiàn),稱為過程完整性。在執(zhí)行對(duì)數(shù)據(jù)的增、刪、改操作時(shí),數(shù)據(jù)庫(kù)管理系統(tǒng)自動(dòng)檢查用戶定義的完整性約束條件。實(shí)現(xiàn)聲明完整性主碼約束每個(gè)表只能有一個(gè)PRIMARYKEY約束;用PRIMARYKEY約束的列取值不能有重復(fù),而且不允許有空值;添加主碼約束的語(yǔ)法格式:ALTERTABLE表名ADD[CONSTRAINT約束名]PRIMARYKEY(<列名>[,…n])實(shí)現(xiàn)聲明完整性例:對(duì)雇員表和工作表添加主碼約束AL
3、TERTABLE雇員表ADDCONSTRAINTPK_EMPPRIMARYKEY(雇員編號(hào))ALTERTABLE工作表ADDCONSTRAINTPK_JOBPRIMARYKEY(工作編號(hào))UNIQUE約束用于限制在一個(gè)列中不能有重復(fù)的值。用在事實(shí)上具有惟一性的屬性列上,比如每個(gè)人的身份證號(hào)碼、駕駛證號(hào)碼等均不能有重復(fù)值。注意:允許有一個(gè)空值;在一個(gè)表中可以定義多個(gè)UNIQUE約束;可以在一個(gè)列或多個(gè)列上定義UNIQUE約束。添加UNIQUE約束添加UNIQUE約束的語(yǔ)法格式為:ALTERTABLE表名ADD[CONSTRAINT約束名
4、]UNIQUE(<列名>[,…n])例.為雇員表的“電話”列添加UNIQUE約束。ALTERTABLE雇員表ADDCONSTRAINTUK_SIDUNIQUE(電話)外碼約束實(shí)現(xiàn)引用完整性。外碼所引用的列必須是有PRIMARYKEY約束或UNIQUE約束的列。添加FOREIGNKEY約束的語(yǔ)法格式為:ALTERTABLE表名ADD[CONSTRAINT約束名]FOREIGNKEY(<列名>)REFERENCES引用表名(<列名>)示例例.為雇員表的工作編號(hào)添加外碼引用約束。ALTERTABLE雇員ADDCONSTRAINTFK_job
5、_idFOREIGNKEY(工作編號(hào))REFERENCES工作表(工作編號(hào))DEFAULT約束用于提供列的默認(rèn)值。只有在向表中插入數(shù)據(jù)時(shí)才檢查DEFAULT約束。添加DEFAULT約束的語(yǔ)法格式為:ALTERTABLE表名ADD[CONSTRAINT約束名]DEFAULT默認(rèn)值FOR列名例.定義雇員表的工資的默認(rèn)值為1000。ALTERTABLE雇員ADDCONSTRAINTDF_SALARYDEFAULT1000FOR工資CHECK約束用于限制列的取值在指定的范圍內(nèi),使數(shù)據(jù)庫(kù)中存放的值都是有意義的。系統(tǒng)在執(zhí)行INSERT語(yǔ)句和UPD
6、ATE語(yǔ)句時(shí)自動(dòng)檢查CHECK約束。CHECK約束可約束同一個(gè)表中多個(gè)列之間的取值關(guān)系。添加CHECK約束的語(yǔ)法格式為:ALTERTABLE表名ADD[CONSTRAINT約束名]CHECK(邏輯表達(dá)式)示例限制雇員的工資必須大于等于200。ALTERTABLE雇員ADDCONSTRAINTCHK_SalaryCHECK(工資>=200)限制工資表的最低工資小于等于最高工資。ALTERTABLE工作ADDCONSTRAINTCHK_Job_SalaryCHECK(最低工資<=最高工資)實(shí)現(xiàn)過程完整性過程完整性是指在服務(wù)器端通過編寫實(shí)現(xiàn)
7、約束的一段代碼來實(shí)現(xiàn)數(shù)據(jù)完整性約束,這段代碼就稱為觸發(fā)器。觸發(fā)器是用編程的方法實(shí)現(xiàn)復(fù)雜的商業(yè)規(guī)則,它可以實(shí)現(xiàn)一般的數(shù)據(jù)完整性約束實(shí)現(xiàn)不了的復(fù)雜的完整性約束。事務(wù)基本概念事務(wù)(Transaction)是作為完整的工作單元執(zhí)行的一系列操作。如果一個(gè)事務(wù)中的所有操作都成功,則事務(wù)成功,其對(duì)數(shù)據(jù)庫(kù)的更改都會(huì)成為永久性的更改。如果事務(wù)中的任何一個(gè)操作失敗,則整個(gè)事務(wù)失敗,其中所完成的操作均被取消,所有對(duì)數(shù)據(jù)的更改均無效。事務(wù)的三種類型自動(dòng)提交事務(wù)每一條對(duì)數(shù)據(jù)的增、刪、改語(yǔ)句都自動(dòng)地構(gòu)成了一個(gè)事務(wù)。顯式事務(wù)是用戶定義的事務(wù),有顯式的開始(BEGI
8、NTRANSACTION)和結(jié)束標(biāo)記(COMMIT(正常結(jié)束)和ROLLBACK(異常結(jié)束))。隱式事務(wù)事務(wù)的開始是隱式的,以前一個(gè)事務(wù)結(jié)束后的第一個(gè)SQL語(yǔ)句作為下一個(gè)事務(wù)的開始,但每個(gè)事務(wù)必須有顯式的結(jié)束標(biāo)記。SQL