版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、An Introduction to Database System數(shù)據(jù)庫(kù)系統(tǒng)概論第五版數(shù)據(jù)庫(kù)系統(tǒng)概論第五版An Introduction to Database System數(shù)據(jù)庫(kù)完整性數(shù)據(jù)庫(kù)完整性v數(shù)據(jù)庫(kù)的完整性數(shù)據(jù)庫(kù)的完整性n數(shù)據(jù)的數(shù)據(jù)的正確性(輸入正確、存儲(chǔ)正確)正確性(輸入正確、存儲(chǔ)正確)l是指數(shù)據(jù)是符合現(xiàn)實(shí)世界語(yǔ)義,反映了當(dāng)前實(shí)際狀況的是指數(shù)據(jù)是符合現(xiàn)實(shí)世界語(yǔ)義,反映了當(dāng)前實(shí)際狀況的n數(shù)據(jù)的數(shù)據(jù)的相容性(符合要求、規(guī)則)相容性(符合要求、規(guī)則)l是指數(shù)據(jù)庫(kù)同一對(duì)象在不同關(guān)系表中的數(shù)據(jù)是符合邏輯的是指數(shù)據(jù)庫(kù)同一對(duì)象在不同關(guān)系表中的數(shù)據(jù)是符合邏輯的例如,例如,l學(xué)生的學(xué)號(hào)必須唯一學(xué)生的
2、學(xué)號(hào)必須唯一l性別只能是男或女,同一個(gè)人性別不同表要統(tǒng)一。性別只能是男或女,同一個(gè)人性別不同表要統(tǒng)一。l本科學(xué)生年齡的取值范圍為本科學(xué)生年齡的取值范圍為1450的整數(shù),只能是數(shù)字的整數(shù),只能是數(shù)字l學(xué)生所選的課程必須是學(xué)校開(kāi)設(shè)的課程,學(xué)生所在的院系學(xué)生所選的課程必須是學(xué)校開(kāi)設(shè)的課程,學(xué)生所在的院系必須是學(xué)校已成立的院系必須是學(xué)校已成立的院系l月份只能是月份只能是1-12,否則無(wú)效,否則無(wú)效An Introduction to Database System數(shù)據(jù)庫(kù)完整性(續(xù))數(shù)據(jù)庫(kù)完整性(續(xù))v數(shù)據(jù)的完整性和安全性是兩個(gè)不同概念數(shù)據(jù)的完整性和安全性是兩個(gè)不同概念n數(shù)據(jù)的完整性數(shù)據(jù)的完整性l防止數(shù)
3、據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù),也就是防止數(shù)據(jù)庫(kù)防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù),也就是防止數(shù)據(jù)庫(kù)中存在不正確的數(shù)據(jù)中存在不正確的數(shù)據(jù)l防范對(duì)象:防范對(duì)象:不合語(yǔ)義的、不正確不合語(yǔ)義的、不正確的數(shù)據(jù)的數(shù)據(jù)n數(shù)據(jù)的安全性數(shù)據(jù)的安全性l保護(hù)數(shù)據(jù)庫(kù)保護(hù)數(shù)據(jù)庫(kù) 防止惡意的破壞和非法的存取防止惡意的破壞和非法的存取l防范對(duì)象:防范對(duì)象:非法用戶和非法操作非法用戶和非法操作An Introduction to Database System數(shù)據(jù)庫(kù)完整性數(shù)據(jù)庫(kù)完整性(續(xù)續(xù))v為維護(hù)數(shù)據(jù)庫(kù)的完整性,數(shù)據(jù)庫(kù)管理系統(tǒng)必須:為維護(hù)數(shù)據(jù)庫(kù)的完整性,數(shù)據(jù)庫(kù)管理系統(tǒng)必須:1.提供定義完整性約束條件的機(jī)制提供定義完整性約束條件
4、的機(jī)制l完整性約束條件也稱為完整性規(guī)則,是數(shù)據(jù)庫(kù)中的數(shù)據(jù)完整性約束條件也稱為完整性規(guī)則,是數(shù)據(jù)庫(kù)中的數(shù)據(jù)必須滿足的必須滿足的語(yǔ)義約束條件語(yǔ)義約束條件lSQL標(biāo)準(zhǔn)使用了一系列概念來(lái)描述完整性,包括關(guān)系模標(biāo)準(zhǔn)使用了一系列概念來(lái)描述完整性,包括關(guān)系模型的實(shí)體完整性、參照完整性和用戶定義完整性型的實(shí)體完整性、參照完整性和用戶定義完整性l這些完整性一般由這些完整性一般由SQL的數(shù)據(jù)定義語(yǔ)言語(yǔ)句來(lái)實(shí)現(xiàn)的數(shù)據(jù)定義語(yǔ)言語(yǔ)句來(lái)實(shí)現(xiàn) An Introduction to Database System數(shù)據(jù)庫(kù)完整性數(shù)據(jù)庫(kù)完整性(續(xù)續(xù))2.提供完整性檢查的方法提供完整性檢查的方法l數(shù)據(jù)庫(kù)管理系統(tǒng)中檢查數(shù)據(jù)是否滿足完整
5、性約束條件的機(jī)制數(shù)據(jù)庫(kù)管理系統(tǒng)中檢查數(shù)據(jù)是否滿足完整性約束條件的機(jī)制稱為完整性檢查。稱為完整性檢查。l一般在一般在INSERT、UPDATE、DELETE語(yǔ)句執(zhí)行后開(kāi)始檢查,語(yǔ)句執(zhí)行后開(kāi)始檢查,也可以在事務(wù)提交時(shí)檢查也可以在事務(wù)提交時(shí)檢查 An Introduction to Database System數(shù)據(jù)庫(kù)完整性數(shù)據(jù)庫(kù)完整性(續(xù)續(xù))3.違約處理違約處理 l數(shù)據(jù)庫(kù)管理系統(tǒng)若發(fā)現(xiàn)用戶的操作違背了完整性約束條數(shù)據(jù)庫(kù)管理系統(tǒng)若發(fā)現(xiàn)用戶的操作違背了完整性約束條件,就采取一定的動(dòng)作件,就采取一定的動(dòng)作 拒絕拒絕(NO ACTION)執(zhí)行該操作執(zhí)行該操作 級(jí)連級(jí)連(CASCADE)執(zhí)行其他操作執(zhí)行其他
6、操作An Introduction to Database System第五章第五章 數(shù)據(jù)庫(kù)完整性數(shù)據(jù)庫(kù)完整性5.1 實(shí)體完整性實(shí)體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名字句完整性約束命名字句*5.5 域中的完整性限制域中的完整性限制5.6 斷言斷言5.7 觸發(fā)器觸發(fā)器5.8 小結(jié)小結(jié)An Introduction to Database System5.1 實(shí)體完整性實(shí)體完整性5.1.1 實(shí)體完整性定義實(shí)體完整性定義5.1.2 實(shí)體完整性檢查和違約處理實(shí)體完整性檢查和違約處理An Introduction to Database Sy
7、stem5.1.1 實(shí)體完整性定義實(shí)體完整性定義v 關(guān)系模型的實(shí)體完整性關(guān)系模型的實(shí)體完整性n 規(guī)定表的每一行在表中是唯一實(shí)體。通過(guò)索引、規(guī)定表的每一行在表中是唯一實(shí)體。通過(guò)索引、unique約束、主鍵約約束、主鍵約束、束、 identity(a,b)(ab均為正整數(shù),均為正整數(shù),a表示開(kāi)始數(shù),表示開(kāi)始數(shù),b表示增幅)等強(qiáng)表示增幅)等強(qiáng)制表中的實(shí)體唯一。制表中的實(shí)體唯一。n CREATE TABLE中用中用PRIMARY KEY定義定義v 單屬性構(gòu)成的碼有兩種說(shuō)明方法單屬性構(gòu)成的碼有兩種說(shuō)明方法 n 定義為定義為列級(jí)列級(jí)約束條件約束條件n 定義為定義為表級(jí)表級(jí)約束條件約束條件v 對(duì)多個(gè)屬性構(gòu)成
8、的碼只有一種說(shuō)明方法對(duì)多個(gè)屬性構(gòu)成的碼只有一種說(shuō)明方法n 定義為表級(jí)約束條件定義為表級(jí)約束條件 An Introduction to Database System實(shí)體完整性定義實(shí)體完整性定義(續(xù)續(xù))例例5.1 將將Student表中的表中的Sno屬性定義為碼屬性定義為碼 (1)在列級(jí)定義主碼在列級(jí)定義主碼 CREATE TABLE Student ( Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) NOT NULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) );An Introduction to Databas
9、e System實(shí)體完整性定義實(shí)體完整性定義(續(xù)續(xù))(2)在表級(jí)定義主碼在表級(jí)定義主碼 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 Database System實(shí)體完整性定義實(shí)體完整性定義(續(xù)續(xù))例例5.2 將將SC表中的表中的Sno,Cno屬性組定義為碼屬性組定義為碼 CREATE TABLE SC ( Sno CHAR(9) NOT NULL,
10、 Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY (Sno,Cno) /*只能在表級(jí)定義主碼只能在表級(jí)定義主碼*/ ); An Introduction to Database System5.1 實(shí)體完整性實(shí)體完整性5.1.1 實(shí)體完整性定義實(shí)體完整性定義5.1.2 實(shí)體完整性檢查和違約處理實(shí)體完整性檢查和違約處理An Introduction to Database System5.1.2 實(shí)體完整性檢查和違約處理實(shí)體完整性檢查和違約處理v插入或?qū)χ鞔a列進(jìn)行更新操作時(shí),關(guān)系數(shù)據(jù)庫(kù)管理插入或?qū)χ鞔a列進(jìn)行更新操作時(shí),關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)按照實(shí)體
11、完整性規(guī)則自動(dòng)進(jìn)行檢查。系統(tǒng)按照實(shí)體完整性規(guī)則自動(dòng)進(jìn)行檢查。v包括:包括:n檢查主碼值是否檢查主碼值是否唯一唯一,如果不唯一則拒絕插入或修改,如果不唯一則拒絕插入或修改n檢查主碼的各個(gè)屬性是否檢查主碼的各個(gè)屬性是否非空非空,只要有一個(gè)為空就拒絕,只要有一個(gè)為空就拒絕插入或修改插入或修改An Introduction to Database System實(shí)體完整性檢查和違約處理實(shí)體完整性檢查和違約處理(續(xù)續(xù))v檢查記錄中主碼值是否唯一的一種方法是進(jìn)行檢查記錄中主碼值是否唯一的一種方法是進(jìn)行全表全表掃描掃描n 依次判斷表中每一條記錄的主碼值與將插入記錄上的主碼依次判斷表中每一條記錄的主碼值與將插入
12、記錄上的主碼值(或者修改的新主碼值)是否相同值(或者修改的新主碼值)是否相同 An Introduction to Database System實(shí)體完整性檢查和違約處理實(shí)體完整性檢查和違約處理(續(xù)續(xù))v表掃描缺點(diǎn)表掃描缺點(diǎn)n 十分耗時(shí)十分耗時(shí)v為避免對(duì)基本表進(jìn)行全表掃描,為避免對(duì)基本表進(jìn)行全表掃描,RDBMS核心一核心一般都在般都在主碼主碼上自動(dòng)建立一個(gè)上自動(dòng)建立一個(gè)索引索引 ,一般作為主索一般作為主索引。引。An Introduction to Database System實(shí)體完整性檢查和違約處理實(shí)體完整性檢查和違約處理(續(xù)續(xù))v B+樹(shù)索引(多分樹(shù)、發(fā)散樹(shù))樹(shù)索引(多分樹(shù)、發(fā)散樹(shù))例如
13、,例如,n 新插入記錄的主碼值是新插入記錄的主碼值是25l通過(guò)主碼索引,從通過(guò)主碼索引,從B+樹(shù)的根結(jié)點(diǎn)開(kāi)始查找樹(shù)的根結(jié)點(diǎn)開(kāi)始查找l讀取讀取3個(gè)結(jié)點(diǎn):根結(jié)點(diǎn)(個(gè)結(jié)點(diǎn):根結(jié)點(diǎn)(51)、中間結(jié)點(diǎn)()、中間結(jié)點(diǎn)(12 30)、葉結(jié)點(diǎn)()、葉結(jié)點(diǎn)(15 20 25)l該主碼值已經(jīng)存在,不能插入這條記錄該主碼值已經(jīng)存在,不能插入這條記錄An Introduction to Database System第五章第五章 數(shù)據(jù)庫(kù)完整性數(shù)據(jù)庫(kù)完整性5.1 實(shí)體完整性實(shí)體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名字句完整性約束命名字句*5.5 域中的完整性限制
14、域中的完整性限制5.6 斷言斷言5.7 觸發(fā)器觸發(fā)器5.8 小結(jié)小結(jié)An Introduction to Database System5.2 參照完整性參照完整性5.2.1 參照完整性定義參照完整性定義也稱為引用完整,是指保持表之間已定義的關(guān)系??梢卜Q為引用完整,是指保持表之間已定義的關(guān)系??梢酝ㄟ^(guò)外鍵約束、以通過(guò)外鍵約束、check約束等。確保了鍵值在所有表中一約束等。確保了鍵值在所有表中一致,保證了表之間數(shù)據(jù)的一致性,防止了致,保證了表之間數(shù)據(jù)的一致性,防止了數(shù)據(jù)丟失或不存在數(shù)據(jù)丟失或不存在的數(shù)據(jù)在數(shù)據(jù)庫(kù)中擴(kuò)散。的數(shù)據(jù)在數(shù)據(jù)庫(kù)中擴(kuò)散。5.2.2 參照完整性檢查和違約處理參照完整性檢查和違
15、約處理An Introduction to Database System5.2.1 參照完整性定義參照完整性定義v關(guān)系模型的參照完整性定義關(guān)系模型的參照完整性定義n在在CREATE TABLE中用中用FOREIGN KEY短語(yǔ)定義哪些短語(yǔ)定義哪些列為外碼列為外碼n用用REFERENCES短語(yǔ)指明這些外碼參照哪些表的主碼短語(yǔ)指明這些外碼參照哪些表的主碼 An Introduction to Database System參照完整性定義參照完整性定義(續(xù)續(xù))例如,關(guān)系例如,關(guān)系SC中(中(Sno,Cno)是主碼。)是主碼。Sno,Cno分別參照分別參照Student表表 的主碼和的主碼和Cour
16、se表的主碼表的主碼 例例5.3定義定義SC中的參照完整性中的參照完整性 CREATE TABLE SC ( Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY (Sno, Cno), /*在表級(jí)定義實(shí)體完整性在表級(jí)定義實(shí)體完整性*/ FOREIGN KEY (Sno) REFERENCES Student(Sno), /*在表級(jí)定義參照完整性在表級(jí)定義參照完整性*/ FOREIGN KEY (Cno) REFERENCES Course(Cno) /*在表級(jí)定義參照完整性在表級(jí)定義參照完整性*/ );
17、An Introduction to Database System5.2 參照完整性參照完整性5.2.1 參照完整性定義參照完整性定義5.2.2 參照完整性檢查和違約處理參照完整性檢查和違約處理An Introduction to Database System參照完整性檢查和違約處理參照完整性檢查和違約處理v一個(gè)參照完整性將兩個(gè)表中的相應(yīng)元組聯(lián)系起來(lái)一個(gè)參照完整性將兩個(gè)表中的相應(yīng)元組聯(lián)系起來(lái)v對(duì)被參照表和參照表進(jìn)行對(duì)被參照表和參照表進(jìn)行增刪改增刪改操作時(shí)有可能破操作時(shí)有可能破壞參照完整性,必須進(jìn)行檢查壞參照完整性,必須進(jìn)行檢查 An Introduction to Database Sys
18、tem參照完整性檢查和違約處理參照完整性檢查和違約處理(續(xù)續(xù))v 例如,對(duì)表例如,對(duì)表SC和和Student有四種可能破壞參照完整性的情況有四種可能破壞參照完整性的情況 :n SC表中增加一個(gè)元組表中增加一個(gè)元組,該元組的,該元組的Sno屬性的值在表屬性的值在表Student中找不到中找不到一個(gè)元組,其一個(gè)元組,其Sno屬性的值與之相等。屬性的值與之相等。n 修改修改SC表中的一個(gè)元組表中的一個(gè)元組,修改后該元組的,修改后該元組的Sno屬性的值在表屬性的值在表Student中找不到一個(gè)元組,其中找不到一個(gè)元組,其Sno屬性的值與之相等。屬性的值與之相等。n 從從Student表中刪除一個(gè)元組表
19、中刪除一個(gè)元組,造成,造成SC表中某些元組的表中某些元組的Sno屬性的值屬性的值在表在表Student中找不到一個(gè)元組,其中找不到一個(gè)元組,其Sno屬性的值與之相等。屬性的值與之相等。n 修改修改Student表中一個(gè)元組的表中一個(gè)元組的Sno屬性屬性,造成,造成SC表中某些元組的表中某些元組的Sno屬性的值在表屬性的值在表Student中找不到一個(gè)元組,其中找不到一個(gè)元組,其Sno屬性的值與之相等屬性的值與之相等 。An Introduction to Database System參照完整性檢查和違約處理參照完整性檢查和違約處理(續(xù)續(xù))表表5.1 可能破壞參照完整性的情況及違約處理可能破壞
20、參照完整性的情況及違約處理被參照表(例如被參照表(例如Student)參照表(例如參照表(例如SC)違約處理違約處理可能破壞參照完整性可能破壞參照完整性 插入元組插入元組拒絕拒絕可能破壞參照完整性可能破壞參照完整性 修改外碼值修改外碼值拒絕拒絕刪除元組刪除元組 可能破壞參照完整性可能破壞參照完整性拒絕拒絕/級(jí)連刪除級(jí)連刪除/設(shè)置為空值設(shè)置為空值修改主碼值修改主碼值 可能破壞參照完整性可能破壞參照完整性拒絕拒絕/級(jí)連修改級(jí)連修改/設(shè)置為空值設(shè)置為空值A(chǔ)n Introduction to Database System參照完整性檢查和違約處理參照完整性檢查和違約處理(續(xù)續(xù))v參照完整性違約處理參照
21、完整性違約處理(1) 拒絕拒絕(NO ACTION)執(zhí)行執(zhí)行l(wèi)不允許該操作執(zhí)行。該策略一般設(shè)置為默認(rèn)策略不允許該操作執(zhí)行。該策略一般設(shè)置為默認(rèn)策略(2) 級(jí)聯(lián)級(jí)聯(lián)(CASCADE)操作操作l當(dāng)刪除或修改當(dāng)刪除或修改被參照表被參照表(Student)的一個(gè)元組造成了的一個(gè)元組造成了與參照表與參照表(SC)的不一致,則刪除或修改的不一致,則刪除或修改參照表參照表中的所中的所有造成不一致的元組有造成不一致的元組(3)設(shè)置為空值()設(shè)置為空值(SET-NULL)l當(dāng)刪除或修改被參照表的一個(gè)元組時(shí)造成了不一致,則當(dāng)刪除或修改被參照表的一個(gè)元組時(shí)造成了不一致,則將參照表中的所有造成不一致的元組的對(duì)應(yīng)屬性設(shè)
22、置為將參照表中的所有造成不一致的元組的對(duì)應(yīng)屬性設(shè)置為空值??罩怠n Introduction to Database System參照完整性檢查和違約處理參照完整性檢查和違約處理(續(xù)續(xù))例如,有下面例如,有下面2個(gè)關(guān)系個(gè)關(guān)系 學(xué)生(學(xué)生(學(xué)號(hào)學(xué)號(hào),姓名,性別,姓名,性別,專業(yè)號(hào)專業(yè)號(hào),年齡),年齡) 專業(yè)(專業(yè)(專業(yè)號(hào)專業(yè)號(hào),專業(yè)名),專業(yè)名)l假設(shè)專業(yè)表中某個(gè)元組被刪除,專業(yè)號(hào)為假設(shè)專業(yè)表中某個(gè)元組被刪除,專業(yè)號(hào)為12l按照設(shè)置為空值的策略,就要把學(xué)生表中專業(yè)號(hào)按照設(shè)置為空值的策略,就要把學(xué)生表中專業(yè)號(hào)=12的所有的所有元組的專業(yè)號(hào)設(shè)置為空值元組的專業(yè)號(hào)設(shè)置為空值l對(duì)應(yīng)語(yǔ)義:某個(gè)專業(yè)刪除了
23、,該專業(yè)的所有學(xué)生專業(yè)未定,對(duì)應(yīng)語(yǔ)義:某個(gè)專業(yè)刪除了,該專業(yè)的所有學(xué)生專業(yè)未定,等待重新分配專業(yè)等待重新分配專業(yè) 外碼外碼An Introduction to Database System參照完整性檢查和違約處理參照完整性檢查和違約處理(續(xù)續(xù))n對(duì)于參照完整性,除了應(yīng)該定義外碼,還應(yīng)定義對(duì)于參照完整性,除了應(yīng)該定義外碼,還應(yīng)定義外碼列外碼列是否允許空值是否允許空值 n參見(jiàn)愛(ài)課程網(wǎng)數(shù)據(jù)庫(kù)系統(tǒng)概論參見(jiàn)愛(ài)課程網(wǎng)數(shù)據(jù)庫(kù)系統(tǒng)概論5.2節(jié)節(jié)動(dòng)畫(huà)動(dòng)畫(huà)參照完整性參照完整性An Introduction to Database System參照完整性檢查和違約處理參照完整性檢查和違約處理(續(xù)續(xù))例例5.4 顯
24、式說(shuō)明參照完整性的違約處理示例顯式說(shuō)明參照完整性的違約處理示例 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 /*級(jí)聯(lián)刪除級(jí)聯(lián)刪除SC表中相應(yīng)的元組表中相應(yīng)的元組*/ ON UPDATE CASCADE, /*級(jí)聯(lián)更新級(jí)聯(lián)更新SC表中相應(yīng)的元組表中相應(yīng)的元組*/ FOREIGN KEY (Cno) REFERENCES Co
25、urse(Cno) ON DELETE NO ACTION /*當(dāng)刪除當(dāng)刪除course 表中的元組造成了與表中的元組造成了與SC表不一致時(shí)表不一致時(shí)拒絕刪除拒絕刪除*/ ON UPDATE CASCADE /*當(dāng)更新當(dāng)更新course表中的表中的cno時(shí),時(shí),級(jí)聯(lián)更新級(jí)聯(lián)更新SC表中相應(yīng)的元組表中相應(yīng)的元組*/ );An Introduction to Database System第五章第五章 數(shù)據(jù)庫(kù)完整性數(shù)據(jù)庫(kù)完整性5.1 實(shí)體完整性實(shí)體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名字句完整性約束命名字句*5.5 域中的完整性限制域中的完
26、整性限制5.6 斷言斷言5.7 觸發(fā)器觸發(fā)器5.8 小結(jié)小結(jié)An Introduction to Database System5.3 用戶定義的完整性用戶定義的完整性v用戶定義的完整性是:用戶定義的完整性是:n 針對(duì)針對(duì)某一具體應(yīng)用某一具體應(yīng)用的數(shù)據(jù)必須滿足的語(yǔ)義要求的數(shù)據(jù)必須滿足的語(yǔ)義要求 。是針對(duì)某個(gè)特定。是針對(duì)某個(gè)特定關(guān)系數(shù)據(jù)庫(kù)的約束條件,反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿關(guān)系數(shù)據(jù)庫(kù)的約束條件,反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的特定業(yè)務(wù)規(guī)則。足的特定業(yè)務(wù)規(guī)則。n 是除了前兩種以外,用戶認(rèn)為重要,讓系統(tǒng)保證的機(jī)制是除了前兩種以外,用戶認(rèn)為重要,讓系統(tǒng)保證的機(jī)制n 維護(hù)的方法有四種:維
27、護(hù)的方法有四種:約束、規(guī)則、默認(rèn)值、觸發(fā)器約束、規(guī)則、默認(rèn)值、觸發(fā)器v關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)提供了定義和檢驗(yàn)用戶定義關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)提供了定義和檢驗(yàn)用戶定義完整性的機(jī)制,不必由應(yīng)用程序承擔(dān)完整性的機(jī)制,不必由應(yīng)用程序承擔(dān)An Introduction to Database System5.3 用戶定義的完整性用戶定義的完整性5.3.1 屬性上的約束條件屬性上的約束條件5.3.2 元組上的約束條件元組上的約束條件 An Introduction to Database System1. 屬性上約束條件的定義屬性上約束條件的定義vCREATE TABLE時(shí)時(shí)定義屬性上的約束條件定義屬性上的約束條件
28、n列值非空(列值非空(NOT NULL)n列值唯一(列值唯一(UNIQUE)n檢查列值是否滿足一個(gè)條件表達(dá)式(檢查列值是否滿足一個(gè)條件表達(dá)式(CHECK)An Introduction to Database System屬性上約束條件的定義屬性上約束條件的定義(續(xù)續(xù))(1)不允許取空值不允許取空值 例例5.5 在定義在定義SC表時(shí),說(shuō)明表時(shí),說(shuō)明Sno、Cno、Grade屬性不允屬性不允許取空值。許取空值。 CREATE TABLE SC ( Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT NOT NULL, PRIMAR
29、Y KEY (Sno, Cno), /* 如果在表級(jí)定義實(shí)體完整性,隱含了如果在表級(jí)定義實(shí)體完整性,隱含了Sno,Cno不允許取空值,則在不允許取空值,則在 列級(jí)不允許取空值的定義列級(jí)不允許取空值的定義 可以不寫(xiě)可以不寫(xiě) * / ); An Introduction to Database System屬性上約束條件的定義屬性上約束條件的定義(續(xù)續(xù))(2)列值唯一列值唯一 例例5.6建立部門(mén)表建立部門(mén)表DEPT,要求部門(mén)名稱,要求部門(mén)名稱Dname列取值唯列取值唯一,部門(mén)編號(hào)一,部門(mén)編號(hào)Deptno列為主碼列為主碼 CREATE TABLE DEPT ( Deptno NUMERIC(2),
30、Dname CHAR(9) UNIQUE NOT NULL, /*要求要求Dname列值唯一列值唯一, 并且不能取空值并且不能取空值*/ Location CHAR(10), PRIMARY KEY (Deptno) );An Introduction to Database System屬性上約束條件的定義屬性上約束條件的定義(續(xù)續(xù))(3)用用CHECK短語(yǔ)指定列值應(yīng)該滿足的條件短語(yǔ)指定列值應(yīng)該滿足的條件 例例5.7 Student表的表的Ssex只允許取只允許取“男男”或或“女女”。 CREATE TABLE Student ( Sno CHAR(9) PRIMARY KEY, Sname
31、 CHAR(8) NOT NULL, Ssex CHAR(2) CHECK (Ssex IN (男男,女女), /*性別屬性性別屬性Ssex只允許取只允許取男男或或女女 */ Sage SMALLINT, Sdept CHAR(20) );An Introduction to Database System屬性上約束條件的定義屬性上約束條件的定義(續(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 Grad
32、e =100), /*Grade取值范圍是取值范圍是0到到100*/ PRIMARY KEY (Sno,Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) );An Introduction to Database Systemv屬性上的約束條件檢查和違約處理屬性上的約束條件檢查和違約處理n插入元組或修改屬性的值時(shí),關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)檢插入元組或修改屬性的值時(shí),關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)檢查屬性上的約束條件是否被滿足查屬性上的約束條件是否被滿足n如果不滿足則操作被如果不滿足則
33、操作被拒絕執(zhí)行拒絕執(zhí)行 2. 屬性上的約束條件檢查和違約處理屬性上的約束條件檢查和違約處理An Introduction to Database System5.3 用戶定義的完整性用戶定義的完整性5.3.1 屬性上的約束條件屬性上的約束條件5.3.2 元組上的約束條件元組上的約束條件An Introduction to Database System1. 元組上約束條件的定義元組上約束條件的定義v在在CREATE TABLE時(shí)可以用時(shí)可以用CHECK短語(yǔ)定義元短語(yǔ)定義元組上的約束條件,即組上的約束條件,即元組級(jí)的限制元組級(jí)的限制v同屬性值限制相比,元組級(jí)的限制可以設(shè)置多個(gè)同屬性值限制相比,元
34、組級(jí)的限制可以設(shè)置多個(gè)屬性之間的取值的相互約束條件屬性之間的取值的相互約束條件 An Introduction to Database System元組上約束條件的定義元組上約束條件的定義(續(xù)續(xù))例例5.9當(dāng)學(xué)生的性別是男時(shí),其名字不能以當(dāng)學(xué)生的性別是男時(shí),其名字不能以Ms.打頭。打頭。 CREATE TABLE Student ( Sno CHAR(9), Sname CHAR(8) NOT NULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno), CHECK (Ssex=女女 OR Sname NOT LIK
35、E Ms.%) /*定義了元組中定義了元組中Sname和和 Ssex兩個(gè)屬性值之間的約束條件兩個(gè)屬性值之間的約束條件*/ ); 性別是女性的元組都能通過(guò)該項(xiàng)檢查,因?yàn)樾詣e是女性的元組都能通過(guò)該項(xiàng)檢查,因?yàn)镾sex=女女成立成立; 當(dāng)性別是男性時(shí),要通過(guò)檢查名字一定不能以當(dāng)性別是男性時(shí),要通過(guò)檢查名字一定不能以Ms.打頭打頭An Introduction to Database Systemv元組上的約束條件檢查和違約處理元組上的約束條件檢查和違約處理n插入元組或修改屬性的值時(shí),關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)檢插入元組或修改屬性的值時(shí),關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)檢查元組上的約束條件是否被滿足查元組上的約束條件是否被
36、滿足n如果不滿足則操作被如果不滿足則操作被拒絕執(zhí)行拒絕執(zhí)行 2. 元組上約束條件檢查和違約處理元組上約束條件檢查和違約處理An Introduction to Database System第五章第五章 數(shù)據(jù)庫(kù)完整性數(shù)據(jù)庫(kù)完整性5.1 實(shí)體完整性實(shí)體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名子句完整性約束命名子句*5.5 域中的完整性限制域中的完整性限制5.6 斷言斷言5.7 觸發(fā)器觸發(fā)器5.8 小結(jié)小結(jié)An Introduction to Database System5.4 完整性約束命名子句完整性約束命名子句1.完整性約束命名子句完整
37、性約束命名子句 用來(lái)對(duì)完整性約束條件命名,可以靈活的增加、刪除一用來(lái)對(duì)完整性約束條件命名,可以靈活的增加、刪除一個(gè)完整性約束條件。個(gè)完整性約束條件。CONSTRAINT n包括包括NOT NULL、UNIQUE、PRIMARY KEY短語(yǔ)、短語(yǔ)、FOREIGN KEY短語(yǔ)、短語(yǔ)、CHECK短語(yǔ)等短語(yǔ)等An Introduction to Database System完整性約束命名子句完整性約束命名子句(續(xù)續(xù))例例5.10建立學(xué)生登記表建立學(xué)生登記表Student,要求學(xué)號(hào)在,要求學(xué)號(hào)在9000099999之間,之間,姓名不能取空值,年齡小于姓名不能取空值,年齡小于30,性別只能是,性別只能是
38、“男男”或或“女女”。 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完整性約束命名子句完整性約束命名子句(續(xù)續(xù))2. 修改表中的完整性限制修改表中的完整性限制n使用使用ALTER TABLE語(yǔ)句修改表中的完整性限制語(yǔ)
39、句修改表中的完整性限制例例5.12去掉例去掉例5.10 Student表中對(duì)性別的限制。表中對(duì)性別的限制。 ALTER TABLE Student DROP CONSTRAINT C4;An Introduction to Database System完整性約束命名子句完整性約束命名子句(續(xù)續(xù)) 例例5.13 修改表修改表Student中的約束條件,要求學(xué)號(hào)改為在中的約束條件,要求學(xué)號(hào)改為在900000999999之間,年齡由小于之間,年齡由小于30改為小于改為小于40n可以先刪除原來(lái)的約束條件,再增加新的約束條件可以先刪除原來(lái)的約束條件,再增加新的約束條件 ALTER TABLE Stud
40、ent 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第五章第五章 數(shù)據(jù)庫(kù)完整性數(shù)據(jù)庫(kù)完整性5.1 實(shí)體完整性實(shí)體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完
41、整性約束命名字句完整性約束命名字句*5.5 域中的完整性限制域中的完整性限制5.6 斷言斷言5.7 觸發(fā)器觸發(fā)器5.8 小結(jié)小結(jié)An Introduction to Database System斷言斷言vSQL中,可以使用中,可以使用 CREATE ASSERTION語(yǔ)句,語(yǔ)句,通過(guò)聲明性斷言來(lái)指定通過(guò)聲明性斷言來(lái)指定更具一般性的約束更具一般性的約束。v可以定義涉及可以定義涉及多個(gè)表多個(gè)表的或的或聚集操作聚集操作的比較復(fù)雜的的比較復(fù)雜的完整性約束。完整性約束。v斷言創(chuàng)建以后,任何對(duì)斷言中所涉及的關(guān)系的操斷言創(chuàng)建以后,任何對(duì)斷言中所涉及的關(guān)系的操作都會(huì)觸發(fā)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)對(duì)斷言的檢查,作都會(huì)
42、觸發(fā)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)對(duì)斷言的檢查,任何使斷言不為真值的操作都會(huì)被拒絕執(zhí)行任何使斷言不為真值的操作都會(huì)被拒絕執(zhí)行An Introduction to Database System斷言斷言(續(xù)續(xù))1. 創(chuàng)建斷言的語(yǔ)句格式創(chuàng)建斷言的語(yǔ)句格式nCREATE ASSERTIONn每個(gè)斷言每個(gè)斷言都被賦都被賦予一個(gè)名字,予一個(gè)名字,中的約束中的約束條件與條件與WHERE子句的條件表達(dá)式類似。子句的條件表達(dá)式類似。例例5.18 限制數(shù)據(jù)庫(kù)課程最多限制數(shù)據(jù)庫(kù)課程最多60名學(xué)生選修名學(xué)生選修CREATE ASSERTION ASSE_SC_DB_NUMCHECK (60 = (select count(*)
43、 /*此斷言的謂詞涉及聚集操此斷言的謂詞涉及聚集操作作count的的SQL語(yǔ)句語(yǔ)句*/ From Course,SC Where SC.Cno=Course.Cno and Course.Cname =數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)) );An Introduction to Database System例例5.19限制每一門(mén)課程最多限制每一門(mén)課程最多60名學(xué)生選修名學(xué)生選修CREATE ASSERTION ASSE_SC_CNUM1CHECK(60 = ALL (SELECT count(*) FROM SC GROUP by cno) ); /*此斷言的謂詞,涉及聚集操作此斷言的謂詞,涉及聚集操作coun
44、t 和分組函數(shù)和分組函數(shù)group by的的SQL語(yǔ)句語(yǔ)句*/斷言斷言(續(xù)續(xù))An Introduction to Database System例例5.20限制每個(gè)學(xué)期每一門(mén)課程最多限制每個(gè)學(xué)期每一門(mén)課程最多60名學(xué)生選修名學(xué)生選修 首先需要修改首先需要修改SC表的模式,增加一個(gè)表的模式,增加一個(gè)“學(xué)期(學(xué)期(TERM)”屬性屬性 ALTER TABLE SC ADD TERM DATE; 然后,定義斷言:然后,定義斷言: CREATE ASSERTION ASSE_SC_CNUM2 CHECK(60 = ALL (SELECT count(*) FROM SC GROUP by cno,T
45、ERM) );斷言斷言(續(xù)續(xù))An Introduction to Database System2. 刪除斷言的語(yǔ)句格式為刪除斷言的語(yǔ)句格式為nDROP ASSERTION ;n如果斷言很復(fù)雜,則系統(tǒng)在檢測(cè)和維護(hù)斷言的如果斷言很復(fù)雜,則系統(tǒng)在檢測(cè)和維護(hù)斷言的開(kāi)銷開(kāi)銷較較高,這是在使用斷言時(shí)應(yīng)該注意的高,這是在使用斷言時(shí)應(yīng)該注意的斷言斷言(續(xù)續(xù))An Introduction to Database System第五章第五章 數(shù)據(jù)庫(kù)完整性數(shù)據(jù)庫(kù)完整性5.1 實(shí)體完整性實(shí)體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名字句完整性約束命名字句*5.
46、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ū)動(dòng)事件驅(qū)動(dòng)的特殊過(guò)程的特殊過(guò)程n 觸發(fā)器保存在數(shù)據(jù)庫(kù)服務(wù)器中觸發(fā)器保存在數(shù)據(jù)庫(kù)服務(wù)器中n任何用戶對(duì)表的增、刪、改操作均由服務(wù)器自動(dòng)激活任何用戶對(duì)表的增、刪、改操作均由服務(wù)器自動(dòng)激活相應(yīng)的觸發(fā)器相應(yīng)的觸發(fā)器n觸發(fā)器可以實(shí)施更為觸發(fā)器可以實(shí)施更為復(fù)雜的復(fù)雜的檢查和操作,具有檢查和操作,具有更精細(xì)更精細(xì)和更強(qiáng)大和更強(qiáng)大的數(shù)據(jù)控制能力的數(shù)據(jù)
47、控制能力 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語(yǔ)法格式語(yǔ)法格式 CREATE TRIGGER BEFORE | AFTER ON REFERENCING NEW|OLD ROW AS FOR EACH ROW | STATEMENT WHEN 觸發(fā)器又叫做事件觸發(fā)器又叫做事件-條件條件-動(dòng)作(動(dòng)作(event-c
48、ondition-action)規(guī)則。)規(guī)則。當(dāng)特定的系統(tǒng)事件發(fā)生時(shí),對(duì)規(guī)則的條件進(jìn)行檢查,如果條件成立則執(zhí)當(dāng)特定的系統(tǒng)事件發(fā)生時(shí),對(duì)規(guī)則的條件進(jìn)行檢查,如果條件成立則執(zhí)行規(guī)則中的動(dòng)作,否則不執(zhí)行該動(dòng)作。規(guī)則中的動(dòng)作體可以很復(fù)雜,通行規(guī)則中的動(dòng)作,否則不執(zhí)行該動(dòng)作。規(guī)則中的動(dòng)作體可以很復(fù)雜,通常是一段常是一段SQL存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程。An Introduction to Database System定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))v定義觸發(fā)器的語(yǔ)法說(shuō)明定義觸發(fā)器的語(yǔ)法說(shuō)明(1)表的)表的擁有者擁有者才可以在表上創(chuàng)建觸發(fā)器才可以在表上創(chuàng)建觸發(fā)器(2)觸發(fā)器名)觸發(fā)器名l觸發(fā)器名可以包含模式名,也可以
49、不包含模式名觸發(fā)器名可以包含模式名,也可以不包含模式名l同一模式下,觸發(fā)器名必須是唯一的同一模式下,觸發(fā)器名必須是唯一的l觸發(fā)器名和表名必須在同一模式下觸發(fā)器名和表名必須在同一模式下(3)表名)表名l觸發(fā)器只能定義在觸發(fā)器只能定義在基本表基本表上,不能定義在視圖上上,不能定義在視圖上l當(dāng)基本表的數(shù)據(jù)發(fā)生變化時(shí),將激活定義在該表上相應(yīng)觸當(dāng)基本表的數(shù)據(jù)發(fā)生變化時(shí),將激活定義在該表上相應(yīng)觸 發(fā)事件的觸發(fā)器發(fā)事件的觸發(fā)器An Introduction to Database System定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))(4)觸發(fā)事件)觸發(fā)事件l觸發(fā)事件可以是觸發(fā)事件可以是INSERT、DELETE或或UP
50、DATE 也可以是這幾個(gè)事件的組合也可以是這幾個(gè)事件的組合l還可以還可以UPDATE OF,即進(jìn)一步指明修改哪,即進(jìn)一步指明修改哪些列時(shí)激活觸發(fā)器些列時(shí)激活觸發(fā)器lAFTER/BEFORE是觸發(fā)的時(shí)機(jī)是觸發(fā)的時(shí)機(jī)AFTER表示在觸發(fā)事件的操作執(zhí)行表示在觸發(fā)事件的操作執(zhí)行之后之后激活觸發(fā)器激活觸發(fā)器BEFORE表示在觸發(fā)事件的操作執(zhí)行表示在觸發(fā)事件的操作執(zhí)行之前之前激活觸發(fā)器激活觸發(fā)器An Introduction to Database System定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))(5)觸發(fā)器類型)觸發(fā)器類型行級(jí)觸發(fā)器(行級(jí)觸發(fā)器(FOR EACH ROW)語(yǔ)句級(jí)觸發(fā)器(語(yǔ)句級(jí)觸發(fā)器(FOR EA
51、CH STATEMENT) 例如例如,在例在例5.11的的TEACHER表上創(chuàng)建一個(gè)表上創(chuàng)建一個(gè)AFTER UPDATE觸發(fā)器,觸發(fā)事件觸發(fā)器,觸發(fā)事件是是UPDATE語(yǔ)句:語(yǔ)句: UPDATE TEACHER SET Deptno=5; 假設(shè)表假設(shè)表TEACHER有有1000行行 l 如果是語(yǔ)句級(jí)觸發(fā)器,那么執(zhí)行完該語(yǔ)句后,觸發(fā)動(dòng)作只發(fā)生一次如果是語(yǔ)句級(jí)觸發(fā)器,那么執(zhí)行完該語(yǔ)句后,觸發(fā)動(dòng)作只發(fā)生一次l如果是如果是行級(jí)行級(jí)觸發(fā)器,觸發(fā)動(dòng)作將執(zhí)行觸發(fā)器,觸發(fā)動(dòng)作將執(zhí)行1000次次(6)觸發(fā)條件)觸發(fā)條件l觸發(fā)器被激活時(shí),只有當(dāng)觸發(fā)器被激活時(shí),只有當(dāng)觸發(fā)條件為真觸發(fā)條件為真時(shí)觸發(fā)動(dòng)作體才執(zhí)行時(shí)觸發(fā)
52、動(dòng)作體才執(zhí)行;否則觸發(fā)否則觸發(fā)動(dòng)作體不執(zhí)行。動(dòng)作體不執(zhí)行。l如果省略如果省略WHEN觸發(fā)條件,則觸發(fā)動(dòng)作體在觸發(fā)器激活后立即執(zhí)行觸發(fā)條件,則觸發(fā)動(dòng)作體在觸發(fā)器激活后立即執(zhí)行An Introduction to Database System定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))(7)觸發(fā)動(dòng)作體)觸發(fā)動(dòng)作體l觸發(fā)動(dòng)作體可以是一個(gè)匿名觸發(fā)動(dòng)作體可以是一個(gè)匿名PL/SQL過(guò)程塊,過(guò)程塊, 也可以是對(duì)已也可以是對(duì)已創(chuàng)建存儲(chǔ)過(guò)程的調(diào)用創(chuàng)建存儲(chǔ)過(guò)程的調(diào)用l如果是行級(jí)觸發(fā)器,用戶可以在過(guò)程體中使用如果是行級(jí)觸發(fā)器,用戶可以在過(guò)程體中使用NEW和和OLD引用事件之后的新值和事件之前的舊值引用事件之后的新值和事件之前的舊
53、值l如果是語(yǔ)句級(jí)觸發(fā)器,則不能在觸發(fā)動(dòng)作體中使用如果是語(yǔ)句級(jí)觸發(fā)器,則不能在觸發(fā)動(dòng)作體中使用NEW或或OLD進(jìn)行引用進(jìn)行引用l如果觸發(fā)動(dòng)作體執(zhí)行失敗,激活觸發(fā)器的事件就會(huì)終止執(zhí)行如果觸發(fā)動(dòng)作體執(zhí)行失敗,激活觸發(fā)器的事件就會(huì)終止執(zhí)行,觸發(fā)器的目標(biāo)表或觸發(fā)器可能影響的其他對(duì)象不發(fā)生任何,觸發(fā)器的目標(biāo)表或觸發(fā)器可能影響的其他對(duì)象不發(fā)生任何變化變化 注意:不同的RDBMS產(chǎn)品觸發(fā)器語(yǔ)法各不相同An Introduction to Database System定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))例例5.21當(dāng)對(duì)表當(dāng)對(duì)表SC的的Grade屬性進(jìn)行修改時(shí),若分?jǐn)?shù)增加了屬性進(jìn)行修改時(shí),若分?jǐn)?shù)增加了10%則將此次操作
54、記則將此次操作記錄到下面表中:錄到下面表中: 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,NewG
55、rade) VALUES(OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade)An Introduction to Database System定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))例例5.22 將每次對(duì)表將每次對(duì)表Student的插入操作所增加的學(xué)生個(gè)數(shù)的插入操作所增加的學(xué)生個(gè)數(shù)記錄到表記錄到表StudentInsertLog中。中。CREATE TRIGGER Student_CountAFTER INSERT ON Student /*指明觸發(fā)器激活的時(shí)間是在執(zhí)行指明觸發(fā)器激活的時(shí)間是在執(zhí)行INSERT后后*/ REFERENCING
56、NEW TABLE AS DELTAFOR EACH STATEMENT /*語(yǔ)句級(jí)觸發(fā)器語(yǔ)句級(jí)觸發(fā)器, 即執(zhí)行完即執(zhí)行完INSERT語(yǔ)句后下面的觸發(fā)動(dòng)作體才執(zhí)行一次語(yǔ)句后下面的觸發(fā)動(dòng)作體才執(zhí)行一次*/INSERT INTO StudentInsertLog (Numbers) SELECT COUNT(*) FROM DELTAAn Introduction to Database System定義觸發(fā)器定義觸發(fā)器(續(xù)續(xù))例例5.23 定義一個(gè)定義一個(gè)BEFORE行級(jí)觸發(fā)器,為教師表行級(jí)觸發(fā)器,為教師表Teacher定義完整性規(guī)則定義完整性規(guī)則“教授的工資不得低于教授的工資不得低于4000元
57、,如果低元,如果低于于4000元,自動(dòng)改為元,自動(dòng)改為4000元元”。 CREATE TRIGGER Insert_Or_Update_Sal BEFORE INSERT OR UPDATE ON Teacher /*觸發(fā)事件是插入或更新操作觸發(fā)事件是插入或更新操作*/ FOR EACH ROW /*行級(jí)觸發(fā)器行級(jí)觸發(fā)器*/ BEGIN /*定義觸發(fā)動(dòng)作體,是定義觸發(fā)動(dòng)作體,是PL/SQL過(guò)程塊過(guò)程塊*/ IF (new.Job=教授教授) AND (new.Sal 4000) THEN new.Sal :=4000; END IF; END; An Introduction to Datab
58、ase 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.2 激活觸發(fā)器激活觸發(fā)器v觸發(fā)器的執(zhí)行,是由觸發(fā)器的執(zhí)行,是由觸發(fā)事件激活觸發(fā)事件激活的,并由數(shù)據(jù)的,并由數(shù)據(jù)庫(kù)服務(wù)器自動(dòng)執(zhí)行庫(kù)服務(wù)器自動(dòng)執(zhí)行v一個(gè)數(shù)據(jù)表上可能定義了一個(gè)數(shù)據(jù)表上可能定義了多個(gè)觸發(fā)器多個(gè)觸發(fā)器,遵循如下,遵循如下的執(zhí)行順序的執(zhí)行順序:(1) 執(zhí)行該表上的執(zhí)行該表上的BEFORE觸發(fā)器觸發(fā)器;(2) 激活觸發(fā)器的激活觸發(fā)器的SQL語(yǔ)句語(yǔ)句;(3) 執(zhí)行該表上的執(zhí)行該
59、表上的AFTER觸發(fā)器。觸發(fā)器。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.3 刪除觸發(fā)器刪除觸發(fā)器v刪除觸發(fā)器的刪除觸發(fā)器的SQL語(yǔ)法:語(yǔ)法: DROP TRIGGER ON ;v觸發(fā)器必須是一個(gè)已經(jīng)創(chuàng)建的觸發(fā)器,并且只能觸發(fā)器必須是一個(gè)已經(jīng)創(chuàng)建的觸發(fā)器,并且只能由具有相應(yīng)權(quán)限的用戶刪除。由具有相應(yīng)權(quán)限的用戶刪除。An Introduction to Database Sy
60、stem第五章第五章 數(shù)據(jù)庫(kù)完整性數(shù)據(jù)庫(kù)完整性5.1 實(shí)體完整性實(shí)體完整性5.2 參照完整性參照完整性5.3 用戶定義的完整性用戶定義的完整性5.4 完整性約束命名字句完整性約束命名字句*5.5 域中的完整性限制域中的完整性限制5.6 斷言斷言5.7 觸發(fā)器觸發(fā)器5.8 小結(jié)小結(jié)An Introduction to Database System5.8 小結(jié)小結(jié)v數(shù)據(jù)庫(kù)的完整性是為了保證數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)數(shù)據(jù)庫(kù)的完整性是為了保證數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)是正確的、有效的是正確的、有效的v關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)完整性實(shí)現(xiàn)的機(jī)制關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)完整性實(shí)現(xiàn)的機(jī)制n完整性約束定義機(jī)制(建表時(shí)定義、約束子語(yǔ)句、斷
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- DB32T-防汛抗旱特征水位核定規(guī)程編制說(shuō)明
- 海南省??谑?024-2025學(xué)年四年級(jí)(上)期末語(yǔ)文試卷(含答案)
- 2025年社會(huì)服務(wù)行業(yè)投資策略報(bào)告:穩(wěn)舵定錨行致遠(yuǎn)奮楫揚(yáng)帆譜新篇
- 球的表面積和體積課件
- 【大學(xué)課件】單片機(jī)的系統(tǒng)擴(kuò)展
- 經(jīng)濟(jì)學(xué)馬曉蓮課件房地產(chǎn)市場(chǎng)研究分析
- 中國(guó)證券市場(chǎng)供需格局及未來(lái)發(fā)展趨勢(shì)報(bào)告
- 2025年容積泵項(xiàng)目可行性研究報(bào)告
- 中國(guó)陶瓷耐磨磚項(xiàng)目投資可行性研究報(bào)告
- 2025共同出資合作開(kāi)發(fā)地塊合同模板
- 四川省成都市龍泉驛區(qū)2023-2024學(xué)年三年級(jí)數(shù)學(xué)第一學(xué)期期末監(jiān)測(cè)試題含答案
- 鍋爐控制器modbus協(xié)議支持說(shuō)明
- 粉末涂料有限公司危廢庫(kù)安全風(fēng)險(xiǎn)分級(jí)管控清單
- 750更換齒輪箱作業(yè)指導(dǎo)書(shū)
- GB/T 20706-2023可可粉質(zhì)量要求
- 安全生產(chǎn)信息管理制度全
- 猜歌名教學(xué)講解課件
- 世界主要國(guó)家洲別、名稱、首都、代碼、區(qū)號(hào)、時(shí)差匯總表
- 2023學(xué)年廣東省廣州市越秀區(qū)鐵一中學(xué)九年級(jí)(上)物理期末試題及答案解析
- 《報(bào)告文學(xué)研究》(07562)自考考試復(fù)習(xí)題庫(kù)(含答案)
- 應(yīng)急避難場(chǎng)所項(xiàng)目建議書(shū)
評(píng)論
0/150
提交評(píng)論