數(shù)據(jù)庫系統(tǒng)概論 王珊-5版-第5章_數(shù)據(jù)庫完整性_第1頁
數(shù)據(jù)庫系統(tǒng)概論 王珊-5版-第5章_數(shù)據(jù)庫完整性_第2頁
數(shù)據(jù)庫系統(tǒng)概論 王珊-5版-第5章_數(shù)據(jù)庫完整性_第3頁
數(shù)據(jù)庫系統(tǒng)概論 王珊-5版-第5章_數(shù)據(jù)庫完整性_第4頁
數(shù)據(jù)庫系統(tǒng)概論 王珊-5版-第5章_數(shù)據(jù)庫完整性_第5頁
已閱讀5頁,還剩68頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、An Introduction to Database System數(shù)據(jù)庫系統(tǒng)概論An Introduction to Database System第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性中國人民大學(xué)信息學(xué)院中國人民大學(xué)信息學(xué)院An Introduction to Database System數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性v數(shù)據(jù)庫的完整性數(shù)據(jù)庫的完整性n數(shù)據(jù)的數(shù)據(jù)的正確性正確性l是指數(shù)據(jù)是符合現(xiàn)實世界語義,反映了當(dāng)前實際狀況的是指數(shù)據(jù)是符合現(xiàn)實世界語義,反映了當(dāng)前實際狀況的n數(shù)據(jù)的數(shù)據(jù)的相容性相容性l是指數(shù)據(jù)庫同一對象在不同關(guān)系表中的數(shù)據(jù)是符合邏輯的是指數(shù)據(jù)庫同一對象在不同關(guān)系表中的數(shù)據(jù)是符合邏輯

2、的例如,例如,l學(xué)生的學(xué)號必須唯一學(xué)生的學(xué)號必須唯一l性別只能是男或女性別只能是男或女l本科學(xué)生年齡的取值范圍為本科學(xué)生年齡的取值范圍為1450的整數(shù)的整數(shù)l學(xué)生所選的課程必須是學(xué)校開設(shè)的課程,學(xué)生所在的院系學(xué)生所選的課程必須是學(xué)校開設(shè)的課程,學(xué)生所在的院系必須是學(xué)校已成立的院系必須是學(xué)校已成立的院系l等等An Introduction to Database System數(shù)據(jù)庫完整性(續(xù))數(shù)據(jù)庫完整性(續(xù))v數(shù)據(jù)的完整性和安全性是兩個不同概念數(shù)據(jù)的完整性和安全性是兩個不同概念n數(shù)據(jù)的完整性數(shù)據(jù)的完整性l防止數(shù)據(jù)庫中存在不符合語義的數(shù)據(jù),也就是防止數(shù)據(jù)庫防止數(shù)據(jù)庫中存在不符合語義的數(shù)據(jù),也就是

3、防止數(shù)據(jù)庫中存在不正確的數(shù)據(jù)中存在不正確的數(shù)據(jù)l防范對象:不合語義的、不正確的數(shù)據(jù)防范對象:不合語義的、不正確的數(shù)據(jù)n數(shù)據(jù)的安全性數(shù)據(jù)的安全性l保護(hù)數(shù)據(jù)庫保護(hù)數(shù)據(jù)庫 防止惡意的破壞和非法的存取防止惡意的破壞和非法的存取l防范對象:非法用戶和非法操作防范對象:非法用戶和非法操作An Introduction to Database System數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性(續(xù)續(xù))v為維護(hù)數(shù)據(jù)庫的完整性,數(shù)據(jù)庫管理系統(tǒng)必須:為維護(hù)數(shù)據(jù)庫的完整性,數(shù)據(jù)庫管理系統(tǒng)必須:1.提供定義完整性約束條件的機(jī)制提供定義完整性約束條件的機(jī)制l完整性約束條件也稱為完整性規(guī)則,是數(shù)據(jù)庫中的數(shù)據(jù)完整性約束條件也稱為完整性規(guī)

4、則,是數(shù)據(jù)庫中的數(shù)據(jù)必須滿足的語義約束條件必須滿足的語義約束條件lSQL標(biāo)準(zhǔn)使用了一系列概念來描述完整性,包括關(guān)系模標(biāo)準(zhǔn)使用了一系列概念來描述完整性,包括關(guān)系模型的實體完整性、參照完整性和用戶定義完整性型的實體完整性、參照完整性和用戶定義完整性l這些完整性一般由這些完整性一般由SQL的數(shù)據(jù)定義語言語句來實現(xiàn)的數(shù)據(jù)定義語言語句來實現(xiàn) An Introduction to Database System數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性(續(xù)續(xù))2.提供完整性檢查的方法提供完整性檢查的方法l數(shù)據(jù)庫管理系統(tǒng)中檢查數(shù)據(jù)是否滿足完整性約束條件的機(jī)制數(shù)據(jù)庫管理系統(tǒng)中檢查數(shù)據(jù)是否滿足完整性約束條件的機(jī)制稱為完整性檢查。

5、稱為完整性檢查。l一般在一般在INSERT、UPDATE、DELETE語句執(zhí)行后開始檢查,語句執(zhí)行后開始檢查,也可以在事務(wù)提交時檢查也可以在事務(wù)提交時檢查 An Introduction to Database System數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性(續(xù)續(xù))3.違約處理違約處理 l數(shù)據(jù)庫管理系統(tǒng)若發(fā)現(xiàn)用戶的操作違背了完整性約束條件,數(shù)據(jù)庫管理系統(tǒng)若發(fā)現(xiàn)用戶的操作違背了完整性約束條件,就采取一定的動作就采取一定的動作 拒絕拒絕(NO ACTION)執(zhí)行該操作執(zhí)行該操作 級連級連(CASCADE)執(zhí)行其他操作執(zhí)行其他操作An Introduction to Database System第五章第五章

6、 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性5.1 實體完整性實體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名字句完整性約束命名字句*5.5 域中的完整性限制域中的完整性限制5.6 斷言斷言5.7 觸發(fā)器觸發(fā)器5.8 小結(jié)小結(jié)An Introduction to Database System5.1 實體完整性實體完整性5.1.1 實體完整性定義實體完整性定義5.1.2 實體完整性檢查和違約處理實體完整性檢查和違約處理An Introduction to Database System5.1.1 實體完整性定義實體完整性定義v關(guān)系模型的實體完整性關(guān)系模型的實體

7、完整性nCREATE TABLE中用中用PRIMARY KEY定義定義v單屬性構(gòu)成的碼有兩種說明方法單屬性構(gòu)成的碼有兩種說明方法 n定義為列級約束條件定義為列級約束條件n定義為表級約束條件定義為表級約束條件v對多個屬性構(gòu)成的碼只有一種說明方法對多個屬性構(gòu)成的碼只有一種說明方法n定義為表級約束條件定義為表級約束條件 An Introduction to Database System實體完整性定義實體完整性定義(續(xù)續(xù))例例5.1 將將Student表中的表中的Sno屬性定義為碼屬性定義為碼 (1)在列級定義主碼在列級定義主碼 CREATE TABLE Student ( Sno CHAR(9)

8、PRIMARY KEY, Sname CHAR(20) NOT NULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) );An Introduction to Database System實體完整性定義實體完整性定義(續(xù)續(xù))(2)在表級定義主碼在表級定義主碼 CREATE TABLE Student ( Sno CHAR(9), Sname CHAR(20) NOT NULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno) ); An Introduction to

9、Database System實體完整性定義實體完整性定義(續(xù)續(xù))例例5.2 將將SC表中的表中的Sno,Cno屬性組定義為碼屬性組定義為碼 CREATE TABLE SC ( Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY (Sno,Cno) /*只能在表級定義主碼只能在表級定義主碼*/ ); An Introduction to Database System5.1 實體完整性實體完整性5.1.1 實體完整性定義實體完整性定義5.1.2 實體完整性檢查和違約處理實體完整性檢查和違約處理An In

10、troduction to Database System5.1.2 實體完整性檢查和違約處理實體完整性檢查和違約處理v插入或?qū)χ鞔a列進(jìn)行更新操作時,關(guān)系數(shù)據(jù)庫管理插入或?qū)χ鞔a列進(jìn)行更新操作時,關(guān)系數(shù)據(jù)庫管理系統(tǒng)按照實體完整性規(guī)則自動進(jìn)行檢查。包括:系統(tǒng)按照實體完整性規(guī)則自動進(jìn)行檢查。包括:n檢查主碼值是否唯一,如果不唯一則拒絕插入或修改檢查主碼值是否唯一,如果不唯一則拒絕插入或修改n檢查主碼的各個屬性是否為空,只要有一個為空就拒絕檢查主碼的各個屬性是否為空,只要有一個為空就拒絕插入或修改插入或修改An Introduction to Database System實體完整性檢查和違約處理實體

11、完整性檢查和違約處理(續(xù)續(xù))v檢查記錄中主碼值是否唯一的一種方法是進(jìn)行檢查記錄中主碼值是否唯一的一種方法是進(jìn)行全表全表掃描掃描n 依次判斷表中每一條記錄的主碼值與將插入記錄上的主碼依次判斷表中每一條記錄的主碼值與將插入記錄上的主碼值(或者修改的新主碼值)是否相同值(或者修改的新主碼值)是否相同 An Introduction to Database System實體完整性檢查和違約處理實體完整性檢查和違約處理(續(xù)續(xù))v 表掃描缺點表掃描缺點n 十分耗時十分耗時v 為避免對基本表進(jìn)行全表掃描,為避免對基本表進(jìn)行全表掃描,RDBMS核心一核心一般都在主碼上自動建立一個般都在主碼上自動建立一個索引索

12、引 An Introduction to Database System實體完整性檢查和違約處理實體完整性檢查和違約處理(續(xù)續(xù))v B+樹索引樹索引例如,例如,n 新插入記錄的主碼值是新插入記錄的主碼值是25l通過主碼索引,從通過主碼索引,從B+樹的根結(jié)點開始查找樹的根結(jié)點開始查找l讀取讀取3個結(jié)點:根結(jié)點(個結(jié)點:根結(jié)點(51)、中間結(jié)點()、中間結(jié)點(12 30)、葉結(jié)點()、葉結(jié)點(15 20 25)l該主碼值已經(jīng)存在,不能插入這條記錄該主碼值已經(jīng)存在,不能插入這條記錄An Introduction to Database System第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性5.1 實體完

13、整性實體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名字句完整性約束命名字句*5.5 域中的完整性限制域中的完整性限制5.6 斷言斷言5.7 觸發(fā)器觸發(fā)器5.8 小結(jié)小結(jié)An Introduction to Database System5.2 參照完整性參照完整性5.2.1 參照完整性定義參照完整性定義5.2.2 參照完整性檢查和違約處理參照完整性檢查和違約處理An Introduction to Database System5.2.1 參照完整性定義參照完整性定義v關(guān)系模型的參照完整性定義關(guān)系模型的參照完整性定義n在在CREATE TAB

14、LE中用中用FOREIGN KEY短語定義哪些短語定義哪些列為外碼列為外碼n用用REFERENCES短語指明這些外碼參照哪些表的主碼短語指明這些外碼參照哪些表的主碼 An Introduction to Database System參照完整性定義參照完整性定義(續(xù)續(xù))例如,關(guān)系例如,關(guān)系SC中(中(Sno,Cno)是主碼。)是主碼。Sno,Cno分別參照分別參照Student表表 的主碼和的主碼和Course表的主碼表的主碼 例例5.3定義定義SC中的參照完整性中的參照完整性 CREATE TABLE SC ( Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NU

15、LL, Grade SMALLINT, PRIMARY KEY (Sno, Cno), /*在表級定義實體完整性在表級定義實體完整性*/ FOREIGN KEY (Sno) REFERENCES Student(Sno), /*在表級定義參照完整性在表級定義參照完整性*/ FOREIGN KEY (Cno) REFERENCES Course(Cno) /*在表級定義參照完整性在表級定義參照完整性*/ );An Introduction to Database System5.2 參照完整性參照完整性5.2.1 參照完整性定義參照完整性定義5.2.2 參照完整性檢查和違約處理參照完整性檢查和違

16、約處理An Introduction to Database System參照完整性檢查和違約處理參照完整性檢查和違約處理v一個參照完整性將兩個表中的相應(yīng)元組聯(lián)系起來一個參照完整性將兩個表中的相應(yīng)元組聯(lián)系起來v對被參照表和參照表進(jìn)行增刪改操作時有可能破對被參照表和參照表進(jìn)行增刪改操作時有可能破壞參照完整性,必須進(jìn)行檢查壞參照完整性,必須進(jìn)行檢查 An Introduction to Database System參照完整性檢查和違約處理參照完整性檢查和違約處理(續(xù)續(xù))v例如,對表例如,對表SC和和Student有四種可能破壞參照完整有四種可能破壞參照完整性的情況性的情況 :nSC表中增加一個元

17、組表中增加一個元組,該元組的,該元組的Sno屬性的值在表屬性的值在表Student中找不到一個元組,其中找不到一個元組,其Sno屬性的值與之相等。屬性的值與之相等。n修改修改SC表中的一個元組表中的一個元組,修改后該元組的,修改后該元組的Sno屬性的值在屬性的值在表表Student中找不到一個元組,其中找不到一個元組,其Sno屬性的值與之相等。屬性的值與之相等。An Introduction to Database System參照完整性檢查和違約處理參照完整性檢查和違約處理(續(xù)續(xù))v例如,對表例如,對表SC和和Student有四種可能破壞參照完整有四種可能破壞參照完整性的情況性的情況 (續(xù))

18、(續(xù)):n從從Student表中刪除一個元組表中刪除一個元組,造成,造成SC表中某些元組的表中某些元組的Sno屬性的值在表屬性的值在表Student中找不到一個元組,其中找不到一個元組,其Sno屬性屬性的值與之相等。的值與之相等。n修改修改Student表中一個元組的表中一個元組的Sno屬性屬性,造成,造成SC表中某些表中某些元組的元組的Sno屬性的值在表屬性的值在表Student中找不到一個元組,其中找不到一個元組,其Sno屬性的值與之相等屬性的值與之相等 。An Introduction to Database System參照完整性檢查和違約處理參照完整性檢查和違約處理(續(xù)續(xù))表表5.1

19、 可能破壞參照完整性的情況及違約處理可能破壞參照完整性的情況及違約處理被參照表(例如被參照表(例如Student)參照表(例如參照表(例如SC)違約處理違約處理可能破壞參照完整性可能破壞參照完整性 插入元組插入元組拒絕拒絕可能破壞參照完整性可能破壞參照完整性 修改外碼值修改外碼值拒絕拒絕刪除元組刪除元組 可能破壞參照完整性可能破壞參照完整性拒絕拒絕/級連刪除級連刪除/設(shè)置為設(shè)置為空值空值修改主碼值修改主碼值 可能破壞參照完整性可能破壞參照完整性拒絕拒絕/級連修改級連修改/設(shè)置為設(shè)置為空值空值A(chǔ)n Introduction to Database System參照完整性檢查和違約處理參照完整性檢

20、查和違約處理(續(xù)續(xù))v參照完整性違約處理參照完整性違約處理(1) 拒絕拒絕(NO ACTION)執(zhí)行執(zhí)行l(wèi)不允許該操作執(zhí)行。該策略一般設(shè)置為默認(rèn)策略不允許該操作執(zhí)行。該策略一般設(shè)置為默認(rèn)策略(2) 級聯(lián)級聯(lián)(CASCADE)操作操作l當(dāng)刪除或修改被參照表當(dāng)刪除或修改被參照表(Student)的一個元組造成了的一個元組造成了與參照表與參照表(SC)的不一致,則刪除或修改參照表中的所的不一致,則刪除或修改參照表中的所有造成不一致的元組有造成不一致的元組(3)設(shè)置為空值()設(shè)置為空值(SET-NULL)l當(dāng)刪除或修改被參照表的一個元組時造成了不一致,則當(dāng)刪除或修改被參照表的一個元組時造成了不一致,則

21、將參照表中的所有造成不一致的元組的對應(yīng)屬性設(shè)置為將參照表中的所有造成不一致的元組的對應(yīng)屬性設(shè)置為空值。空值。An Introduction to Database System參照完整性檢查和違約處理參照完整性檢查和違約處理(續(xù)續(xù))例如,有下面例如,有下面2個關(guān)系個關(guān)系 學(xué)生(學(xué)生(學(xué)號學(xué)號,姓名,性別,專業(yè)號,年齡),姓名,性別,專業(yè)號,年齡) 專業(yè)(專業(yè)(專業(yè)號專業(yè)號,專業(yè)名),專業(yè)名)l假設(shè)專業(yè)表中某個元組被刪除,專業(yè)號為假設(shè)專業(yè)表中某個元組被刪除,專業(yè)號為12l按照設(shè)置為空值的策略,就要把學(xué)生表中專業(yè)號按照設(shè)置為空值的策略,就要把學(xué)生表中專業(yè)號=12的所有的所有元組的專業(yè)號設(shè)置為空值元

22、組的專業(yè)號設(shè)置為空值l對應(yīng)語義:某個專業(yè)刪除了,該專業(yè)的所有學(xué)生專業(yè)未定,對應(yīng)語義:某個專業(yè)刪除了,該專業(yè)的所有學(xué)生專業(yè)未定,等待重新分配專業(yè)等待重新分配專業(yè) 外碼外碼An Introduction to Database System參照完整性檢查和違約處理參照完整性檢查和違約處理(續(xù)續(xù))n對于參照完整性,除了應(yīng)該定義外碼,還應(yīng)定義對于參照完整性,除了應(yīng)該定義外碼,還應(yīng)定義外碼列外碼列是否允許空值是否允許空值 n參見愛課程網(wǎng)數(shù)據(jù)庫系統(tǒng)概論參見愛課程網(wǎng)數(shù)據(jù)庫系統(tǒng)概論5.2節(jié)節(jié)動畫動畫參照完整性參照完整性An Introduction to Database System參照完整性檢查和違約處理

23、參照完整性檢查和違約處理(續(xù)續(xù))例例5.4 顯式說明參照完整性的違約處理示例顯式說明參照完整性的違約處理示例 CREATE TABLE SC ( Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY(Sno,Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno) ON DELETE CASCADE /*級聯(lián)刪除級聯(lián)刪除SC表中相應(yīng)的元組表中相應(yīng)的元組*/ ON UPDATE CASCADE, /*級聯(lián)更新級聯(lián)更新SC表中相應(yīng)的元組表中相應(yīng)的元組*/ FOREIGN

24、KEY (Cno) REFERENCES Course(Cno) ON DELETE NO ACTION /*當(dāng)刪除當(dāng)刪除course 表中的元組造成了與表中的元組造成了與SC表不一致時表不一致時拒絕刪除拒絕刪除*/ ON UPDATE CASCADE /*當(dāng)更新當(dāng)更新course表中的表中的cno時,時,級聯(lián)更新級聯(lián)更新SC表中相應(yīng)的元組表中相應(yīng)的元組*/ );An Introduction to Database System第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性5.1 實體完整性實體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名字句完整性

25、約束命名字句*5.5 域中的完整性限制域中的完整性限制5.6 斷言斷言5.7 觸發(fā)器觸發(fā)器5.8 小結(jié)小結(jié)An Introduction to Database System5.3 用戶定義的完整性用戶定義的完整性v用戶定義的完整性是:針對用戶定義的完整性是:針對某一具體應(yīng)用某一具體應(yīng)用的數(shù)據(jù)的數(shù)據(jù)必須滿足的語義要求必須滿足的語義要求 v關(guān)系數(shù)據(jù)庫管理系統(tǒng)提供了定義和檢驗用戶定義關(guān)系數(shù)據(jù)庫管理系統(tǒng)提供了定義和檢驗用戶定義完整性的機(jī)制,不必由應(yīng)用程序承擔(dān)完整性的機(jī)制,不必由應(yīng)用程序承擔(dān)An Introduction to Database System5.3 用戶定義的完整性用戶定義的完整性5.

26、3.1 屬性上的約束條件屬性上的約束條件5.3.2 元組上的約束條件元組上的約束條件 An Introduction to Database System1. 屬性上約束條件的定義屬性上約束條件的定義vCREATE TABLE時時定義屬性上的約束條件定義屬性上的約束條件n列值非空(列值非空(NOT NULL)n列值唯一(列值唯一(UNIQUE)n檢查列值是否滿足一個條件表達(dá)式(檢查列值是否滿足一個條件表達(dá)式(CHECK)An Introduction to Database System屬性上約束條件的定義屬性上約束條件的定義(續(xù)續(xù))(1)不允許取空值不允許取空值 例例5.5 在定義在定義SC

27、表時,說明表時,說明Sno、Cno、Grade屬性不允屬性不允許取空值。許取空值。 CREATE TABLE SC ( Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT NOT NULL, PRIMARY KEY (Sno, Cno), /* 如果在表級定義實體完整性,隱含了如果在表級定義實體完整性,隱含了Sno,Cno不允許取空值,則在不允許取空值,則在 列級不允許取空值的定義列級不允許取空值的定義 可以不寫可以不寫 * / ); An Introduction to Database System屬性上約束條件的定義屬性上

28、約束條件的定義(續(xù)續(xù))(2)列值唯一列值唯一 例例5.6建立部門表建立部門表DEPT,要求部門名稱,要求部門名稱Dname列取值唯列取值唯一,部門編號一,部門編號Deptno列為主碼列為主碼 CREATE TABLE DEPT ( Deptno NUMERIC(2), Dname CHAR(9) UNIQUE NOT NULL, /*要求要求Dname列值唯一列值唯一, 并且不能取空值并且不能取空值*/ Location CHAR(10), PRIMARY KEY (Deptno) );An Introduction to Database System屬性上約束條件的定義屬性上約束條件的定義

29、(續(xù)續(xù))(3)用用CHECK短語指定列值應(yīng)該滿足的條件短語指定列值應(yīng)該滿足的條件 例例5.7 Student表的表的Ssex只允許取只允許取“男男”或或“女女”。 CREATE TABLE Student ( Sno CHAR(9) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK (Ssex IN (男男,女女), /*性別屬性性別屬性Ssex只允許取只允許取男男或或女女 */ Sage SMALLINT, Sdept CHAR(20) );An Introduction to Database System屬性上約束條件的定義屬

30、性上約束條件的定義(續(xù)續(xù))例例5.8 SC表的表的Grade的值應(yīng)該在的值應(yīng)該在0和和100之間。之間。 CREATE TABLE SC ( Sno CHAR(9) , Cno CHAR(4),Grade SMALLINT CHECK (Grade=0 AND Grade =100), /*Grade取值范圍是取值范圍是0到到100*/ PRIMARY KEY (Sno,Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) );An Introduction to Da

31、tabase Systemv屬性上的約束條件檢查和違約處理屬性上的約束條件檢查和違約處理n插入元組或修改屬性的值時,關(guān)系數(shù)據(jù)庫管理系統(tǒng)檢插入元組或修改屬性的值時,關(guān)系數(shù)據(jù)庫管理系統(tǒng)檢查屬性上的約束條件是否被滿足查屬性上的約束條件是否被滿足n如果不滿足則操作被拒絕執(zhí)行如果不滿足則操作被拒絕執(zhí)行 2. 屬性上的約束條件檢查和違約處理屬性上的約束條件檢查和違約處理An Introduction to Database System5.3 用戶定義的完整性用戶定義的完整性5.3.1 屬性上的約束條件屬性上的約束條件5.3.2 元組上的約束條件元組上的約束條件An Introduction to Dat

32、abase System1. 元組上約束條件的定義元組上約束條件的定義v在在CREATE TABLE時可以用時可以用CHECK短語定義元短語定義元組上的約束條件,即組上的約束條件,即元組級的限制元組級的限制v同屬性值限制相比,元組級的限制可以設(shè)置不同同屬性值限制相比,元組級的限制可以設(shè)置不同屬性之間的取值的相互約束條件屬性之間的取值的相互約束條件 An Introduction to Database System元組上約束條件的定義元組上約束條件的定義(續(xù)續(xù))例例5.9當(dāng)學(xué)生的性別是男時,其名字不能以當(dāng)學(xué)生的性別是男時,其名字不能以Ms.打頭。打頭。 CREATE TABLE Student

33、 ( Sno CHAR(9), Sname CHAR(8) NOT NULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno), CHECK (Ssex=女女 OR Sname NOT LIKE Ms.%) /*定義了元組中定義了元組中Sname和和 Ssex兩個屬性值之間的約束條件兩個屬性值之間的約束條件*/ ); 性別是女性的元組都能通過該項檢查,因為性別是女性的元組都能通過該項檢查,因為Ssex=女女成立成立; 當(dāng)性別是男性時,要通過檢查則名字一定不能以當(dāng)性別是男性時,要通過檢查則名字一定不能以Ms.打頭打頭A

34、n Introduction to Database Systemv元組上的約束條件檢查和違約處理元組上的約束條件檢查和違約處理n插入元組或修改屬性的值時,關(guān)系數(shù)據(jù)庫管理系統(tǒng)檢插入元組或修改屬性的值時,關(guān)系數(shù)據(jù)庫管理系統(tǒng)檢查元組上的約束條件是否被滿足查元組上的約束條件是否被滿足n如果不滿足則操作被拒絕執(zhí)行如果不滿足則操作被拒絕執(zhí)行 2. 元組上約束條件檢查和違約處理元組上約束條件檢查和違約處理An Introduction to Database System第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性5.1 實體完整性實體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5

35、.4 完整性約束命名子句完整性約束命名子句*5.5 域中的完整性限制域中的完整性限制5.6 斷言斷言5.7 觸發(fā)器觸發(fā)器5.8 小結(jié)小結(jié)An Introduction to Database System5.4 完整性約束命名子句完整性約束命名子句1.完整性約束命名子句完整性約束命名子句CONSTRAINT n包括包括NOT NULL、UNIQUE、PRIMARY KEY短語、短語、FOREIGN KEY短語、短語、CHECK短語等短語等An Introduction to Database System完整性約束命名子句完整性約束命名子句(續(xù)續(xù))例例5.10建立學(xué)生登記表建立學(xué)生登記表Stu

36、dent,要求學(xué)號在,要求學(xué)號在9000099999之間,之間,姓名不能取空值,年齡小于姓名不能取空值,年齡小于30,性別只能是,性別只能是“男男”或或“女女”。 CREATE TABLE Student ( Sno NUMERIC(6) CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999), Sname CHAR(20) CONSTRAINT C2 NOT NULL, Sage NUMERIC(3) CONSTRAINT C3 CHECK (Sage = 3000) );An Introduction to Database System完整性約

37、束命名子句完整性約束命名子句(續(xù)續(xù))2. 修改表中的完整性限制修改表中的完整性限制n使用使用ALTER TABLE語句修改表中的完整性限制語句修改表中的完整性限制例例5.12去掉例去掉例5.10 Student表中對性別的限制。表中對性別的限制。 ALTER TABLE Student DROP CONSTRAINT C4;An Introduction to Database System完整性約束命名子句完整性約束命名子句(續(xù)續(xù)) 例例5.13 修改表修改表Student中的約束條件,要求學(xué)號改為在中的約束條件,要求學(xué)號改為在900000999999之間,年齡由小于之間,年齡由小于30改為

38、小于改為小于40n可以先刪除原來的約束條件,再增加新的約束條件可以先刪除原來的約束條件,再增加新的約束條件 ALTER TABLE Student DROP CONSTRAINT C1; ALTER TABLE Student ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999), ALTER TABLE Student DROP CONSTRAINT C3; ALTER TABLE Student ADD CONSTRAINT C3 CHECK(Sage 40);An Introduction to Database System第五

39、章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性5.1 實體完整性實體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名字句完整性約束命名字句*5.5 域中的完整性限制域中的完整性限制5.6 斷言斷言5.7 觸發(fā)器觸發(fā)器5.8 小結(jié)小結(jié)An Introduction to Database System斷言斷言vSQL中,可以使用中,可以使用 CREATE ASSERTION語句,語句,通過聲明性斷言來指定更具一般性的約束。通過聲明性斷言來指定更具一般性的約束。v可以定義涉及多個表的或聚集操作的比較復(fù)雜的可以定義涉及多個表的或聚集操作的比較復(fù)雜的完整性約束。完整

40、性約束。v斷言創(chuàng)建以后,任何對斷言中所涉及的關(guān)系的操斷言創(chuàng)建以后,任何對斷言中所涉及的關(guān)系的操作都會觸發(fā)關(guān)系數(shù)據(jù)庫管理系統(tǒng)對斷言的檢查,作都會觸發(fā)關(guān)系數(shù)據(jù)庫管理系統(tǒng)對斷言的檢查,任何使斷言不為真值的操作都會被拒絕執(zhí)行任何使斷言不為真值的操作都會被拒絕執(zhí)行An Introduction to Database System斷言斷言(續(xù)續(xù))1. 創(chuàng)建斷言的語句格式創(chuàng)建斷言的語句格式n CREATE ASSERTIONn 每個斷言每個斷言都被賦都被賦予一個名字,予一個名字,中的約束中的約束條件與條件與WHERE子句的條件表達(dá)式類似。子句的條件表達(dá)式類似。例例5.18 限制數(shù)據(jù)庫課程最多限制數(shù)據(jù)庫課程

41、最多60名學(xué)生選修名學(xué)生選修CREATE ASSERTION ASSE_SC_DB_NUMCHECK (60 = (select count(*) /*此斷言的謂詞涉及聚集操作此斷言的謂詞涉及聚集操作count的的SQL語句語句*/ From Course,SC Where SC.Cno=Course.Cno and Course.Cname =數(shù)據(jù)庫數(shù)據(jù)庫) );An Introduction to Database System例例5.19限制每一門課程最多限制每一門課程最多60名學(xué)生選修名學(xué)生選修CREATE ASSERTION ASSE_SC_CNUM1CHECK(60 = ALL (

42、SELECT count(*) FROM SC GROUP by cno) ); /*此斷言的謂詞,涉及聚集操作此斷言的謂詞,涉及聚集操作count 和分組函數(shù)和分組函數(shù)group by的的SQL語句語句*/斷言斷言(續(xù)續(xù))An Introduction to Database System例例5.20限制每個學(xué)期每一門課程最多限制每個學(xué)期每一門課程最多60名學(xué)生選修名學(xué)生選修 首先需要修改首先需要修改SC表的模式,增加一個表的模式,增加一個“學(xué)期(學(xué)期(TERM)”屬性屬性 ALTER TABLE SC ADD TERM DATE; 然后,定義斷言:然后,定義斷言: CREATE ASSER

43、TION ASSE_SC_CNUM2 CHECK(60 = ALL (SELECT count(*) FROM SC GROUP by cno,TERM) );斷言斷言(續(xù)續(xù))An Introduction to Database System2. 刪除斷言的語句格式為刪除斷言的語句格式為nDROP ASSERTION ;n如果斷言很復(fù)雜,則系統(tǒng)在檢測和維護(hù)斷言的開銷較如果斷言很復(fù)雜,則系統(tǒng)在檢測和維護(hù)斷言的開銷較高,這是在使用斷言時應(yīng)該注意的高,這是在使用斷言時應(yīng)該注意的斷言斷言(續(xù)續(xù))An Introduction to Database System第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性

44、5.1 實體完整性實體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名字句完整性約束命名字句*5.5 域中的完整性限制域中的完整性限制5.6 斷言斷言5.7 觸發(fā)器觸發(fā)器5.8 小結(jié)小結(jié)An Introduction to Database System觸發(fā)器觸發(fā)器v觸發(fā)器(觸發(fā)器(Trigger)是用戶定義在關(guān)系表上的一類)是用戶定義在關(guān)系表上的一類由由事件驅(qū)動事件驅(qū)動的特殊過程的特殊過程n 觸發(fā)器保存在數(shù)據(jù)庫服務(wù)器中觸發(fā)器保存在數(shù)據(jù)庫服務(wù)器中n任何用戶對表的增、刪、改操作均由服務(wù)器自動激活任何用戶對表的增、刪、改操作均由服務(wù)器自動激活相應(yīng)的觸

45、發(fā)器相應(yīng)的觸發(fā)器n觸發(fā)器可以實施更為復(fù)雜的檢查和操作,具有更精細(xì)觸發(fā)器可以實施更為復(fù)雜的檢查和操作,具有更精細(xì)和更強(qiáng)大的數(shù)據(jù)控制能力和更強(qiáng)大的數(shù)據(jù)控制能力 An Introduction to Database System5.7 觸發(fā)器觸發(fā)器5.7.1 定義觸發(fā)器定義觸發(fā)器 5.7.2 激活觸發(fā)器激活觸發(fā)器 5.7.3 刪除觸發(fā)器刪除觸發(fā)器 An Introduction to Database System5.7.1 定義觸發(fā)器定義觸發(fā)器v CREATE TRIGGER語法格式語法格式 CREATE TRIGGER BEFORE | AFTER ON REFERENCING NEW|OLD

46、 ROW AS FOR EACH ROW | STATEMENT WHEN 觸發(fā)器又叫做事件觸發(fā)器又叫做事件-條件條件-動作(動作(event-condition-action)規(guī)則。)規(guī)則。當(dāng)特定的系統(tǒng)事件發(fā)生時,對規(guī)則的條件進(jìn)行檢查,如果條件成立則執(zhí)當(dāng)特定的系統(tǒng)事件發(fā)生時,對規(guī)則的條件進(jìn)行檢查,如果條件成立則執(zhí)行規(guī)則中的動作,否則不執(zhí)行該動作。規(guī)則中的動作體可以很復(fù)雜,通行規(guī)則中的動作,否則不執(zhí)行該動作。規(guī)則中的動作體可以很復(fù)雜,通常是一段常是一段SQL存儲過程。存儲過程。An Introduction to Database System定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))v定義觸發(fā)器的語法說明

47、定義觸發(fā)器的語法說明(1)表的)表的擁有者擁有者才可以在表上創(chuàng)建觸發(fā)器才可以在表上創(chuàng)建觸發(fā)器(2)觸發(fā)器名)觸發(fā)器名l觸發(fā)器名可以包含模式名,也可以不包含模式名觸發(fā)器名可以包含模式名,也可以不包含模式名l同一模式下,觸發(fā)器名必須是唯一的同一模式下,觸發(fā)器名必須是唯一的l觸發(fā)器名和表名必須在同一模式下觸發(fā)器名和表名必須在同一模式下(3)表名)表名l觸發(fā)器只能定義在基本表上,不能定義在視圖上觸發(fā)器只能定義在基本表上,不能定義在視圖上l當(dāng)基本表的數(shù)據(jù)發(fā)生變化時,將激活定義在該表上相應(yīng)觸當(dāng)基本表的數(shù)據(jù)發(fā)生變化時,將激活定義在該表上相應(yīng)觸 發(fā)事件的觸發(fā)器發(fā)事件的觸發(fā)器An Introduction to

48、 Database System定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))(4)觸發(fā)事件)觸發(fā)事件l觸發(fā)事件可以是觸發(fā)事件可以是INSERT、DELETE或或UPDATE 也可以是這幾個事件的組合也可以是這幾個事件的組合l還可以還可以UPDATE OF,即進(jìn)一步指明修改哪,即進(jìn)一步指明修改哪些列時激活觸發(fā)器些列時激活觸發(fā)器lAFTER/BEFORE是觸發(fā)的時機(jī)是觸發(fā)的時機(jī)AFTER表示在觸發(fā)事件的操作執(zhí)行之后激活觸發(fā)器表示在觸發(fā)事件的操作執(zhí)行之后激活觸發(fā)器BEFORE表示在觸發(fā)事件的操作執(zhí)行之前激活觸發(fā)器表示在觸發(fā)事件的操作執(zhí)行之前激活觸發(fā)器An Introduction to Database Syste

49、m定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))(5)觸發(fā)器類型)觸發(fā)器類型行級觸發(fā)器(行級觸發(fā)器(FOR EACH ROW)語句級觸發(fā)器(語句級觸發(fā)器(FOR EACH STATEMENT) 例如例如,在例在例5.11的的TEACHER表上創(chuàng)建一個表上創(chuàng)建一個AFTER UPDATE觸發(fā)器,觸觸發(fā)器,觸發(fā)事件是發(fā)事件是UPDATE語句:語句: UPDATE TEACHER SET Deptno=5; 假設(shè)表假設(shè)表TEACHER有有1000行行 l 如果是語句級觸發(fā)器,那么執(zhí)行完該語句后,觸發(fā)動作只發(fā)生一次如果是語句級觸發(fā)器,那么執(zhí)行完該語句后,觸發(fā)動作只發(fā)生一次l如果是如果是行級行級觸發(fā)器,觸發(fā)動作將執(zhí)行觸發(fā)

50、器,觸發(fā)動作將執(zhí)行1000次次An Introduction to Database System定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))(6)觸發(fā)條件)觸發(fā)條件l觸發(fā)器被激活時,只有當(dāng)觸發(fā)條件為真時觸發(fā)動作體才執(zhí)行觸發(fā)器被激活時,只有當(dāng)觸發(fā)條件為真時觸發(fā)動作體才執(zhí)行;否則觸發(fā)動作體不執(zhí)行。否則觸發(fā)動作體不執(zhí)行。l如果省略如果省略WHEN觸發(fā)條件,則觸發(fā)動作體在觸發(fā)器激活后觸發(fā)條件,則觸發(fā)動作體在觸發(fā)器激活后立即執(zhí)行立即執(zhí)行An Introduction to Database System定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))(7)觸發(fā)動作體)觸發(fā)動作體l觸發(fā)動作體可以是一個匿名觸發(fā)動作體可以是一個匿名PL/SQ

51、L過程塊過程塊 也可以是對已創(chuàng)建存儲過程的調(diào)用也可以是對已創(chuàng)建存儲過程的調(diào)用l如果是行級觸發(fā)器,用戶都可以在過程體中使用如果是行級觸發(fā)器,用戶都可以在過程體中使用NEW和和OLD引用事件之后的新值和事件之前的舊值引用事件之后的新值和事件之前的舊值l如果是語句級觸發(fā)器,則不能在觸發(fā)動作體中使用如果是語句級觸發(fā)器,則不能在觸發(fā)動作體中使用NEW或或OLD進(jìn)行引用進(jìn)行引用l如果觸發(fā)動作體執(zhí)行失敗,激活觸發(fā)器的事件就會終止執(zhí)行如果觸發(fā)動作體執(zhí)行失敗,激活觸發(fā)器的事件就會終止執(zhí)行,觸發(fā)器的目標(biāo)表或觸發(fā)器可能影響的其他對象不發(fā)生任何,觸發(fā)器的目標(biāo)表或觸發(fā)器可能影響的其他對象不發(fā)生任何變化變化 注意:不同的

52、RDBMS產(chǎn)品觸發(fā)器語法各部相同An Introduction to Database System定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))例例5.21當(dāng)對表當(dāng)對表SC的的Grade屬性進(jìn)行修改時,若分?jǐn)?shù)增加了屬性進(jìn)行修改時,若分?jǐn)?shù)增加了10%則將此次操作記錄到下面表中:則將此次操作記錄到下面表中: SC_U(Sno,Cno,Oldgrade,Newgrade) 其中其中Oldgrade是修改前的分?jǐn)?shù),是修改前的分?jǐn)?shù),Newgrade是修改后的分?jǐn)?shù)。是修改后的分?jǐn)?shù)。CREATE TRIGGER SC_TAFTER UPDATE OF Grade ON SC REFERENCING OLD row AS OldTuple, NEW row AS NewTupleFOR EACH ROW WHEN (NewTuple.Grade = 1.1*OldTuple.Grade) INSERT INTO SC_U(Sno,Cno,OldGrade,NewGrade) VALUES(OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade)An Introduction to Database

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論