數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性課件_第1頁
數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性課件_第2頁
數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性課件_第3頁
數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性課件_第4頁
數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性課件_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫系統(tǒng)概論An Introduction to Database System第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性2/27/20221數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性v數(shù)據(jù)庫的完整性數(shù)據(jù)庫的完整性數(shù)據(jù)的數(shù)據(jù)的正確性正確性和和相容性相容性v數(shù)據(jù)的完整性和安全性是兩個不同概念數(shù)據(jù)的完整性和安全性是兩個不同概念數(shù)據(jù)的完整性數(shù)據(jù)的完整性n防止數(shù)據(jù)庫中存在不符合語義的數(shù)據(jù),也就是防止數(shù)據(jù)庫中存防止數(shù)據(jù)庫中存在不符合語義的數(shù)據(jù),也就是防止數(shù)據(jù)庫中存在不正確的數(shù)據(jù)在不正確的數(shù)據(jù)n防范對象:不合語義的、不正確的數(shù)據(jù)防范對象:不合語義的、不正確

2、的數(shù)據(jù)數(shù)據(jù)的安全性數(shù)據(jù)的安全性n保護數(shù)據(jù)庫防止惡意的破壞和非法的存取保護數(shù)據(jù)庫防止惡意的破壞和非法的存取n防范對象:非法用戶和非法操作防范對象:非法用戶和非法操作2/27/20222數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性(續(xù)續(xù))v為維護數(shù)據(jù)庫的完整性,為維護數(shù)據(jù)庫的完整性,DBMS必須:必須:提供定義完整性約束條件的機制提供定義完整性約束條件的機制提供完整性檢查的方法提供完整性檢查的方法違約處理違約處理2/27/20223數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性5.1 實體完整性實體完整性5.2 參

3、照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名子句完整性約束命名子句*5.5 域中的完整性限制域中的完整性限制5.6 觸發(fā)器觸發(fā)器5.7 小結小結2/27/20224數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.1 實體完整性實體完整性v5.1.1 實體完整性定義實體完整性定義v5.1.2 實體完整性檢查和違約處理實體完整性檢查和違約處理2/27/20225數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.1.1 實體完整性定義實體完整性定義v關系模型的實體完整性關系模型的實體完整性CREATE TABLE中用中用PRIMARY KEY

4、定義定義v單屬性構成的碼有兩種說明方法單屬性構成的碼有兩種說明方法 定義為列級約束條件定義為列級約束條件定義為表級約束條件定義為表級約束條件v對多個屬性構成的碼只有一種說明方法對多個屬性構成的碼只有一種說明方法定義為表級約束條件定義為表級約束條件 2/27/20226數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性實體完整性定義實體完整性定義(續(xù)續(xù)) (1)在列級定義主碼在列級定義主碼 CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) NOT NULL, Ssex CHAR(2) , Sage SMALLINT,

5、 Sdept CHAR(20) );例例1 將將Student表中的表中的Sno屬性定義為碼屬性定義為碼2/27/20227數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性實體完整性定義實體完整性定義(續(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) ); 2/27/20228數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性實體完整性定義實體

6、完整性定義(續(xù)續(xù)) CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY (Sno,Cno) /*只能在表級定義主碼只能在表級定義主碼*/ ); 例例2將將SC表中的表中的Sno,Cno屬性組定義為碼屬性組定義為碼2/27/20229數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.1 實體完整性實體完整性v5.1.1 實體完整性定義實體完整性定義v5.1.2 實體完整性檢查和違約處理實體完整性檢查和違約處理2/27/202210數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)

7、庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.1.2 實體完整性檢查和違約處理實體完整性檢查和違約處理v 插入或對主碼列進行更新操作時,插入或對主碼列進行更新操作時,RDBMS按照實體完整按照實體完整性規(guī)則自動進行檢查。包括:性規(guī)則自動進行檢查。包括: 檢查主碼值是否唯一,如果不唯一則拒絕插入或修改檢查主碼值是否唯一,如果不唯一則拒絕插入或修改 檢查主碼的各個屬性是否為空,只要有一個為空就拒絕插檢查主碼的各個屬性是否為空,只要有一個為空就拒絕插入或修改入或修改2/27/202211數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性實體完整性檢查和違約處理實體完整性檢查和違約處理(續(xù)續(xù))v 檢查記錄中主碼值

8、是否唯一的一種方法是進行檢查記錄中主碼值是否唯一的一種方法是進行全表掃描全表掃描2/27/202212數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性實體完整性檢查和違約處理實體完整性檢查和違約處理(續(xù)續(xù))v 另一個是另一個是索引索引 (如B+樹索引)51719312255166717993371215 20 2530 41 5154 65 6668 69 7184 9376 78 792/27/202213數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性5.1 實體完整性實體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定

9、義的完整性5.4 完整性約束命名子句完整性約束命名子句*5.5 域中的完整性限制域中的完整性限制5.6 觸發(fā)器觸發(fā)器5.7 小結小結2/27/202214數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.2 參照完整性參照完整性v5.2.1 參照完整性定義參照完整性定義v5.2.2 參照完整性檢查和違約處理參照完整性檢查和違約處理2/27/202215數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.2.1 參照完整性定義參照完整性定義v關系模型的參照完整性定義關系模型的參照完整性定義在在CREATE TABLE中用中用FOREIGN KEY短語定義哪些短語定義哪些列為外碼

10、列為外碼用用REFERENCES短語指明這些外碼參照哪些表的主碼短語指明這些外碼參照哪些表的主碼 2/27/202216數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性參照完整性定義參照完整性定義(續(xù)續(xù))例例3 定義定義SC中的參照完整性中的參照完整性 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),

11、/*在表級定義參照完整性在表級定義參照完整性*/ FOREIGN KEY (Cno) REFERENCES Course(Cno) /*在表級定義參照完整性在表級定義參照完整性*/ );例如,關系例如,關系SC中一個元組表示一個學生選修的某門課程的成績,(中一個元組表示一個學生選修的某門課程的成績,(Sno,Cno)是主碼。)是主碼。Sno,Cno分別參照引用分別參照引用Student表的主碼和表的主碼和Course表的表的主碼主碼2/27/202217數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.2 參照完整性參照完整性v5.2.1 參照完整性定義參照完整性定義v5.2.2 參

12、照完整性檢查和違約處理參照完整性檢查和違約處理2/27/202218數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性參照完整性檢查和違約處理參照完整性檢查和違約處理可能破壞參照完整性的情況及違約處理可能破壞參照完整性的情況及違約處理被參照表(例如被參照表(例如Student)參照表(例如參照表(例如SC)違約處理違約處理可能破壞參照完整性可能破壞參照完整性 插入元組插入元組拒絕拒絕可能破壞參照完整性可能破壞參照完整性 修改外碼值修改外碼值拒絕拒絕刪除元組刪除元組 可能破壞參照完整性可能破壞參照完整性拒絕拒絕/級連刪除級連刪除/設置為空值設置為空值修改主碼值修改主碼值 可能破壞參照完整性

13、可能破壞參照完整性拒絕拒絕/級連修改級連修改/設置為空值設置為空值2/27/202219數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性違約處理違約處理v 參照完整性違約處理參照完整性違約處理 拒絕拒絕(NO ACTION)執(zhí)行執(zhí)行n默認策略默認策略 級聯(lián)級聯(lián)(CASCADE)操作操作 設置為空值(設置為空值(SET-NULL)n對于參照完整性,除了應該定義外碼,還應定義對于參照完整性,除了應該定義外碼,還應定義外碼列是否允外碼列是否允許空值許空值2/27/202220數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性違約處理違約處理(續(xù)續(xù)) CREATE TABLE SC (S

14、no 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表中相應的元組表中相應的元組*/ ON UPDATE CASCADE, /*級聯(lián)更新級聯(lián)更新SC表中相應的元組表中相應的元組*/ FOREIGN KEY (Cno) REFERENCES Course(Cno) ON DELETE NO ACTION /*當刪除當刪除course 表中的元

15、組造成了與表中的元組造成了與SC表不一致時表不一致時拒絕刪除拒絕刪除*/ ON UPDATE CASCADE /*當更新當更新course表中的表中的cno時,時,級聯(lián)更新級聯(lián)更新SC表中相應的元組表中相應的元組*/ );例例4 顯式顯式說明參照完整性的違約處理示例說明參照完整性的違約處理示例2/27/202221數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性5.1 實體完整性實體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名子句完整性約束命名子句*5.5 域中的完整性限制域中的完整性限制5.6

16、觸發(fā)器觸發(fā)器5.7 小結小結2/27/202222數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.3 用戶定義的完整性用戶定義的完整性v用戶定義的完整性就是針對用戶定義的完整性就是針對某一具體應用某一具體應用的數(shù)據(jù)的數(shù)據(jù)必須滿足的語義要求必須滿足的語義要求 vRDBMS提供,而不必由應用程序承擔提供,而不必由應用程序承擔2/27/202223數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.3 用戶定義的完整性用戶定義的完整性v5.3.1 屬性上的約束條件的定義屬性上的約束條件的定義v5.3.2 屬性上的約束條件檢查和違約處理屬性上的約束條件檢查和違約處理 v5.3.3

17、元組上的約束條件的定義元組上的約束條件的定義 v5.3.4元組上的約束條件檢查和違約處理元組上的約束條件檢查和違約處理2/27/202224數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.3.1 屬性上的約束條件的定義屬性上的約束條件的定義vCREATE TABLE時定義時定義列值非空(列值非空(NOT NULL)列值唯一(列值唯一(UNIQUE)檢查列值是否滿足一個布爾表達式(檢查列值是否滿足一個布爾表達式(CHECK)2/27/202225數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性屬性上的約束條件的定義屬性上的約束條件的定義(續(xù)續(xù))v不允許取空值不允許取空值 例例

18、5 在定義在定義SC表時,說明表時,說明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不允許取空值,不允許取空值,則在列級不允許取空值的定義就不必寫了則在列級不允許取空值的定義就不必寫了 * / );); 2/27/202226數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的

19、完整性屬性上的約束條件的定義屬性上的約束條件的定義(續(xù)續(xù))v列值唯一列值唯一 例例6 建立部門表建立部門表DEPT,要求部門名稱,要求部門名稱Dname列取值唯一,部門編列取值唯一,部門編號號Deptno列為主碼列為主碼 CREATE TABLE DEPT (Deptno NUMERIC(2), Dname CHAR(9) UNIQUE,/*要求要求Dname列值唯一列值唯一*/ Location CHAR(10), PRIMARY KEY (Deptno) );2/27/202227數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性屬性上的約束條件的定義屬性上的約束條件的定義(續(xù)續(xù))v

20、 用用CHECK短語指定列值應該滿足的條件短語指定列值應該滿足的條件例例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) );2/27/202228數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.3 用戶定義的完整性用

21、戶定義的完整性v5.3.1 屬性上的約束條件的定義屬性上的約束條件的定義v5.3.2 屬性上的約束條件檢查和違約處理屬性上的約束條件檢查和違約處理 v5.3.3 元組上的約束條件的定義元組上的約束條件的定義 v5.3.4元組上的約束條件檢查和違約處理元組上的約束條件檢查和違約處理2/27/202229數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.3.2 屬性上的約束條件檢查和違約處理屬性上的約束條件檢查和違約處理v插入元組或修改屬性的值時,插入元組或修改屬性的值時,RDBMS檢查屬性檢查屬性上的約束條件是否被滿足上的約束條件是否被滿足v如果不滿足則操作被如果不滿足則操作被拒絕執(zhí)行

22、拒絕執(zhí)行 2/27/202230數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.3 用戶定義的完整性用戶定義的完整性v5.3.1 屬性上的約束條件的定義屬性上的約束條件的定義v5.3.2 屬性上的約束條件檢查和違約處理屬性上的約束條件檢查和違約處理 v5.3.3 元組上的約束條件的定義元組上的約束條件的定義 v5.3.4元組上的約束條件檢查和違約處理元組上的約束條件檢查和違約處理2/27/202231數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.3.3 元組上的約束條件的定義元組上的約束條件的定義v 在在CREATE TABLE時可以用時可以用CHECK短語定義元組上

23、的約短語定義元組上的約束條件,即束條件,即元組級的限制元組級的限制v 同屬性值限制相比,元組級的限制可以設置不同屬性之間同屬性值限制相比,元組級的限制可以設置不同屬性之間的取值的相互約束條件的取值的相互約束條件 2/27/202232數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性元組上的約束條件的定義元組上的約束條件的定義(續(xù)續(xù)) CREATE TABLE Student (Sno CHAR(9), Sname CHAR(8) NOT NULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno), CHECK

24、 (Ssex=女女 OR Sname NOT LIKE Ms.%) /*定義了元組中定義了元組中Sname和和 Ssex兩個屬性值之間的約束條件兩個屬性值之間的約束條件*/ );性別是女性的元組都能通過該項檢查,因為性別是女性的元組都能通過該項檢查,因為Ssex=女女成立;成立;當性別是男性時,要通過檢查則名字一定不能以當性別是男性時,要通過檢查則名字一定不能以Ms.打頭打頭例例9 當學生的性別是男時,其名字不能以當學生的性別是男時,其名字不能以Ms.打頭。打頭。2/27/202233數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.3 用戶定義的完整性用戶定義的完整性v5.3.1

25、屬性上的約束條件的定義屬性上的約束條件的定義v5.3.2 屬性上的約束條件檢查和違約處理屬性上的約束條件檢查和違約處理 v5.3.3 元組上的約束條件的定義元組上的約束條件的定義 v5.3.4 元組上的約束條件檢查和違約處理元組上的約束條件檢查和違約處理2/27/202234數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.3.4 元組上的約束條件檢查和違約處理元組上的約束條件檢查和違約處理v 插入元組或修改屬性的值時,插入元組或修改屬性的值時,RDBMS檢查元組上的約束檢查元組上的約束條件是否被滿足條件是否被滿足v 如果不滿足則操作被如果不滿足則操作被拒絕執(zhí)行拒絕執(zhí)行 2/27/2

26、02235數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性5.1 實體完整性實體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名子句完整性約束命名子句*5.5 域中的完整性限制域中的完整性限制5.6 觸發(fā)器觸發(fā)器5.7 小結小結2/27/202236數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.4 完整性約束命名子句完整性約束命名子句vCONSTRAINT 約束約束CONSTRAINT PRIMARY KEY短語短語 | FOREIGN KEY短語短語 | CHECK短語短語 2/27/

27、202237數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性完整性約束命名子句完整性約束命名子句(續(xù)續(xù))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 30), Ssex CHAR(2) CONSTRAINT C4 CHECK (Ssex IN ( 男男,女女), CONSTRAINT StudentK

28、ey PRIMARY KEY(Sno); 在在Student表上建立了表上建立了5個約束條件,包括主碼約束(命名為個約束條件,包括主碼約束(命名為StudentKey)以及以及C1、C2、C3、C4四個列級約束。四個列級約束。例例10 建立學生登記表建立學生登記表Student,要求學號在,要求學號在9000099999之間,姓之間,姓名不能取空值,年齡小于名不能取空值,年齡小于30,性別只能是,性別只能是“男男”或或“女女”。2/27/202238數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性完整性約束命名子句完整性約束命名子句(續(xù)續(xù))v 修改表中的完整性限制修改表中的完整性限制使

29、用使用ALTER TABLE語句修改表中的完整性限制語句修改表中的完整性限制2/27/202239數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性完整性約束命名子句完整性約束命名子句(續(xù)續(xù))n 可以先刪除原來的約束條件,再增加新的約束條件可以先刪除原來的約束條件,再增加新的約束條件 ALTER TABLE Student DROP CONSTRAINT C1; ALTER TABLE Student ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999); ALTER TABLE Student DROP CONSTRAINT C

30、3; ALTER TABLE Student ADD CONSTRAINT C3 CHECK (Sage 40);例例13 修改表修改表Student中的約束條件,要求學號改為在中的約束條件,要求學號改為在900000999999之間,年齡由小于之間,年齡由小于30改為小于改為小于402/27/202240數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性5.1 實體完整性實體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名子句完整性約束命名子句*5.5 域中的完整性限制域中的完整性限制5.6 觸發(fā)器觸

31、發(fā)器5.7 小結小結2/27/202241數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.5 域中的完整性限制域中的完整性限制v SQL支持域的概念,并可以用支持域的概念,并可以用CREATE DOMAIN語句建語句建立一個域以及該域應該滿足的完整性約束條件。立一個域以及該域應該滿足的完整性約束條件。例例14建立一個性別域,并聲明性別域的取值范圍建立一個性別域,并聲明性別域的取值范圍例例15建立一個性別域建立一個性別域GenderDomain,并對其中的限制命名,并對其中的限制命名CREATE DOMAIN GenderDomain CHAR(2) CHECK (VALUE IN

32、(男男,女女) );這樣例這樣例10中對中對Ssex的說明可以改寫為的說明可以改寫為 Ssex GenderDomain CREATE DOMAIN GenderDomain CHAR(2) CONSTRAINT GD CHECK ( VALUE IN (男男,女女) );2/27/202242數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性域中的完整性限制域中的完整性限制(續(xù)續(xù)) ALTER DOMAIN GenderDomain DROP CONSTRAINT GD;例例16刪除域刪除域GenderDomain的限制條件的限制條件GD。 ALTER DOMAIN GenderDom

33、ain ADD CONSTRAINT GDD CHECK (VALUE IN ( 1,0) ); 通過例通過例16和例和例17,就把性別的取值范圍由,就把性別的取值范圍由(男男,女女)改為改為 ( 1,0) 例例17在域在域GenderDomain上增加限制條件上增加限制條件GDD。2/27/202243數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性5.1 實體完整性實體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名子句完整性約束命名子句*5.5 域中的完整性限制域中的完整性限制5.6 觸發(fā)器觸發(fā)

34、器5.7 小結小結2/27/202244數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性觸發(fā)器觸發(fā)器v觸發(fā)器(觸發(fā)器(Trigger)是用戶定義在關系表上的一類)是用戶定義在關系表上的一類由由事件驅動事件驅動的特殊的特殊過程過程由服務器自動激活由服務器自動激活可以進行更為復雜的檢查和操作,具有更精細和更強大可以進行更為復雜的檢查和操作,具有更精細和更強大的數(shù)據(jù)控制能力的數(shù)據(jù)控制能力 2/27/202245數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.6 觸發(fā)器觸發(fā)器v5.6.1 定義觸發(fā)器定義觸發(fā)器 v5.6.2 激活觸發(fā)器激活觸發(fā)器 v5.6.3 刪除觸發(fā)器刪除觸發(fā)器

35、2/27/202246數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性5.6.1 定義觸發(fā)器定義觸發(fā)器vCREATE TRIGGER語法格式語法格式 CREATE TRIGGER BEFORE | AFTER ON FOR EACH ROW | STATEMENT WHEN 2/27/202247數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))v定義觸發(fā)器的語法說明定義觸發(fā)器的語法說明:創(chuàng)建者:表的創(chuàng)建者:表的擁有者擁有者觸發(fā)器名觸發(fā)器名表名:觸發(fā)器的目標表表名:觸發(fā)器的目標表觸發(fā)事件:觸發(fā)事件:INSERT、DELETE、UPDATE2/27/20

36、2248數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))觸發(fā)器類型觸發(fā)器類型行級觸發(fā)器(行級觸發(fā)器(FOR EACH ROW)語句級觸發(fā)器(語句級觸發(fā)器(FOR EACH STATEMENT)n 例如例如,假設在例假設在例11的的TEACHER表上創(chuàng)建了一個表上創(chuàng)建了一個AFTER UPDATE觸發(fā)器。如果表觸發(fā)器。如果表TEACHER有有1000行,執(zhí)行如下語句:行,執(zhí)行如下語句: UPDATE TEACHER SET Deptno=5; 如果該觸發(fā)器為語句級觸發(fā)器,那么執(zhí)行完該語句后,觸發(fā)動如果該觸發(fā)器為語句級觸發(fā)器,那么執(zhí)行完該語句后,觸發(fā)動作只發(fā)生一

37、次作只發(fā)生一次 如果是行級觸發(fā)器,觸發(fā)動作將執(zhí)行如果是行級觸發(fā)器,觸發(fā)動作將執(zhí)行1000次次 2/27/202249數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù)) 觸發(fā)條件觸發(fā)條件n觸發(fā)條件為真觸發(fā)條件為真n省略省略WHEN觸發(fā)條件觸發(fā)條件 觸發(fā)動作體觸發(fā)動作體n觸發(fā)動作體可以是一個匿名觸發(fā)動作體可以是一個匿名PL/SQL過程塊過程塊n也可以是對已創(chuàng)建存儲過程的調用也可以是對已創(chuàng)建存儲過程的調用2/27/202250數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))CREATE TRIGGER Insert_Or_Upda

38、te_Sal BEFORE INSERT OR UPDATE ON Teacher /*觸發(fā)事件是插入或更新操作觸發(fā)事件是插入或更新操作*/FOR EACH ROW /*行級觸發(fā)器行級觸發(fā)器*/ AS BEGIN /*定義觸發(fā)動作體,是定義觸發(fā)動作體,是PL/SQL過程塊過程塊*/ IF (new.Job=教授教授) AND (new.Sal 4000) THEN new.Sal :=4000; END IF; END; 例例18 定義一個定義一個BEFORE行級觸發(fā)器,為教師表行級觸發(fā)器,為教師表Teacher定義完整性規(guī)則定義完整性規(guī)則“教授的工資不得低于教授的工資不得低于4000元,如果

39、低元,如果低于于4000元,自動改為元,自動改為4000元元”。2/27/202251數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))首先建立工資變化表首先建立工資變化表Sal_log CREATE TABLE Sal_log ( Eno NUMERIC(4) references teacher(eno), Sal NUMERIC(7,2), Username char(10), Date TIMESTAMP );例例19定義定義AFTER行級觸發(fā)器,當教師表行級觸發(fā)器,當教師表Teacher的工資發(fā)的工資發(fā)生變化后就自動在工資變化表生變化后就自動在工資變

40、化表Sal_log中增加一條相應記錄中增加一條相應記錄2/27/202252數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))例例19(續(xù))(續(xù)) CREATE TRIGGER Insert_Sal AFTER INSERT ON Teacher /*觸發(fā)事件是觸發(fā)事件是INSERT*/ FOR EACH ROW AS BEGIN INSERT INTO Sal_log VALUES( new.Eno,new.Sal, CURRENT_USER,CURRENT_TIMESTAMP); END; CREATE TRIGGER Update_Sal AFTER UPDATE ON Teacher /*觸發(fā)事件是觸發(fā)事件是UPDATE */ FOR EACH ROW AS BEGIN IF (new.Sal old.Sal) THEN INSERT INTO Sal_log VALUES ( new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP); END IF; END;2/27/202253數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫的完整性數(shù)據(jù)庫系統(tǒng)概論數(shù)

溫馨提示

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

最新文檔

評論

0/150

提交評論