




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)庫概論1第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性5.1 5.1 實(shí)體完整性實(shí)體完整性 5.2 5.2 參照完整性參照完整性5.3 5.3 用戶定義的完整性用戶定義的完整性5.4 5.4 完整性約束命名子句完整性約束命名子句5.6 5.6 觸發(fā)器觸發(fā)器數(shù)據(jù)庫概論2數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性p數(shù)據(jù)庫的完整性:數(shù)據(jù)庫的完整性:指數(shù)據(jù)庫的指數(shù)據(jù)庫的正確性、有效性正確性、有效性和和相容性相容性,其目的是防止錯(cuò)誤的其目的是防止錯(cuò)誤的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫數(shù)據(jù)進(jìn)入數(shù)據(jù)庫即完整性體現(xiàn)是數(shù)據(jù)庫能否真實(shí)地反映現(xiàn)實(shí)世界。其中:即完整性體現(xiàn)是數(shù)據(jù)庫能否真實(shí)地反映現(xiàn)實(shí)世界。其中:正確性:指數(shù)據(jù)的合法性正確性:指數(shù)據(jù)的合法性有效
2、性:指數(shù)據(jù)是否屬于所定義域的有效范圍有效性:指數(shù)據(jù)是否屬于所定義域的有效范圍相容性:指表示同一事實(shí)的兩個(gè)數(shù)據(jù)應(yīng)當(dāng)一致,不一致即相容性:指表示同一事實(shí)的兩個(gè)數(shù)據(jù)應(yīng)當(dāng)一致,不一致即是不相容的是不相容的p完整性被破壞的原因:完整性被破壞的原因:由更新操作不遵守完整性約束條件引起的由更新操作不遵守完整性約束條件引起的數(shù)據(jù)庫概論3(1)概念不同:概念不同:v數(shù)據(jù)庫的完整性:數(shù)據(jù)庫的完整性: 是為了防止數(shù)據(jù)庫中存在部分不符合語義的數(shù)據(jù),防止是為了防止數(shù)據(jù)庫中存在部分不符合語義的數(shù)據(jù),防止錯(cuò)誤信息的輸入和輸出。用以保證數(shù)據(jù)的正確、有效。錯(cuò)誤信息的輸入和輸出。用以保證數(shù)據(jù)的正確、有效。防防范對(duì)象是不合語義的數(shù)
3、據(jù)。范對(duì)象是不合語義的數(shù)據(jù)。v數(shù)據(jù)庫的安全性:數(shù)據(jù)庫的安全性: 是為了保護(hù)數(shù)據(jù)庫防止惡意的破壞和非法的存取。是為了保護(hù)數(shù)據(jù)庫防止惡意的破壞和非法的存取。防范防范對(duì)象是非法用戶和非法操作。對(duì)象是非法用戶和非法操作。(2)聯(lián)系:聯(lián)系: 二者又是密切相關(guān)的,都是使得系統(tǒng)隨時(shí)可正常運(yùn)轉(zhuǎn),二者又是密切相關(guān)的,都是使得系統(tǒng)隨時(shí)可正常運(yùn)轉(zhuǎn),防止機(jī)密信息泄露和破壞。防止機(jī)密信息泄露和破壞。數(shù)據(jù)安全性與完整性區(qū)別數(shù)據(jù)安全性與完整性區(qū)別數(shù)據(jù)庫概論4DBMSDBMS為維護(hù)數(shù)據(jù)庫的完整性所做的工作為維護(hù)數(shù)據(jù)庫的完整性所做的工作p提供定義完整性約束條件的機(jī)制提供定義完整性約束條件的機(jī)制SQL標(biāo)準(zhǔn)使用標(biāo)準(zhǔn)使用DDL來描述
4、完整性來描述完整性p提供完整性檢查的方法提供完整性檢查的方法DBMS中檢查數(shù)據(jù)是否滿足完整性約束條件的機(jī)制中檢查數(shù)據(jù)是否滿足完整性約束條件的機(jī)制p違約處理違約處理DBMS若發(fā)現(xiàn)用戶的操作違背了完整性約束條件,就采取若發(fā)現(xiàn)用戶的操作違背了完整性約束條件,就采取措施進(jìn)行違約處理措施進(jìn)行違約處理數(shù)據(jù)庫概論55.1 5.1 實(shí)體完整性實(shí)體完整性v關(guān)系模型的實(shí)體完整性在關(guān)系模型的實(shí)體完整性在CREATE TABLECREATE TABLE中用中用PRIMARY KEYPRIMARY KEY定定義義v單屬性構(gòu)成的碼:?jiǎn)螌傩詷?gòu)成的碼:v列級(jí)約束條件列級(jí)約束條件v表級(jí)約束條件表級(jí)約束條件v多屬性構(gòu)成的碼:多屬
5、性構(gòu)成的碼:v表級(jí)約束條件表級(jí)約束條件數(shù)據(jù)庫概論6例例1將將Student 表中的表中的Sno屬性定義為碼屬性定義為碼 CREATE TABLE Student (Sno CHAR(9) , Sname CHAR(20) NOT NULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) );PRIMARY KEY(Sno)例例2將將SC 表中的表中的Sno,Cno屬性定義為碼屬性定義為碼 CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMAR
6、Y KEY (Sno, Cno) );列級(jí)定義主碼列級(jí)定義主碼表級(jí)定義主碼表級(jí)定義主碼表級(jí)定義主碼表級(jí)定義主碼PRIMARY KEY(Sno)數(shù)據(jù)庫概論7實(shí)體完整性檢查和違約處理實(shí)體完整性檢查和違約處理用用PRIMARYKEY短語定義了關(guān)系的主碼之后,每當(dāng)用戶程短語定義了關(guān)系的主碼之后,每當(dāng)用戶程序?qū)颈磉M(jìn)行插入或更新操作之前,序?qū)颈磉M(jìn)行插入或更新操作之前,RDBMS會(huì)對(duì)實(shí)體完整性會(huì)對(duì)實(shí)體完整性進(jìn)行檢查:進(jìn)行檢查:檢查主碼值是否唯一,如果不唯一則拒絕插入或修改檢查主碼值是否唯一,如果不唯一則拒絕插入或修改檢查主碼的各個(gè)屬性是否為空,只要有一個(gè)為空就拒絕插入檢查主碼的各個(gè)屬性是否為空,只要
7、有一個(gè)為空就拒絕插入或修改或修改檢查主碼值是否唯一的方法:檢查主碼值是否唯一的方法:全表掃描全表掃描為主碼建立一個(gè)索引為主碼建立一個(gè)索引數(shù)據(jù)庫概論85.2 5.2 參照完整性參照完整性v關(guān)系模型的參照完整性在關(guān)系模型的參照完整性在CREATE TABLECREATE TABLE中用中用FOREIGN KEYFOREIGN KEY定定義外碼,用義外碼,用REFERENCESREFERENCES指明外碼參照哪些表的主碼指明外碼參照哪些表的主碼例例3 3定義定義SCSC中的參照完整性中的參照完整性CREATE TABLE SCCREATE TABLE SC (Sno CHAR(9) (Sno CHA
8、R(9) NOT NULLNOT NULL, Cno CHAR(4) NOT NULL,Cno CHAR(4) NOT NULL, Grade SMALLINT, Grade SMALLINT, PRIMARY KEY (Sno, Cno), PRIMARY KEY (Sno, Cno), / /* *在表級(jí)定義實(shí)體完整性在表級(jí)定義實(shí)體完整性* */ / FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Sno) REFERENCES Student(Sno),/ /* *在表級(jí)定義參照完整性在表級(jí)定義參照完整性* */ / FOR
9、EIGN KEY (Cno) REFERENCES Course(Cno) FOREIGN KEY (Cno) REFERENCES Course(Cno) / /* *在表級(jí)定義參照完整性在表級(jí)定義參照完整性* */ / ); );數(shù)據(jù)庫概論9參照完整性檢查和違約處理參照完整性檢查和違約處理對(duì)參照表和被參照表進(jìn)行增刪改操作時(shí)必須進(jìn)行檢查對(duì)參照表和被參照表進(jìn)行增刪改操作時(shí)必須進(jìn)行檢查被參照表(被參照表(Student)參照表(參照表(SC)違約處理違約處理可能破壞參照完整性可能破壞參照完整性插入元組插入元組拒絕拒絕可能破壞參照完整性可能破壞參照完整性修改外碼值修改外碼值拒絕拒絕刪除元組刪除元組
10、可能破壞參照完整性可能破壞參照完整性拒絕拒絕/級(jí)連刪除級(jí)連刪除/設(shè)置為空值設(shè)置為空值修改主碼值修改主碼值可能破壞參照完整性可能破壞參照完整性拒絕拒絕/級(jí)連刪除級(jí)連刪除/設(shè)置為空值設(shè)置為空值違約處理:違約處理:拒絕執(zhí)行:拒絕執(zhí)行:不允許操作不允許操作(系統(tǒng)默認(rèn)策略)(系統(tǒng)默認(rèn)策略)級(jí)連操作:級(jí)連操作:刪除或修改參照表中的所有造成不一致的元組刪除或修改參照表中的所有造成不一致的元組設(shè)置為空值:設(shè)置為空值:將參照表中的所有造成不一致的元組的對(duì)應(yīng)屬將參照表中的所有造成不一致的元組的對(duì)應(yīng)屬性設(shè)置為空值性設(shè)置為空值數(shù)據(jù)庫概論10(1)(1)外碼允許取空值:外碼允許取空值: 學(xué)生學(xué)生( (學(xué)號(hào)學(xué)號(hào),姓名,性
11、別,專業(yè)號(hào),年齡,姓名,性別,專業(yè)號(hào),年齡) ) 專業(yè)專業(yè)( (專業(yè)號(hào)專業(yè)號(hào),專業(yè)名,專業(yè)名) ) 學(xué)生關(guān)系學(xué)生關(guān)系( (參照參照)專業(yè)關(guān)系專業(yè)關(guān)系( (被參照被參照) )(2)(2)外碼不允許取空值:外碼不允許取空值: 學(xué)生關(guān)系學(xué)生關(guān)系( (被參照被參照) )選課關(guān)系選課關(guān)系( (參照參照) )對(duì)于參照完整性,除應(yīng)該定義外碼,還應(yīng)定義外碼是否允許取對(duì)于參照完整性,除應(yīng)該定義外碼,還應(yīng)定義外碼是否允許取空值。一般地,系統(tǒng)采用默認(rèn)方式,即拒絕。如果想讓系統(tǒng)采空值。一般地,系統(tǒng)采用默認(rèn)方式,即拒絕。如果想讓系統(tǒng)采用其它方式則必須在建表之時(shí)顯式的說明用其它方式則必須在建表之時(shí)顯式的說明外碼能否接受空
12、值的問題外碼能否接受空值的問題修改修改修改修改數(shù)據(jù)庫概論11例例4顯式說明參照完整性的違約處理示例顯式說明參照完整性的違約處理示例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í)定義參照完整性*/ ON DELETE CASCADE/*當(dāng)刪除當(dāng)刪除Student表中的元組時(shí),級(jí)連刪
13、除表中的元組時(shí),級(jí)連刪除SC表中相應(yīng)的元組表中相應(yīng)的元組*/ ON UPDATE CASCADE,/*當(dāng)更新當(dāng)更新Student表中的表中的Sno時(shí),級(jí)連更新時(shí),級(jí)連更新SC表中相應(yīng)的元組表中相應(yīng)的元組*/ FOREIGN KEY (Cno) REFERENCES Course(Cno), /*在表級(jí)定義參照完整性在表級(jí)定義參照完整性*/ON DELETE NO ACTION/*當(dāng)刪除當(dāng)刪除Course表中的元組造成了與表中的元組造成了與SC表不一致時(shí)拒絕刪除表不一致時(shí)拒絕刪除*/ ON UPDATE CASCADE,/*當(dāng)更新當(dāng)更新Course表中的表中的Cno時(shí),級(jí)連更新時(shí),級(jí)連更新SC表
14、中相應(yīng)的元組表中相應(yīng)的元組*/ );數(shù)據(jù)庫概論125.3 5.3 用戶定義的完整性用戶定義的完整性v在在CREATE TABLECREATE TABLE中定義屬性的同時(shí)可以根據(jù)應(yīng)用要求,定義中定義屬性的同時(shí)可以根據(jù)應(yīng)用要求,定義屬性上的約束條件,即屬性值限制,包括:屬性上的約束條件,即屬性值限制,包括:v列值非空(列值非空(NOTNOTNULLNULL)v列值唯一(列值唯一(UNIQUEUNIQUE)v檢查列值是否滿足一個(gè)布爾表達(dá)式(檢查列值是否滿足一個(gè)布爾表達(dá)式(CHECKCHECK短語)短語)數(shù)據(jù)庫概論131.不允許取空值不允許取空值例例5 在定義在定義SC表時(shí),說明表時(shí),說明Sno、Cn
15、o、Grade屬性不允許取空值屬性不允許取空值CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINTNOT NULL, PRIMARY KEY (Sno, Cno) /*在表級(jí)定義實(shí)體完整性在表級(jí)定義實(shí)體完整性*/ );數(shù)據(jù)庫概論142.列值唯一列值唯一例例6 建立部門表建立部門表DEPT,要求部門名稱,要求部門名稱Dname列取值唯一,部列取值唯一,部門編號(hào)門編號(hào)Deptno列為主碼列為主碼CREATE TABLE DEPT (Deptno NUMERIC(2), Dname CHAR(9) UN
16、IQUE, /*要求要求Dname列值唯一列值唯一*/ Location CHAR(10), PRIMARY KEY (Deptno) /*在表級(jí)定義實(shí)體完整性在表級(jí)定義實(shí)體完整性*/ );數(shù)據(jù)庫概論153.用用CHECK短語指定列值應(yīng)該滿足的條件短語指定列值應(yīng)該滿足的條件例例7 Student表的表的Ssex只允許取只允許取“男男”和和“女女”。CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK (Ssex IN (男男, 女女), Sage SMALLINT, S
17、dept CHAR(20) );注:當(dāng)往表中插入元組或修改屬性的值時(shí),注:當(dāng)往表中插入元組或修改屬性的值時(shí),RDBMS就會(huì)檢查就會(huì)檢查屬性屬性上的約束條件是否被滿足,如果不滿足則操作被拒絕上的約束條件是否被滿足,如果不滿足則操作被拒絕數(shù)據(jù)庫概論16元組上的條件的定義:元組上的條件的定義:在在CREATETABLE語句中可以用語句中可以用CHECK短語定義元組短語定義元組上的約束,即元組級(jí)的限制。同屬性值限制相比,元組級(jí)的上的約束,即元組級(jí)的限制。同屬性值限制相比,元組級(jí)的限制可以設(shè)置不同屬性之間的取值的相互約束條件限制可以設(shè)置不同屬性之間的取值的相互約束條件例例9當(dāng)學(xué)生的性別是男時(shí),其名字不能
18、以當(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 LIKE Ms.%/*定義了元組中定義了元組中Sname和和Ssex兩個(gè)屬性值之間的約束條件兩個(gè)屬性值之間的約束條件*/ );當(dāng)往表中插入元組或修改屬性的值時(shí),當(dāng)往表中插入元組或修改屬性的值時(shí),RDBMS就會(huì)檢查就會(huì)檢查元組元組上的約束條件是否被滿足
19、,如果不滿足則操作被拒絕上的約束條件是否被滿足,如果不滿足則操作被拒絕數(shù)據(jù)庫概論17完整性約束條件分類及含義完整性約束條件分類及含義粒度粒度狀態(tài)狀態(tài)屬性列級(jí)屬性列級(jí)元組級(jí)元組級(jí)關(guān)系表級(jí)關(guān)系表級(jí)靜態(tài)靜態(tài)靜態(tài)屬性列級(jí)約束靜態(tài)屬性列級(jí)約束屬性列定義屬性列定義數(shù)據(jù)類型約束數(shù)據(jù)類型約束數(shù)據(jù)格式約束數(shù)據(jù)格式約束值域約束值域約束 空值約束空值約束是規(guī)定一個(gè)元組是規(guī)定一個(gè)元組的各個(gè)列值之間的各個(gè)列值之間應(yīng)滿足的條件的應(yīng)滿足的條件的約束約束 是在一個(gè)關(guān)系的各個(gè)元組是在一個(gè)關(guān)系的各個(gè)元組之間或若干個(gè)關(guān)系之間之間或若干個(gè)關(guān)系之間存在的各種聯(lián)系或約束存在的各種聯(lián)系或約束實(shí)體完整性約束實(shí)體完整性約束參照完整性約束參照完
20、整性約束函數(shù)依賴約束函數(shù)依賴約束 統(tǒng)計(jì)約束統(tǒng)計(jì)約束動(dòng)態(tài)動(dòng)態(tài)是修改列定義或列是修改列定義或列值時(shí)的約束值時(shí)的約束是在修改某個(gè)元是在修改某個(gè)元組時(shí)對(duì)元組的新組時(shí)對(duì)元組的新舊值之間應(yīng)滿足舊值之間應(yīng)滿足的約束的約束是對(duì)某個(gè)關(guān)系的新、舊狀態(tài)是對(duì)某個(gè)關(guān)系的新、舊狀態(tài)間應(yīng)滿足的約束條件間應(yīng)滿足的約束條件數(shù)據(jù)庫概論18SQL在在CREATETABLE語句中提供了完整性約束命名子句語句中提供了完整性約束命名子句CONSTRAINT,用來對(duì)完整性約束條件命名,從而可以靈活地增刪一個(gè)完整性約束條件用來對(duì)完整性約束條件命名,從而可以靈活地增刪一個(gè)完整性約束條件1.完整性約束命名子句完整性約束命名子句格式格式CONST
21、RAINT完整性約束條件名完整性約束條件名PRIMARY KEY 短語短語|FOREIGN KEY|CHECK短語短語例例10建立學(xué)生登記表建立學(xué)生登記表Student,要求學(xué)號(hào)在,要求學(xué)號(hào)在90 00099 999之間,之間,姓名不能取空值,年齡小于姓名不能取空值,年齡小于30,性別只能是,性別只能是“男男”或或“女女”CREATE TABLE Student (Sno NUMERIC(6) CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999), Sname CHAR(20) CONSTRAINT C2 NOT NULL, Sage NUMERIC
22、(3) CONSTRAINT C3 CHECK (Sage=3000) );外碼約束外碼約束EMPFKey,EMPFKey,列級(jí)約束列級(jí)約束C1C1數(shù)據(jù)庫概論202.修改表中的完整性限制修改表中的完整性限制應(yīng)用應(yīng)用ALTERTABLE語句修改表中的完整性語句修改表中的完整性例例1212去掉例去掉例1010中對(duì)表中對(duì)表StudentStudent中對(duì)性別的限制中對(duì)性別的限制 ALTERALTERTABLETABLEStudentStudent DROP CONSTRAINT C4; DROP CONSTRAINT C4;例例1313修改表修改表StudentStudent中的約束條件,要求學(xué)號(hào)改
23、為在中的約束條件,要求學(xué)號(hào)改為在900 900 000999 999000999 999之間,年齡由小于之間,年齡由小于3030改為小于改為小于4040ALTERALTERTABLETABLEStudentStudentDROP CONSTRAINT C1;DROP CONSTRAINT C1;ALTERALTERTABLETABLEStudentStudentADD CONSTRAINT ADD CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999)C1 CHECK(Sno BETWEEN 90000 AND 99999);ALTERALTERTAB
24、LETABLEStudentStudentDROP CONSTRAINT C3;DROP CONSTRAINT C3;ALTERALTERTABLETABLEStudentStudentADD CONSTRAINT ADD CONSTRAINT C3 CHECK(Sage40)C3 CHECK(Sage40);數(shù)據(jù)庫概論21q引入觸發(fā)器原因:引入觸發(fā)器原因:q在很多情況下,當(dāng)一個(gè)完整性約束被違背時(shí),在很多情況下,當(dāng)一個(gè)完整性約束被違背時(shí),DBMSDBMS除了除了終止事務(wù)外,還需要執(zhí)行一些其他操作。為了在數(shù)據(jù)庫完終止事務(wù)外,還需要執(zhí)行一些其他操作。為了在數(shù)據(jù)庫完整性約束被違背時(shí)能夠及時(shí)執(zhí)行必要的
25、操作,人們提出了整性約束被違背時(shí)能夠及時(shí)執(zhí)行必要的操作,人們提出了觸發(fā)器技術(shù)觸發(fā)器技術(shù)5.6 5.6 觸發(fā)器觸發(fā)器數(shù)據(jù)庫概論225.6 5.6 觸發(fā)器觸發(fā)器q功能:功能:q主要功能:能夠?qū)崿F(xiàn)由主碼和外碼所不能保證的、復(fù)雜的參主要功能:能夠?qū)崿F(xiàn)由主碼和外碼所不能保證的、復(fù)雜的參照完整性照完整性q強(qiáng)化約束:強(qiáng)制實(shí)現(xiàn)業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性強(qiáng)化約束:強(qiáng)制實(shí)現(xiàn)業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性q跟蹤變化:可以跟蹤數(shù)據(jù)庫內(nèi)的數(shù)據(jù)變化,阻止非法更新和跟蹤變化:可以跟蹤數(shù)據(jù)庫內(nèi)的數(shù)據(jù)變化,阻止非法更新和刪除刪除q級(jí)聯(lián)運(yùn)行:可以監(jiān)測(cè)數(shù)據(jù)庫內(nèi)的操作,并自動(dòng)將影響蔓延到級(jí)聯(lián)運(yùn)行:可以監(jiān)測(cè)數(shù)據(jù)庫內(nèi)的操作,并自動(dòng)將影響蔓延到多個(gè)表多個(gè)
26、表q存儲(chǔ)過程的調(diào)用:為了響應(yīng)數(shù)據(jù)庫更新,觸發(fā)器可以調(diào)用一存儲(chǔ)過程的調(diào)用:為了響應(yīng)數(shù)據(jù)庫更新,觸發(fā)器可以調(diào)用一個(gè)或多個(gè)存儲(chǔ)過程,甚至可調(diào)用個(gè)或多個(gè)存儲(chǔ)過程,甚至可調(diào)用DBMSDBMS外的外部過程外的外部過程數(shù)據(jù)庫概論235.6 5.6 觸發(fā)器觸發(fā)器p觸發(fā)器(觸發(fā)器(Trigger):是用戶定義在關(guān)系表上的一類由事件驅(qū)):是用戶定義在關(guān)系表上的一類由事件驅(qū)動(dòng)的特殊過程,或者說是一個(gè)能由系統(tǒng)自動(dòng)執(zhí)行對(duì)數(shù)據(jù)庫修改動(dòng)的特殊過程,或者說是一個(gè)能由系統(tǒng)自動(dòng)執(zhí)行對(duì)數(shù)據(jù)庫修改的語句,亦稱為的語句,亦稱為主動(dòng)規(guī)則主動(dòng)規(guī)則p一旦定義,任何用戶對(duì)表的增刪改操作均由服務(wù)器自動(dòng)激活一旦定義,任何用戶對(duì)表的增刪改操作均由服
27、務(wù)器自動(dòng)激活相應(yīng)的觸發(fā)器,在相應(yīng)的觸發(fā)器,在DBMS核心層進(jìn)行集中的完整性控制,它類核心層進(jìn)行集中的完整性控制,它類似于約束,但較之約束更加靈活,具有更精細(xì)和更強(qiáng)大的數(shù)據(jù)似于約束,但較之約束更加靈活,具有更精細(xì)和更強(qiáng)大的數(shù)據(jù)控制能力控制能力p觸發(fā)器結(jié)構(gòu):觸發(fā)器結(jié)構(gòu): 一個(gè)觸發(fā)器由兩部分組成:一個(gè)觸發(fā)器由兩部分組成:(1)觸發(fā)事件:指對(duì)數(shù)據(jù)庫的更新等操作,在這些操作進(jìn)行)觸發(fā)事件:指對(duì)數(shù)據(jù)庫的更新等操作,在這些操作進(jìn)行時(shí),觸發(fā)器將被激發(fā)。時(shí),觸發(fā)器將被激發(fā)。(2)觸發(fā)器條件和動(dòng)作:條件準(zhǔn)則)觸發(fā)器條件和動(dòng)作:條件準(zhǔn)則 ,以確定更新語句是否導(dǎo),以確定更新語句是否導(dǎo)致執(zhí)行觸發(fā)器動(dòng)作。條件成立,則由致
28、執(zhí)行觸發(fā)器動(dòng)作。條件成立,則由DBMS執(zhí)行觸發(fā)器動(dòng)作。執(zhí)行觸發(fā)器動(dòng)作。這些動(dòng)作可以這些動(dòng)作可以 是一系列對(duì)數(shù)據(jù)庫的操作是一系列對(duì)數(shù)據(jù)庫的操作數(shù)據(jù)庫概論24觸發(fā)器的定義觸發(fā)器的定義 CREATETRIGGER觸發(fā)器名觸發(fā)器名 BEFORE | AFTER | 觸發(fā)事件觸發(fā)事件 ON 表名表名 FOREACHROWSTATEMENT WHEN觸發(fā)條件觸發(fā)條件 觸發(fā)動(dòng)作體觸發(fā)動(dòng)作體其中:其中:1.1.表的擁有者即創(chuàng)建表的用戶才可以在表上創(chuàng)建觸發(fā)器,并且表的擁有者即創(chuàng)建表的用戶才可以在表上創(chuàng)建觸發(fā)器,并且一個(gè)表上只能創(chuàng)建一定數(shù)量的觸發(fā)器一個(gè)表上只能創(chuàng)建一定數(shù)量的觸發(fā)器2.2.觸發(fā)器名:觸發(fā)器名:可以包
29、含模式名,也可以不包含模式名。同一??梢园J矫?,也可以不包含模式名。同一模式下,觸發(fā)器名必須是唯一的;并且觸發(fā)器名和式下,觸發(fā)器名必須是唯一的;并且觸發(fā)器名和 必須在必須在同一模式下同一模式下3.3.表名:表名:當(dāng)這個(gè)表的數(shù)據(jù)發(fā)生變化時(shí),將激活定義在該表相應(yīng)當(dāng)這個(gè)表的數(shù)據(jù)發(fā)生變化時(shí),將激活定義在該表相應(yīng) 的觸發(fā)器,該表也稱為觸發(fā)器的目標(biāo)表的觸發(fā)器,該表也稱為觸發(fā)器的目標(biāo)表數(shù)據(jù)庫概論25觸發(fā)器的定義觸發(fā)器的定義 CREATETRIGGER觸發(fā)器名觸發(fā)器名 BEFORE | AFTER | 觸發(fā)事件觸發(fā)事件 ON 表名表名 FOREACHROWSTATEMENT WHEN觸發(fā)條件觸發(fā)條件 觸發(fā)
30、動(dòng)作體觸發(fā)動(dòng)作體4.4.觸發(fā)事件:觸發(fā)事件:可以是可以是INSERTINSERT,DELETEDELETE或或UPDATEUPDATE,也可以是這幾,也可以是這幾個(gè)事件的組合。個(gè)事件的組合。UPDATEUPDATE后面還可以有后面還可以有OFOF, 即進(jìn)即進(jìn)一步指明修改哪些列時(shí)觸發(fā)器激活一步指明修改哪些列時(shí)觸發(fā)器激活5.5.觸發(fā)器類型:觸發(fā)器類型:行級(jí)觸發(fā)器和語句級(jí)觸發(fā)器行級(jí)觸發(fā)器和語句級(jí)觸發(fā)器6.6.觸發(fā)條件:觸發(fā)條件:只有當(dāng)觸發(fā)條件為真時(shí),觸發(fā)動(dòng)作才執(zhí)行,反之只有當(dāng)觸發(fā)條件為真時(shí),觸發(fā)動(dòng)作才執(zhí)行,反之不執(zhí)行不執(zhí)行7.7.觸發(fā)動(dòng)作體:觸發(fā)動(dòng)作體:可以是一個(gè)匿名可以是一個(gè)匿名PL/SQLPL/
31、SQL過程塊,也可以是對(duì)已過程塊,也可以是對(duì)已創(chuàng)建存儲(chǔ)過程的調(diào)用創(chuàng)建存儲(chǔ)過程的調(diào)用數(shù)據(jù)庫概論26例例1818 定義一個(gè)定義一個(gè)BEFOREBEFORE行級(jí)觸發(fā)器,為老師表行級(jí)觸發(fā)器,為老師表TeacherTeacher定義完整定義完整性規(guī)則性規(guī)則“教授的工資不得低于教授的工資不得低于40004000元,如果低于元,如果低于40004000元,自動(dòng)元,自動(dòng)改為改為40004000元元” CREATE TRIGGER Insert_Or_Update_SalCREATE TRIGGER Insert_Or_Update_Sal BEFORE INSERT OR UPDATE ON Teacher
32、BEFORE INSERT OR UPDATE ON Teacher FOR EACH ROW FOR EACH ROW AS BEGIN AS BEGIN IF(new.pJob= IF(new.pJob=教授教授) AND (new.Sal4000) THEN) AND (new.Sal4000) THEN new.Sal:=4000; new.Sal:=4000; END IF; END IF; END; END;數(shù)據(jù)庫概論27例例1919 定義定義AFTERAFTER行級(jí)觸發(fā),當(dāng)教師表行級(jí)觸發(fā),當(dāng)教師表TeacherTeacher的工資發(fā)生變化后的工資發(fā)生變化后就自動(dòng)在工資變化表就自動(dòng)
33、在工資變化表Sal_logSal_log中增加一條相應(yīng)記錄中增加一條相應(yīng)記錄 CREATE TABLE Sal_logCREATE TABLE Sal_log (Eno NUMERIC(4) reference teacher(eno), (Eno NUMERIC(4) reference teacher(eno), Sal NUMERIC(7,2), Sal NUMERIC(7,2), Username char(10), Username char(10), Date TIMESTAMP); Date TIMESTAMP); CREATE TRIGGER Insert_SalCREATE
34、TRIGGER Insert_Sal AFTER INSERT ON Teacher AFTER INSERT ON Teacher FOR EACH ROW FOR EACH ROW AS BEGIN AS BEGIN INSERT INTO Sal_log VALUES(new.Eno,new.Sal, INSERT INTO Sal_log VALUES(new.Eno,new.Sal, CURRENT_USER,CURRENT_TIMESTAMP);CURRENT_USER,CURRENT_TIMESTAMP); END; END; CREATE TRIGGER Update_SalCREATE TRIGGER Update_Sal AFTER UPDATE ON Teacher AFTER UPDATE ON Teacher FOR EACH ROW FOR EACH ROW AS BEGIN AS BEGIN IF(new.Salold.Sal) THEN INSERT INTO Sal_log VALUES( IF(new.Salold.Sal) THEN INSERT INTO Sal_log VALUES( new.Eno,new.Sal,CUTTENT_USER,CURRENT_TIMESTAMP); n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 長(zhǎng)安大學(xué)興華學(xué)院《小語課程標(biāo)準(zhǔn)與教材研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 大連理工大學(xué)城市學(xué)院《復(fù)合材料界面》2023-2024學(xué)年第二學(xué)期期末試卷
- 統(tǒng)編版語文二年級(jí)下冊(cè)語文園地二《鳥鳴澗》課件
- 云南經(jīng)濟(jì)管理學(xué)院《大數(shù)據(jù)分析理論》2023-2024學(xué)年第二學(xué)期期末試卷
- 格賓籠石攔沙坎施工方案
- 湖南冶金職業(yè)技術(shù)學(xué)院《信息分析方法》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海戲劇學(xué)院《理論力學(xué)A》2023-2024學(xué)年第二學(xué)期期末試卷
- 撫州職業(yè)技術(shù)學(xué)院《建筑設(shè)計(jì)2》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海電影藝術(shù)職業(yè)學(xué)院《學(xué)科知識(shí)與教學(xué)能力綜合訓(xùn)練》2023-2024學(xué)年第二學(xué)期期末試卷
- 黑龍江生態(tài)工程職業(yè)學(xué)院《安裝工程結(jié)構(gòu)與施工》2023-2024學(xué)年第二學(xué)期期末試卷
- Illustrator設(shè)計(jì)教案(第一講)課件
- 我國(guó)的雙重國(guó)籍問題研究 邊防管理專業(yè)
- 廣東義務(wù)教育標(biāo)準(zhǔn)化學(xué)校
- 全電發(fā)票樣式
- (完整)藥劑學(xué)教案
- 提案改善課件全員版
- 2022年全國(guó)新高考Ⅰ卷:馮至《江上》
- 銅陵油庫重油罐區(qū)工藝設(shè)計(jì)
- 質(zhì)量手冊(cè)CCC認(rèn)證完整
- DB51∕T 2767-2021 安全生產(chǎn)風(fēng)險(xiǎn)分級(jí)管控體系通則
- 反興奮劑考試試題與解析
評(píng)論
0/150
提交評(píng)論