版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 本章目標(biāo):本章目標(biāo):掌握數(shù)據(jù)庫的完整性概掌握數(shù)據(jù)庫的完整性概念,以及用念,以及用SQLSQL語言定義關(guān)系模式的完整語言定義關(guān)系模式的完整性約束條件。性約束條件。第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性2022-3-272 2第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性5.1 5.1 實體完整性實體完整性5.2 5.2 參照完整性參照完整性5.3 5.3 用戶自定義完整性用戶自定義完整性5.4 5.4 完整性約束命名子句完整性約束命名子句5.5 5.5 域中的完整性限制域中的完整性限制5.6 5.6 觸發(fā)器觸發(fā)器5.7 5.7 小結(jié)小結(jié)3 3重點和難點重點和難點o重點:重點:n 掌握掌握DBMSDBM
2、S完整性控制機制的三個方面,即完完整性控制機制的三個方面,即完整性約束條件的定義、檢查和違約處理。整性約束條件的定義、檢查和違約處理。n 用用SQLSQL語言定義關(guān)系模式的完整性約束條件。語言定義關(guān)系模式的完整性約束條件。包括定義主碼、參照完整性;定義與應(yīng)用有包括定義主碼、參照完整性;定義與應(yīng)用有關(guān)的完整性。關(guān)的完整性。o難點:難點:n 如何實現(xiàn)完整性的策略,以確保數(shù)據(jù)的正確如何實現(xiàn)完整性的策略,以確保數(shù)據(jù)的正確與有效。較復(fù)雜的是參照完整性的實現(xiàn)機制。與有效。較復(fù)雜的是參照完整性的實現(xiàn)機制。4 4數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性o數(shù)據(jù)庫的完整性數(shù)據(jù)庫的完整性n數(shù)據(jù)的數(shù)據(jù)的正確性正確性和和相容性相容性o
3、數(shù)據(jù)的完整性和安全性是兩個不同概念數(shù)據(jù)的完整性和安全性是兩個不同概念n數(shù)據(jù)的完整性數(shù)據(jù)的完整性u防止數(shù)據(jù)庫中存在不正確的數(shù)據(jù)防止數(shù)據(jù)庫中存在不正確的數(shù)據(jù)u防范對象:不合語義的、不正確的數(shù)據(jù)防范對象:不合語義的、不正確的數(shù)據(jù)n數(shù)據(jù)的安全性數(shù)據(jù)的安全性u防止惡意的破壞和非法的存取防止惡意的破壞和非法的存取u防范對象:非法用戶和非法操作防范對象:非法用戶和非法操作5 5數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性( (續(xù)續(xù)) )o為維護數(shù)據(jù)庫的完整性,為維護數(shù)據(jù)庫的完整性,DBMSDBMS必須:必須:n 提供定義完整性約束條件的機制提供定義完整性約束條件的機制n 提供完整性檢查的方法提供完整性檢查的方法n 違約處理違約
4、處理-目前商用的目前商用的DBMSDBMS產(chǎn)品都支持完整性控制產(chǎn)品都支持完整性控制o本章重點講解本章重點講解SQLSQL語言中實現(xiàn)完整性控語言中實現(xiàn)完整性控制功能的方法制功能的方法6 65.1 5.1 實體完整性實體完整性5.1.1 5.1.1 實體完整性定義實體完整性定義5.1.2 5.1.2 實體完整性檢查和違約處理實體完整性檢查和違約處理7 75.1.1 5.1.1 實體完整性定義實體完整性定義o關(guān)系模型的實體完整性關(guān)系模型的實體完整性nCREATE TABLECREATE TABLE中用中用PRIMARY KEYPRIMARY KEY定義定義o單屬性構(gòu)成的碼有兩種定義方法單屬性構(gòu)成的碼
5、有兩種定義方法 n定義為列級約束條件定義為列級約束條件n定義為表級約束條件定義為表級約束條件o對多個屬性構(gòu)成的碼只有一種定義方法對多個屬性構(gòu)成的碼只有一種定義方法n定義為表級約束條件定義為表級約束條件 8 8實體完整性定義實體完整性定義( (續(xù)續(xù)) )o 例例11將將StudentStudent表中的表中的SnoSno屬性定義為屬性定義為碼碼n在列級定義主碼:在列級定義主碼:在屬性后增加關(guān)鍵字在屬性后增加關(guān)鍵字 CREATE TABLE StudentCREATE TABLE Student (Sno CHAR(9) (Sno CHAR(9) PRIMARY KEY PRIMARY KEY,
6、Sname CHAR(20) NOT NULLSname CHAR(20) NOT NULL, Ssex CHAR(2) Ssex CHAR(2) , Sage SMALLINTSage SMALLINT, Sdept CHAR(20);Sdept CHAR(20);9 9實體完整性定義實體完整性定義( (續(xù)續(xù)) )n 在表級定義主碼:在表級定義主碼:在屬性表中加入額外的定義在屬性表中加入額外的定義主碼的子句:主碼的子句:PRIMARY KEY (PRIMARY KEY (主碼屬性名表主碼屬性名表) ) CREATE TABLE StudentCREATE TABLE Student (Sno
7、 CHAR(9) (Sno CHAR(9), Sname CHAR(20) NOT NULLSname CHAR(20) NOT NULL, Ssex CHAR(2) Ssex CHAR(2) , Sage SMALLINTSage SMALLINT, Sdept CHAR(20)Sdept CHAR(20), PRIMARY KEY (Sno)PRIMARY KEY (Sno); ); 1010實體完整性定義實體完整性定義( (續(xù)續(xù)) ) 例例22將將SCSC表中的表中的SnoSno,CnoCno屬性組定義為碼屬性組定義為碼 CREATE TABLE SCCREATE TABLE SC (S
8、no CHAR(9) NOT NULL (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULLCno CHAR(4) NOT NULL, Grade SMALLINTGrade SMALLINT, PRIMARY KEY (SnoPRIMARY KEY (Sno,Cno) Cno) / /* *只能在表級定義主碼只能在表級定義主碼* */ /); ); 11115.1.2 5.1.2 實體完整性檢查和違約處理實體完整性檢查和違約處理o插入插入或?qū)χ鞔a列進行或?qū)χ鞔a列進行更新更新操作時,操作時,RDBMSRDBMS按照實體完整性規(guī)則自動進行檢按照實體完整性規(guī)則自動
9、進行檢查。包括:查。包括:n檢查主碼值是否唯一,不唯一則拒絕檢查主碼值是否唯一,不唯一則拒絕n檢查檢查主碼的各個屬性是否為空主碼的各個屬性是否為空,只要有一,只要有一個為空就拒絕個為空就拒絕u檢查記錄中主碼值是否唯一的方法:檢查記錄中主碼值是否唯一的方法:全表掃描全表掃描u提高提高實體完整性檢查效率的方法:實體完整性檢查效率的方法:索引索引12125.2 5.2 參照完整性參照完整性5.2.1 5.2.1 參照完整性定義參照完整性定義5.2.2 5.2.2 參照完整性檢查和違約處理參照完整性檢查和違約處理13135.2.1 5.2.1 參照完整性定義參照完整性定義o關(guān)系模型的參照完整性定義關(guān)系
10、模型的參照完整性定義n 在在CREATE TABLECREATE TABLE中用中用FOREIGN KEYFOREIGN KEY短語定短語定義哪些列為外碼義哪些列為外碼n 用用REFERENCESREFERENCES短語指明這些外碼參照哪些短語指明這些外碼參照哪些表的主碼表的主碼 1414參照完整性定義參照完整性定義( (例例) )o關(guān)系關(guān)系SCSC:(Sno,Cno)(Sno,Cno)是主碼。是主碼。Sno,CnoSno,Cno分別參分別參照引用照引用StudentStudent表的主碼和表的主碼和CourseCourse表的主碼表的主碼 例例33定義定義SCSC中的參照完整性中的參照完整性
11、 CREATE TABLE SCCREATE TABLE SC (Sno CHAR(9) NOT NULL,Cno CHAR(4) NOT NULL, (Sno CHAR(9) NOT NULL,Cno CHAR(4) NOT NULL, Grade SMALLINT, Grade SMALLINT,PRIMARY KEY (Sno,Cno),PRIMARY KEY (Sno,Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno)FOREIGN KEY (Sno) REFERENCES Student(Sno), / /* *在表級定義參照完整性在表級定
12、義參照完整性* */ / FOREIGN KEY (Cno) REFERENCES Course(Cno)FOREIGN KEY (Cno) REFERENCES Course(Cno) / /* *在表級定義參照完整性在表級定義參照完整性* */);/);15155.2.2 5.2.2 參照完整性檢查和違約處理參照完整性檢查和違約處理o參照完整性:參照完整性:將兩個表中的相應(yīng)元組聯(lián)系將兩個表中的相應(yīng)元組聯(lián)系起來起來o可能破壞參照完整性的操作:可能破壞參照完整性的操作:對參照表和對參照表和被參照表的增、刪、改被參照表的增、刪、改1616參照完整性檢查和違約處理參照完整性檢查和違約處理o 例例
13、對表對表SCSC和和StudentStudent,可能破壞,可能破壞參照完整參照完整性的操作情況性的操作情況nSCSC表增加一個元組表增加一個元組n修改修改SCSC表的一個元組表的一個元組n從從StudentStudent表刪除一個元組表刪除一個元組n修改修改StudentStudent表中一個元組的表中一個元組的SnoSno屬性值屬性值1717參照完整性檢查和違約處理參照完整性檢查和違約處理o 練習(xí)練習(xí) 對表對表SCSC和和CourseCourse,可能破壞,可能破壞參照完參照完整性的操作情況整性的操作情況nSCSC表增加一個元組表增加一個元組n修改修改SCSC表的一個元組表的一個元組n從從
14、CourseCourse表刪除一個元組表刪除一個元組n修改修改CourseCourse表中一個元組的表中一個元組的CnoCno屬性值屬性值1818參照完整性檢查和違約處理參照完整性檢查和違約處理可能破壞參照完整性的情況及違約處理可能破壞參照完整性的情況及違約處理被參照表被參照表( (例如例如Student)Student)參照表參照表( (例如例如SC)SC)違約違約處理處理可能破壞可能破壞參照完整性參照完整性 插入元組插入元組拒絕拒絕可能破壞可能破壞參照完整性參照完整性 修改外碼值修改外碼值拒絕拒絕刪除元組刪除元組可能破壞可能破壞參照完整性參照完整性拒絕拒絕/ /級連刪級連刪除除/ /設(shè)置為
15、空設(shè)置為空值值修改主碼值修改主碼值可能破壞可能破壞參照完整性參照完整性拒絕拒絕/ /級連修級連修改改/ /設(shè)置為空設(shè)置為空值值1919違約處理違約處理o參照完整性違約處理參照完整性違約處理n 拒絕拒絕(NO ACTION)(NO ACTION)執(zhí)行執(zhí)行u默認策略默認策略n 級聯(lián)級聯(lián)(CASCADE)(CASCADE)操作操作u刪除刪除/ /修改被參照表的某元組時,則刪除修改被參照表的某元組時,則刪除/ /修修改參照表中不一致的元組改參照表中不一致的元組n 設(shè)置為空值設(shè)置為空值(SET-NULL)(SET-NULL)u刪除刪除/ /修改被參照表的某元組時,則設(shè)置參修改被參照表的某元組時,則設(shè)置參
16、照表中不一致的元組的對應(yīng)屬性為空值照表中不一致的元組的對應(yīng)屬性為空值2020違約處理違約處理n 設(shè)置為空值設(shè)置為空值(SET-NULL)(SET-NULL)u對于參照完整性,除了應(yīng)該定義外碼,還對于參照完整性,除了應(yīng)該定義外碼,還應(yīng)定義應(yīng)定義外碼列是否允許空值外碼列是否允許空值n 當(dāng)參照表與被參照表的操作違反了參照完整當(dāng)參照表與被參照表的操作違反了參照完整性時性時u系統(tǒng)選用默認策略,即拒絕執(zhí)行系統(tǒng)選用默認策略,即拒絕執(zhí)行u若想讓系統(tǒng)采取其他策略,必須在創(chuàng)建表若想讓系統(tǒng)采取其他策略,必須在創(chuàng)建表時顯式地說明時顯式地說明2121在主表中修改主碼例在主表中修改主碼例o例:例:將將S S關(guān)系中關(guān)系中S
17、no=950001Sno=950001的元組中的元組中SnoSno值改為值改為960123960123。設(shè)。設(shè)SCSC關(guān)系中有關(guān)系中有4 4個元組個元組的的Sno=950001Sno=950001n 級聯(lián)修改:級聯(lián)修改:將將SCSC關(guān)系中關(guān)系中4 4個個Sno=950001Sno=950001元組元組中的中的SnoSno值也改為值也改為960123960123。若參照關(guān)系同時。若參照關(guān)系同時又是另一關(guān)系的被參照關(guān)系,則修改操作又是另一關(guān)系的被參照關(guān)系,則修改操作會繼續(xù)級聯(lián)下去會繼續(xù)級聯(lián)下去2222在主表中修改主碼例在主表中修改主碼例n 受限修改受限修改: :只有當(dāng)只有當(dāng)SCSC中沒有任何元組的
18、中沒有任何元組的Sno=950001Sno=950001時,才能修改時,才能修改S S表中表中Sno=950001Sno=950001的元組的的元組的SnoSno值值( (改為改為960123)960123)n 置空值修改:置空值修改:將將S S表中表中Sno=950001Sno=950001的元組的的元組的SnoSno值改為值改為960123,960123,而將而將SCSC表中所有表中所有Sno=950001Sno=950001的元組的的元組的SnoSno值置為空值。值置為空值。o在學(xué)生選課數(shù)據(jù)庫中在學(xué)生選課數(shù)據(jù)庫中只有前二種方法是只有前二種方法是正確的正確的( (級聯(lián)修改、受限修改級聯(lián)修改
19、、受限修改) )2323違約處理違約處理( (續(xù)續(xù)) )n 例例44顯式說明參照完整性違約處理示例顯式說明參照完整性違約處理示例CREATE TABLE SCCREATE TABLE SC(Sno CHAR(9) NOT NULL,Cno CHAR(4) NOT NULL,(Sno CHAR(9) NOT NULL,Cno CHAR(4) NOT NULL, Grade SMALLINT,PRIMARY KEY(Sno,Cno), Grade SMALLINT,PRIMARY KEY(Sno,Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno) FOR
20、EIGN KEY (Sno) REFERENCES Student(Sno) ON DELETE CASCADEON DELETE CASCADE / /* *級聯(lián)刪除級聯(lián)刪除SCSC表中相應(yīng)的元組表中相應(yīng)的元組* */ / ON UPDATE CASCADEON UPDATE CASCADE, , / /* *級聯(lián)更新級聯(lián)更新SCSC表中相應(yīng)的元組表中相應(yīng)的元組* */ / FOREIGN KEY (Cno) REFERENCES Course(Cno) FOREIGN KEY (Cno) REFERENCES Course(Cno) ON DELETE NO ACTIONON DELETE
21、 NO ACTION / /* *當(dāng)刪除當(dāng)刪除coursecourse表中的元組造成了與表中的元組造成了與SCSC表不一致時表不一致時拒絕刪除拒絕刪除* */ / ON UPDATE CASCADEON UPDATE CASCADE / /* *當(dāng)更新當(dāng)更新coursecourse表中的表中的cnocno時,時,級聯(lián)更新級聯(lián)更新SCSC表中相應(yīng)的元組表中相應(yīng)的元組* */ /) )2424ON DELETE CASCADEON DELETE CASCADE-級連刪除級連刪除oDELETE FROM SC WHERE Sno=1DELETE FROM SC WHERE Sno=1n 則只刪除則只
22、刪除SCSC的一條記錄的一條記錄,Student,Student表的相應(yīng)表的相應(yīng)記錄不會被刪除記錄不會被刪除oDELETE FROM Student WHERE Sno=DELETE FROM Student WHERE Sno=1 1n 不但刪除不但刪除StudentStudent的一條記錄,而且表的一條記錄,而且表SCSC中中Sno=Sno=1 1同學(xué)的所有選修記錄也會被級同學(xué)的所有選修記錄也會被級連刪除連刪除25255.3 5.3 用戶定義的完整性用戶定義的完整性o用戶定義的完整性就是針對用戶定義的完整性就是針對某一具體某一具體應(yīng)用應(yīng)用的數(shù)據(jù)必須滿足的語義要求的數(shù)據(jù)必須滿足的語義要求 o
23、RDBMSRDBMS提供定義和檢驗機制,而不必由提供定義和檢驗機制,而不必由應(yīng)用程序承擔(dān)應(yīng)用程序承擔(dān)26265.3 5.3 用戶定義的完整性用戶定義的完整性5.3.1 5.3.1 屬性上的約束條件的定義屬性上的約束條件的定義5.3.2 5.3.2 屬性上的約束條件檢查和違約處理屬性上的約束條件檢查和違約處理 5.3.3 5.3.3 元組上的約束條件的定義元組上的約束條件的定義 5.3.4 5.3.4 元組上的約束條件檢查和違約處理元組上的約束條件檢查和違約處理27275.3.1 5.3.1 屬性上的約束條件的定義屬性上的約束條件的定義oCREATE TABLECREATE TABLE時定義時定
24、義n 列值非空列值非空(NOT NULL)(NOT NULL)n 列值唯一列值唯一(UNIQUE)(UNIQUE)n 檢查列值是否滿足一個布爾表達式檢查列值是否滿足一個布爾表達式(CHECK)(CHECK)2828屬性上的約束條件的定義屬性上的約束條件的定義( (續(xù)續(xù)) )1.1.不允許取空值不允許取空值 例例55定義定義SCSC表時,說明表時,說明SnoSno、CnoCno、GradeGrade屬性屬性不允許取空值。不允許取空值。 CREATE TABLE SCCREATE TABLE SC (Sno CHAR(9) Sno CHAR(9) NOT NULLNOT NULL, Cno CHA
25、R(4) Cno CHAR(4) NOT NULLNOT NULL, Grade SMALLINT Grade SMALLINT NOT NULLNOT NULL, PRIMARY KEY (Sno,Cno) PRIMARY KEY (Sno,Cno) / /* *如果在表級定義實體完整性,隱含了如果在表級定義實體完整性,隱含了SnoSno,CnoCno不不允許取空值允許取空值,則在列級不允許取空值的定義就不必寫,則在列級不允許取空值的定義就不必寫了了* */ /);); CREATE TABLE SCCREATE TABLE SC (Sno CHAR(9)Sno CHAR(9), Cno C
26、HAR(4)Cno CHAR(4), Grade SMALLINT Grade SMALLINT NOT NULLNOT NULL, PRIMARY KEY (Sno,Cno);PRIMARY KEY (Sno,Cno); 2929屬性上的約束條件的定義屬性上的約束條件的定義( (續(xù)續(xù)) )2.2.列值唯一列值唯一 例例66建立部門表建立部門表DEPTDEPT,要求部門名稱,要求部門名稱DnameDname屬性屬性列取值唯一,部門編號列取值唯一,部門編號DeptnoDeptno屬性列為主碼屬性列為主碼 CREATE TABLE DEPTCREATE TABLE DEPT (Deptno NUM
27、ERIC(2) (Deptno NUMERIC(2), Dname CHAR(9) Dname CHAR(9) UNIQUEUNIQUE,/,/* *要求要求DnameDname列值唯一列值唯一* */ / Location CHAR(10) Location CHAR(10), PRIMARY KEY (Deptno) )PRIMARY KEY (Deptno) );3030屬性上的約束條件的定義屬性上的約束條件的定義( (續(xù)續(xù)) )3.3.用用CHECKCHECK短語指定列值應(yīng)滿足的條件短語指定列值應(yīng)滿足的條件o 例例77StudentStudent表的表的SsexSsex只允許取只允許取
28、“男男”或或“女女” CREATE TABLE StudentCREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, (Sno CHAR(9) PRIMARY KEY, Sname CHAR(8) NOT NULL, Sname CHAR(8) NOT NULL, Ssex CHAR(2) Ssex CHAR(2) CHECK (Ssex IN CHECK (Ssex IN ( (男男, ,女女), , / /* *性別屬性性別屬性SsexSsex只允許取只允許取 男男 或或 女女 * */ / Sage SMALLINT, Sage SMALLINT,
29、Sdept CHAR(20); Sdept CHAR(20);3131屬性上的約束條件的定義屬性上的約束條件的定義( (續(xù)續(xù)) )o 例例88SCSC表的表的GradeGrade只允許取只允許取0-1000-100的數(shù)字的數(shù)字 CREATE TABLE SCCREATE TABLE SC (Sno CHAR(9), (Sno CHAR(9), Cno CHAR(4) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT Grade SMALLINT CHECK (Grade=0 AND Grade=0 AND Grade=100), , / /* * G
30、rade Grade屬性只允許取屬性只允許取0-1000-100的數(shù)字的數(shù)字* */ / PRIMARY KEY (Sno,Cno), PRIMARY KEY (Sno,Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) FOREIGN KEY (Cno) REFERENCES Course(Cno)32325.3.2 5.3.2 屬性上的約束條件檢查和違約處理屬性上的約束條件檢查和
31、違約處理o插入元組或修改屬性的值時,插入元組或修改屬性的值時,RDBMSRDBMS檢檢查屬性上的約束條件是否被滿足查屬性上的約束條件是否被滿足o如果不滿足則操作被拒絕執(zhí)行如果不滿足則操作被拒絕執(zhí)行 33335.3.3 5.3.3 元組上的約束條件的定義元組上的約束條件的定義o在在CREATE TABLECREATE TABLE時可以用時可以用CHECKCHECK短語定短語定義元組上的約束條件,即義元組上的約束條件,即元組級的限元組級的限制制o同屬性值限制相比,元組級的限制可同屬性值限制相比,元組級的限制可以設(shè)置不同屬性之間取值的相互約束以設(shè)置不同屬性之間取值的相互約束條件條件 3434元組上的
32、約束條件的定義元組上的約束條件的定義( (續(xù)續(xù)) ) 例例99當(dāng)學(xué)生的性別是男時當(dāng)學(xué)生的性別是男時, ,其名字不能以其名字不能以Ms.Ms.打頭打頭 CREATE TABLE StudentCREATE TABLE Student (Sno CHAR(9), Sname CHAR(8) NOT NULL, (Sno CHAR(9), Sname CHAR(8) NOT NULL, Ssex CHAR(2),Sage SMALLINT, Ssex CHAR(2),Sage SMALLINT, Sdept CHAR(20),PRIMARY KEY (Sno), Sdept CHAR(20),PRI
33、MARY KEY (Sno), CHECK (Ssex=CHECK (Ssex=女女 OR Sname NOT LIKE Ms.%) OR Sname NOT LIKE Ms.%) / /* *定義了元組中定義了元組中SnameSname和和 SsexSsex兩個兩個屬性值之間的約束條件屬性值之間的約束條件* */)/)n 性別是女性的元組都能通過該項檢查;性別是女性的元組都能通過該項檢查;n 當(dāng)性別是男性時,則名字一定不能以當(dāng)性別是男性時,則名字一定不能以Ms.Ms.打打頭頭, ,才能通過檢查才能通過檢查35355.3.4 5.3.4 元組上的約束條件檢查和違約處理元組上的約束條件檢查和違約
34、處理o插入元組或修改屬性的值時,插入元組或修改屬性的值時,RDBMSRDBMS檢檢查元組上的約束條件是否被滿足查元組上的約束條件是否被滿足o如果不滿足則操作被拒絕執(zhí)行如果不滿足則操作被拒絕執(zhí)行 36365.4 5.4 完整性約束命名子句完整性約束命名子句o完整性約束命名:完整性約束命名:CONSTRAINTCONSTRAINT約束子句約束子句CONSTRAINT CONSTRAINT PRIMARY KEYPRIMARY KEY短語短語 |FOREIGN KEY|FOREIGN KEY短語短語 |CHECK|CHECK短語短語3737完整性約束命名子句完整性約束命名子句( (續(xù)續(xù)) ) 例例1
35、010建立學(xué)生登記表建立學(xué)生登記表StudentStudent,要求學(xué)號在,要求學(xué)號在90000-9999990000-99999之間,姓名不能取空值,年齡小之間,姓名不能取空值,年齡小于于3030,性別只能是,性別只能是“男男”或或“女女”。n CREATE TABLE StudentCREATE TABLE Student (Sno NUMERIC(6) (Sno NUMERIC(6) CONSTRAINT C1 CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999)CHECK (Sno BETWEEN 90000 AND 99999), , S
36、name CHAR(20) Sname CHAR(20) CONSTRAINT C2 NOT NULLCONSTRAINT C2 NOT NULL, , Sage NUMERIC(3) Sage NUMERIC(3) CONSTRAINT C3 CHECK CONSTRAINT C3 CHECK (Sage30)(Sage30), , Ssex CHAR(2) Ssex CHAR(2) CONSTRAINT C4 CHECK (Ssex IN CONSTRAINT C4 CHECK (Ssex IN (男男,女女), , CONSTRAINT StudentKeyCONSTRAINT Stud
37、entKey PRIMARY KEY(Sno) PRIMARY KEY(Sno)在在StudentStudent表上建立了表上建立了5 5個約束條件,包括主碼約束個約束條件,包括主碼約束( (命命名為名為StudentKey)StudentKey)以及以及C1C1、C2C2、C3C3、C4C4四個列級約束。四個列級約束。3838完整性約束命名子句完整性約束命名子句( (續(xù)續(xù)) )o修改表中的完整性限制:修改表中的完整性限制:ALTER TABLEALTER TABLE語句語句n 增加新的約束條件增加新的約束條件(ADD)(ADD)n 修改表中的完整性限制修改表中的完整性限制(DROP-ADD)
38、(DROP-ADD)u先刪除原來的約束條件先刪除原來的約束條件(DROP)(DROP)u再增加新的約束條件再增加新的約束條件 (ADD)(ADD)n 刪除表中原有的完整性限制刪除表中原有的完整性限制(DROP)(DROP)3939完整性約束命名子句完整性約束命名子句( (續(xù)續(xù)) ) 例例1313修改表修改表StudentStudent中的約束條件,要求學(xué)號中的約束條件,要求學(xué)號改為在改為在900000-999999900000-999999之間,年齡由小于之間,年齡由小于3030改改為小于為小于4040n可先刪除原來的約束條件,再增加新的約束條件可先刪除原來的約束條件,再增加新的約束條件 AL
39、TER TABLE Student ALTER TABLE Student DROP CONSTRAINT C1DROP CONSTRAINT C1; ; ALTER TABLE Student ALTER TABLE Student ADD CONSTRAINT C1ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999) CHECK (Sno BETWEEN 900000 AND 999999), ALTER TABLE Student ALTER TABLE Student DROP CONSTRAINT C3;DROP CONSTR
40、AINT C3; ALTER TABLE Student ALTER TABLE Student ADD CONSTRAINT C3 ADD CONSTRAINT C3 CHECK (Sage40) CHECK (Sage40);4040數(shù)據(jù)完整性小結(jié)數(shù)據(jù)完整性小結(jié)o數(shù)據(jù)庫的完整性是為了保證數(shù)據(jù)庫中存數(shù)據(jù)庫的完整性是為了保證數(shù)據(jù)庫中存儲的數(shù)據(jù)是正確的儲的數(shù)據(jù)是正確的oRDBMSRDBMS完整性實現(xiàn)的機制完整性實現(xiàn)的機制n完整性約束定義機制完整性約束定義機制n完整性檢查機制完整性檢查機制n違背完整性約束條件時違背完整性約束條件時RDBMSRDBMS應(yīng)采取的動作應(yīng)采取的動作4141數(shù)據(jù)完整性小結(jié)數(shù)
41、據(jù)完整性小結(jié)(續(xù))o完整性約束的用途:限制輸入到數(shù)據(jù)庫表中的完整性約束的用途:限制輸入到數(shù)據(jù)庫表中的值的范圍值的范圍oSQL ServerSQL Server根據(jù)不同用途提供了多種約束根據(jù)不同用途提供了多種約束nPRIMARY(PRIMARY(主鍵主鍵) )約束約束nFOREIGN(FOREIGN(外鍵外鍵) )約束約束nUNIQUE(UNIQUE(惟一惟一) )約束約束nCHECK(CHECK(檢查檢查) )約束約束nNULL(NULL(可否為空可否為空) )約束約束nCASCADECASCADE級連引用一致性約束級連引用一致性約束4242數(shù)據(jù)完整性小結(jié)數(shù)據(jù)完整性小結(jié)(續(xù))o當(dāng)需要在一個表中
42、的多個列上建立約束當(dāng)需要在一個表中的多個列上建立約束時,只能定義表級約束時,只能定義表級約束o要瀏覽有關(guān)約束的信息可以使用系統(tǒng)存要瀏覽有關(guān)約束的信息可以使用系統(tǒng)存儲過程儲過程sp_helpconstraintsp_helpconstraint sp_helpconstraint sp_helpconstraint 43435.6 5.6 觸發(fā)器觸發(fā)器5.6.1 5.6.1 創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器 5.6.2 5.6.2 激活觸發(fā)器激活觸發(fā)器 5.6.3 5.6.3 刪除觸發(fā)器刪除觸發(fā)器4444觸發(fā)器觸發(fā)器(Trigger)(Trigger)o觸發(fā)器是用戶定義在關(guān)系表上的一類由觸發(fā)器是用戶定義在關(guān)
43、系表上的一類由事件驅(qū)動事件驅(qū)動的特殊的存儲過程的特殊的存儲過程n 由服務(wù)器自動激活由服務(wù)器自動激活n 可以進行更復(fù)雜的檢查和操作,具有更精可以進行更復(fù)雜的檢查和操作,具有更精細和更強大的數(shù)據(jù)控制能力細和更強大的數(shù)據(jù)控制能力-不是不是SQLSQL規(guī)范的內(nèi)容,但大多規(guī)范的內(nèi)容,但大多DBMSDBMS都支持都支持 4545觸發(fā)器觸發(fā)器( (續(xù)續(xù)) )o觸發(fā)器有助于強制引用完整性觸發(fā)器有助于強制引用完整性n 但強制引用完整性的最好方法是在相關(guān)表但強制引用完整性的最好方法是在相關(guān)表中定義主鍵和外鍵約束中定義主鍵和外鍵約束n 只要約束和默認值提供了全部所需的功能,只要約束和默認值提供了全部所需的功能,就應(yīng)
44、使用約束和默認值就應(yīng)使用約束和默認值4646定義觸發(fā)器定義觸發(fā)器oCREATE TRIGGERCREATE TRIGGER語法格式語法格式 CREATE TRIGGER CREATE TRIGGER BEFORE | AFTER BEFORE | AFTER ON ON FOR EACH ROW | STATEMENT FOR EACH ROW | STATEMENT WHEN WHEN 4747創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器-SQL Server 2000-SQL Server 2000語法格式語法格式o CREATE TRIGGER CREATE TRIGGER ON ON | WITH ENCRY
45、PTION WITH ENCRYPTION FOR|AFTER|INSTEAD OF FOR|AFTER|INSTEAD OF INSERT,UPDATE,DELETE INSERT,UPDATE,DELETE AS AS 4848定義觸發(fā)器定義觸發(fā)器( (續(xù)續(xù)) )o語法說明語法說明: :n 創(chuàng)建者:表的創(chuàng)建者:表的擁有者擁有者n 觸發(fā)器名觸發(fā)器名n 表名:觸發(fā)器的目標(biāo)表表名:觸發(fā)器的目標(biāo)表n 觸發(fā)事件:觸發(fā)事件:INSERTINSERT、DELETEDELETE、UPDATEUPDATEn 觸發(fā)器類型觸發(fā)器類型u行級觸發(fā)器行級觸發(fā)器(FOR EACH ROW)(FOR EACH ROW)u
46、語句級觸發(fā)器語句級觸發(fā)器(FOR EACH STATEMENT)(FOR EACH STATEMENT)4949定義觸發(fā)器定義觸發(fā)器( (續(xù)續(xù)) )o語法說明語法說明: :n 觸發(fā)條件觸發(fā)條件u觸發(fā)條件為真觸發(fā)條件為真u省略省略WHENWHEN觸發(fā)條件觸發(fā)條件n 觸發(fā)動作體觸發(fā)動作體o可以是一個匿名可以是一個匿名SQLSQL過程語句塊過程語句塊o也可以是對已創(chuàng)建存儲過程的調(diào)用也可以是對已創(chuàng)建存儲過程的調(diào)用5050定義觸發(fā)器定義觸發(fā)器( (續(xù)續(xù)) )o語法說明語法說明: :n WITH ENCRYPTIONWITH ENCRYPTION-加密系統(tǒng)分類表加密系統(tǒng)分類表中包含中包含CREATE CR
47、EATE TRIGGER TRIGGER 語句文本的條目語句文本的條目5151定義觸發(fā)器定義觸發(fā)器( (續(xù)續(xù)) )o語句級與行級觸發(fā)器示例語句級與行級觸發(fā)器示例n 在在TEACHERTEACHER表上創(chuàng)建一個表上創(chuàng)建一個AFTER UPDATEAFTER UPDATE觸發(fā)器,觸發(fā)器,若表若表TEACHERTEACHER有有10001000行,執(zhí)行語句:行,執(zhí)行語句:UPDATE UPDATE TEACHER SET Deptno=5;TEACHER SET Deptno=5; u若為語句級觸發(fā)器,則執(zhí)行完該語句后,若為語句級觸發(fā)器,則執(zhí)行完該語句后,觸發(fā)動作只發(fā)生一次觸發(fā)動作只發(fā)生一次u若為行
48、級觸發(fā)器,觸發(fā)動作將執(zhí)行若為行級觸發(fā)器,觸發(fā)動作將執(zhí)行10001000次次 5252SQL Server2000SQL Server2000觸發(fā)器類型觸發(fā)器類型o可使用可使用FORFOR子句指定觸發(fā)器的執(zhí)行時間子句指定觸發(fā)器的執(zhí)行時間n AFTERAFTER:在觸發(fā)它們的語句在觸發(fā)它們的語句(INSERT(INSERT、UPDATEUPDATE、DELETE)DELETE)完成后執(zhí)行完成后執(zhí)行-SQL Server 2000-SQL Server 2000中中AFTERAFTER是默認的觸發(fā)器是默認的觸發(fā)器n INSTEAD OFINSTEAD OF:用于替代引起觸發(fā)器執(zhí)行的用于替代引起觸發(fā)器
49、執(zhí)行的SQLSQL語句語句-只能為每個觸發(fā)操作定義一個只能為每個觸發(fā)操作定義一個INSTEAD OFINSTEAD OF觸發(fā)器觸發(fā)器5353o觸發(fā)器語句中使用的兩個臨時的駐留內(nèi)觸發(fā)器語句中使用的兩個臨時的駐留內(nèi)存的表存的表oSQL Server 2000SQL Server 2000自動創(chuàng)建和治理自動創(chuàng)建和治理o可以使用這兩個表測試某些數(shù)據(jù)修改的可以使用這兩個表測試某些數(shù)據(jù)修改的效果及設(shè)置觸發(fā)器操作的條件效果及設(shè)置觸發(fā)器操作的條件o不能直接對表中的數(shù)據(jù)進行更改不能直接對表中的數(shù)據(jù)進行更改 INSERTEDINSERTED表和表和DELETEDDELETED表表5454oINSERTEDINSE
50、RTED表表n 用于存儲用于存儲INSERTINSERT和和UPDATEUPDATE語句所影響的行的語句所影響的行的副本副本n 在一個插入或更新事務(wù)處理中,新建行被同在一個插入或更新事務(wù)處理中,新建行被同時添加到時添加到INSERTEDINSERTED表和觸發(fā)器表中表和觸發(fā)器表中n INSERTEDINSERTED表中的行是觸發(fā)器表中新行的副本表中的行是觸發(fā)器表中新行的副本INSERTEDINSERTED表和表和DELETEDDELETED表表5555oDELETEDDELETED表:表:n 用于存儲用于存儲DELETEDELETE和和UPDATEUPDATE語句所影響的語句所影響的行的復(fù)本行
51、的復(fù)本n 在執(zhí)行在執(zhí)行DELETEDELETE或或UPDATE UPDATE 語句時,行從語句時,行從觸發(fā)器表中刪除,并傳輸?shù)接|發(fā)器表中刪除,并傳輸?shù)?DELETED DELETED 表中表中n DELETEDELETE表和觸發(fā)器表通常沒有相同的行表和觸發(fā)器表通常沒有相同的行INSERTEDINSERTED表和表和DELETEDDELETED表表5656o插入操作插入操作(INSERT)(INSERT):INSERTEDINSERTED表有數(shù)據(jù),表有數(shù)據(jù),DELETEDDELETED表無數(shù)據(jù)表無數(shù)據(jù) o刪除操作刪除操作(DELETE)(DELETE):INSERTEDINSERTED表無數(shù)據(jù),
52、表無數(shù)據(jù),DELETEDDELETED表有數(shù)據(jù)表有數(shù)據(jù) o更新操作更新操作(UPDATE) (UPDATE) :INSERTEDINSERTED表有數(shù)表有數(shù)據(jù)據(jù)( (新數(shù)據(jù)新數(shù)據(jù)) ),DELETEDDELETED表有數(shù)據(jù)表有數(shù)據(jù)( (舊數(shù)據(jù)舊數(shù)據(jù)) )INSERTEDINSERTED表和表和DELETEDDELETED表表5757UPDATEUPDATE觸發(fā)器的工作過程觸發(fā)器的工作過程oUPDATEUPDATE觸發(fā)器的工作過程觸發(fā)器的工作過程n 當(dāng)在定義了觸發(fā)器的表上執(zhí)行當(dāng)在定義了觸發(fā)器的表上執(zhí)行UPDATEUPDATE語句語句的時候,原行的時候,原行( (前像前像) )被移到被移到DETELEDDETELED表中,表中,而更新的行而更新的行( (后像后像) )則插入則插入INSERTEDINSERTED表中表中n 觸發(fā)器可以檢索觸發(fā)器可以檢索DELETEDDELET
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年03月山東齊商銀行濟寧分行招考筆試歷年參考題庫附帶答案詳解
- 2024-2025學(xué)年揚州市儀征市三年級數(shù)學(xué)第一學(xué)期期末經(jīng)典模擬試題含解析
- 財務(wù)會計個人述職報告(合集7篇)
- 2024-2025學(xué)年土默特右旗三年級數(shù)學(xué)第一學(xué)期期末經(jīng)典試題含解析
- 職員辭職申請書(15篇)
- 我有一個想法500字滿分寫作素材12篇范文
- 單位辦公室人員個人工作計劃范文5篇
- 2024年荒坡土地承包經(jīng)營權(quán)協(xié)議
- 下車間實習(xí)報告集錦十篇
- 護士個人工作總結(jié)15篇
- 國家開放大學(xué)《理工英語3》章節(jié)測試參考答案
- 濕法脫硫用水水質(zhì)要求
- 信息化系統(tǒng)機房標(biāo)識的相關(guān)規(guī)范
- 城管局個人工作總結(jié)
- MT_T 1186-2020 露天煤礦運輸安全技術(shù)規(guī)范_(高清版)
- 冷庫項目專項扶持資金申請報告(模板范本)
- 鉑銠合金漏板.
- (完整版)建筑力學(xué)(習(xí)題答案)
- 少年宮籃球活動教案
- 國有建設(shè)企業(yè)《大宗材料及設(shè)備采購招標(biāo)管理辦法》
- 民間秘術(shù)絕招大全
評論
0/150
提交評論