數據庫系統概論 王珊-5版-第5章_數據庫完整性_第1頁
數據庫系統概論 王珊-5版-第5章_數據庫完整性_第2頁
數據庫系統概論 王珊-5版-第5章_數據庫完整性_第3頁
數據庫系統概論 王珊-5版-第5章_數據庫完整性_第4頁
數據庫系統概論 王珊-5版-第5章_數據庫完整性_第5頁
已閱讀5頁,還剩68頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

7、完整性nCREATE TABLE中用中用PRIMARY KEY定義定義v單屬性構成的碼有兩種說明方法單屬性構成的碼有兩種說明方法 n定義為列級約束條件定義為列級約束條件n定義為表級約束條件定義為表級約束條件v對多個屬性構成的碼只有一種說明方法對多個屬性構成的碼只有一種說明方法n定義為表級約束條件定義為表級約束條件 An Introduction to Database System實體完整性定義實體完整性定義(續續)例例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實體完整性定義實體完整性定義(續續)(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實體完整性定義實體完整性定義(續續)例例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插入或對主碼列進行更新操作時,關系數據庫管理插入或對主碼列進行更新操作時,關系數據庫管理系統按照實體完整性規則自動進行檢查。包括:系統按照實體完整性規則自動進行檢查。包括:n檢查主碼值是否唯一,如果不唯一則拒絕插入或修改檢查主碼值是否唯一,如果不唯一則拒絕插入或修改n檢查主碼的各個屬性是否為空,只要有一個為空就拒絕檢查主碼的各個屬性是否為空,只要有一個為空就拒絕插入或修改插入或修改An Introduction to Database System實體完整性檢查和違約處理實體

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

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

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

14、LE中用中用FOREIGN KEY短語定義哪些短語定義哪些列為外碼列為外碼n用用REFERENCES短語指明這些外碼參照哪些表的主碼短語指明這些外碼參照哪些表的主碼 An Introduction to Database System參照完整性定義參照完整性定義(續續)例如,關系例如,關系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一個參照完整性將兩個表中的相應元組聯系起來一個參照完整性將兩個表中的相應元組聯系起來v對被參照表和參照表進行增刪改操作時有可能破對被參照表和參照表進行增刪改操作時有可能破壞參照完整性,必須進行檢查壞參照完整性,必須進行檢查 An Introduction to Database System參照完整性檢查和違約處理參照完整性檢查和違約處理(續續)v例如,對表例如,對表SC和和Student有四種可能破壞參照完整有四種可能破壞參照完整性的情況性的情況 :nSC表中增加一個元

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

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

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

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

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

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

23、參照完整性檢查和違約處理(續續)例例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 /*級聯刪除級聯刪除SC表中相應的元組表中相應的元組*/ ON UPDATE CASCADE, /*級聯更新級聯更新SC表中相應的元組表中相應的元組*/ FOREIGN

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

25、約束命名字句*5.5 域中的完整性限制域中的完整性限制5.6 斷言斷言5.7 觸發器觸發器5.8 小結小結An Introduction to Database System5.3 用戶定義的完整性用戶定義的完整性v用戶定義的完整性是:針對用戶定義的完整性是:針對某一具體應用某一具體應用的數據的數據必須滿足的語義要求必須滿足的語義要求 v關系數據庫管理系統提供了定義和檢驗用戶定義關系數據庫管理系統提供了定義和檢驗用戶定義完整性的機制,不必由應用程序承擔完整性的機制,不必由應用程序承擔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檢查列值是否滿足一個條件表達式(檢查列值是否滿足一個條件表達式(CHECK)An Introduction to Database System屬性上約束條件的定義屬性上約束條件的定義(續續)(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、約束條件的定義(續續)(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、(續續)(3)用用CHECK短語指定列值應該滿足的條件短語指定列值應該滿足的條件 例例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、性上約束條件的定義(續續)例例5.8 SC表的表的Grade的值應該在的值應該在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插入元組或修改屬性的值時,關系數據庫管理系統檢插入元組或修改屬性的值時,關系數據庫管理系統檢查屬性上的約束條件是否被滿足查屬性上的約束條件是否被滿足n如果不滿足則操作被拒絕執行如果不滿足則操作被拒絕執行 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同屬性值限制相比,元組級的限制可以設置不同同屬性值限制相比,元組級的限制可以設置不同屬性之間的取值的相互約束條件屬性之間的取值的相互約束條件 An Introduction to Database System元組上約束條件的定義元組上約束條件的定義(續續)例例5.9當學生的性別是男時,其名字不能以當學生的性別是男時,其名字不能以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=女女成立成立; 當性別是男性時,要通過檢查則名字一定不能以當性別是男性時,要通過檢查則名字一定不能以Ms.打頭打頭A

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

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

36、dent,要求學號在,要求學號在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、束命名子句完整性約束命名子句(續續)2. 修改表中的完整性限制修改表中的完整性限制n使用使用ALTER TABLE語句修改表中的完整性限制語句修改表中的完整性限制例例5.12去掉例去掉例5.10 Student表中對性別的限制。表中對性別的限制。 ALTER TABLE Student DROP CONSTRAINT C4;An Introduction to Database System完整性約束命名子句完整性約束命名子句(續續) 例例5.13 修改表修改表Student中的約束條件,要求學號改為在中的約束條件,要求學號改為在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、章第五章 數據庫完整性數據庫完整性5.1 實體完整性實體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名字句完整性約束命名字句*5.5 域中的完整性限制域中的完整性限制5.6 斷言斷言5.7 觸發器觸發器5.8 小結小結An Introduction to Database System斷言斷言vSQL中,可以使用中,可以使用 CREATE ASSERTION語句,語句,通過聲明性斷言來指定更具一般性的約束。通過聲明性斷言來指定更具一般性的約束。v可以定義涉及多個表的或聚集操作的比較復雜的可以定義涉及多個表的或聚集操作的比較復雜的完整性約束。完整

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

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

42、SELECT count(*) FROM SC GROUP by cno) ); /*此斷言的謂詞,涉及聚集操作此斷言的謂詞,涉及聚集操作count 和分組函數和分組函數group by的的SQL語句語句*/斷言斷言(續續)An Introduction to Database System例例5.20限制每個學期每一門課程最多限制每個學期每一門課程最多60名學生選修名學生選修 首先需要修改首先需要修改SC表的模式,增加一個表的模式,增加一個“學期(學期(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) );斷言斷言(續續)An Introduction to Database System2. 刪除斷言的語句格式為刪除斷言的語句格式為nDROP ASSERTION ;n如果斷言很復雜,則系統在檢測和維護斷言的開銷較如果斷言很復雜,則系統在檢測和維護斷言的開銷較高,這是在使用斷言時應該注意的高,這是在使用斷言時應該注意的斷言斷言(續續)An Introduction to Database System第五章第五章 數據庫完整性數據庫完整性

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

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

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

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

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

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

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

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

52、RDBMS產品觸發器語法各部相同An Introduction to Database System定義觸發器定義觸發器(續續)例例5.21當對表當對表SC的的Grade屬性進行修改時,若分數增加了屬性進行修改時,若分數增加了10%則將此次操作記錄到下面表中:則將此次操作記錄到下面表中: SC_U(Sno,Cno,Oldgrade,Newgrade) 其中其中Oldgrade是修改前的分數,是修改前的分數,Newgrade是修改后的分數。是修改后的分數。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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論