版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、An Introduction to Database System數(shù)據(jù)庫系統(tǒng)概論數(shù)據(jù)庫系統(tǒng)概論An Introduction to Database System第五章第五章 數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性數(shù)據(jù)庫的完整性數(shù)據(jù)庫的完整性數(shù)據(jù)的數(shù)據(jù)的正確性正確性和和相容性相容性An Introduction to Database Systemv數(shù)據(jù)的完整性和安全性是兩個(gè)不同概念 數(shù)據(jù)的完整性防止數(shù)據(jù)庫中存在不符合語義的數(shù)據(jù),也就是防止數(shù)據(jù)庫中存在不正確的數(shù)據(jù)防范對(duì)象:不合語義的、不正確的數(shù)據(jù) 數(shù)據(jù)的安全性保護(hù)數(shù)據(jù)庫防止惡意的破壞和非法的存取防范對(duì)象:非法用戶和非法操作數(shù)據(jù)庫完整性(續(xù))為
2、維護(hù)數(shù)據(jù)庫的完整性,為維護(hù)數(shù)據(jù)庫的完整性,DBMSDBMS必須:必須:n提供定義完整性約束條件的機(jī)制提供定義完整性約束條件的機(jī)制n提供完整性檢查的方法提供完整性檢查的方法n違約處理違約處理An Introduction to Database System第五章 數(shù)據(jù)庫完整性5.1 5.1 實(shí)體完整性實(shí)體完整性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é)An Introduction to Data
3、base System5.1 實(shí)體完整性5.1.1 5.1.1 實(shí)體完整性定義實(shí)體完整性定義5.1.2 5.1.2 實(shí)體完整性檢查和違約處理實(shí)體完整性檢查和違約處理An Introduction to Database System5.1.1 實(shí)體完整性定義關(guān)系模型的實(shí)體完整性關(guān)系模型的實(shí)體完整性CREATE TABLECREATE TABLE中用中用PRIMARY KEYPRIMARY KEY定義定義單屬性構(gòu)成的碼有兩種說明方法單屬性構(gòu)成的碼有兩種說明方法 定義為列級(jí)約束條件定義為列級(jí)約束條件定義為表級(jí)約束條件定義為表級(jí)約束條件對(duì)多個(gè)屬性構(gòu)成的碼只有一種說明方法對(duì)多個(gè)屬性構(gòu)成的碼只有一種說明
4、方法定義為表級(jí)約束條件定義為表級(jí)約束條件 An Introduction to Database System實(shí)體完整性定義(續(xù)) (1) (1)在列級(jí)定義主碼在列級(jí)定義主碼 CREATE TABLE StudentCREATE TABLE Student ( (SnoSno CHAR(9) PRIMARY KEY CHAR(9) PRIMARY KEY, SnameSname CHAR(20) NOT NULL CHAR(20) NOT NULL, SsexSsex CHAR(2) CHAR(2) , Sage SMALLINTSage SMALLINT, SdeptSdept CHAR(2
5、0) CHAR(20) ); );An Introduction to Database System例1 將Student表中的Sno屬性定義為碼實(shí)體完整性定義(續(xù))(2)(2)在表級(jí)定義主碼在表級(jí)定義主碼 CREATE TABLE StudentCREATE TABLE Student ( (SnoSno CHAR(9) CHAR(9), SnameSname CHAR(20) NOT NULL CHAR(20) NOT NULL, SsexSsex CHAR(2) CHAR(2) , Sage SMALLINTSage SMALLINT, SdeptSdept CHAR(20) CHAR
6、(20), PRIMARY KEY (PRIMARY KEY (SnoSno) ) ); ); An Introduction to Database System實(shí)體完整性定義(續(xù)) CREATE TABLE SC CREATE TABLE SC ( (SnoSno CHAR(9) NOT NULL CHAR(9) NOT NULL, CnoCno CHAR(4) NOT NULL CHAR(4) NOT NULL, Grade SMALLINTGrade SMALLINT, PRIMARY KEY (PRIMARY KEY (SnoSno,CnoCno) /) /* *只能在表級(jí)定義主碼只
7、能在表級(jí)定義主碼* */ / ); ); An Introduction to Database System例2將SC表中的Sno,Cno屬性組定義為碼5.1 實(shí)體完整性5.1.1 5.1.1 實(shí)體完整性定義實(shí)體完整性定義5.1.2 5.1.2 實(shí)體完整性檢查和違約處理實(shí)體完整性檢查和違約處理An Introduction to Database System5.1.2 實(shí)體完整性檢查和違約處理插入或?qū)χ鞔a列進(jìn)行更新操作時(shí),插入或?qū)χ鞔a列進(jìn)行更新操作時(shí),RDBMSRDBMS按照實(shí)體完整性規(guī)按照實(shí)體完整性規(guī)則自動(dòng)進(jìn)行檢查。包括:則自動(dòng)進(jìn)行檢查。包括: 檢查主碼值是否唯一,如果不唯一則拒絕插入或
8、修改檢查主碼值是否唯一,如果不唯一則拒絕插入或修改 檢查主碼的各個(gè)屬性是否為空,只要有一個(gè)為空就拒絕插入檢查主碼的各個(gè)屬性是否為空,只要有一個(gè)為空就拒絕插入或修改或修改An Introduction to Database System實(shí)體完整性檢查和違約處理(續(xù))檢查記錄中主碼值是否唯一的一種方法是進(jìn)行檢查記錄中主碼值是否唯一的一種方法是進(jìn)行全表掃描全表掃描An Introduction to Database System實(shí)體完整性檢查和違約處理(續(xù))另一個(gè)是另一個(gè)是索引索引 An Introduction to Database System第五章 數(shù)據(jù)庫完整性5.1 5.1 實(shí)體完整性
9、實(shí)體完整性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é)An Introduction to Database System5.2 參照完整性5.2.1 5.2.1 參照完整性定義參照完整性定義5.2.2 5.2.2 參照完整性檢查和違約處理參照完整性檢查和違約處理An Introduction to Database System5.2.1 參照完整性定義關(guān)系模型的參照完整性定義關(guān)系模型的參照完整性
10、定義在在CREATE TABLECREATE TABLE中用中用FOREIGN KEYFOREIGN KEY短語定義哪些列為外碼短語定義哪些列為外碼用用REFERENCESREFERENCES短語指明這些外碼參照哪些表的主碼短語指明這些外碼參照哪些表的主碼 An Introduction to Database System參照完整性定義(續(xù))例例3 3 定義定義SCSC中的參照完整性中的參照完整性 CREATE TABLE SCCREATE TABLE SC ( (SnoSno CHAR(9) NOT NULL CHAR(9) NOT NULL, CnoCno CHAR(4) NOT NUL
11、L CHAR(4) NOT NULL, Grade SMALLINTGrade SMALLINT, PRIMARY KEY (PRIMARY KEY (SnoSno, CnoCno) ), / /* *在表級(jí)定義實(shí)體完整性在表級(jí)定義實(shí)體完整性* */ / FOREIGN KEY (FOREIGN KEY (SnoSno) REFERENCES ) REFERENCES Student(SnoStudent(Sno) ), / /* *在表級(jí)定義參照完整性在表級(jí)定義參照完整性* */ / FOREIGN KEY (FOREIGN KEY (CnoCno) REFERENCES ) REFEREN
12、CES Course(CnoCourse(Cno) ) / /* *在表級(jí)定義參照完整性在表級(jí)定義參照完整性* */ / ); );An Introduction to Database System例如,關(guān)系SC中一個(gè)元組表示一個(gè)學(xué)生選修的某門課程的成績,(Sno,Cno)是主碼。Sno,Cno分別參照引用Student表的主碼和Course表的主碼5.2 參照完整性5.2.1 5.2.1 參照完整性定義參照完整性定義5.2.2 5.2.2 參照完整性檢查和違約處理參照完整性檢查和違約處理An Introduction to Database System參照完整性檢查和違約處理An Int
13、roduction to Database System可能破壞參照完整性的情況及違約處理被參照表(例如Student)參照表(例如SC)違約處理可能破壞參照完整性 插入元組拒絕可能破壞參照完整性 修改外碼值拒絕刪除元組 可能破壞參照完整性拒絕/級(jí)連刪除/設(shè)置為空值修改主碼值 可能破壞參照完整性拒絕/級(jí)連修改/設(shè)置為空值違約處理參照完整性違約處理參照完整性違約處理拒絕拒絕(NO ACTION)(NO ACTION)執(zhí)行執(zhí)行默認(rèn)策略默認(rèn)策略級(jí)聯(lián)級(jí)聯(lián)(CASCADE)(CASCADE)操作操作設(shè)置為空值(設(shè)置為空值(SET-NULLSET-NULL)對(duì)于參照完整性,除了應(yīng)該定義外碼,還應(yīng)定義對(duì)于參
14、照完整性,除了應(yīng)該定義外碼,還應(yīng)定義外碼列是否允許外碼列是否允許空值空值A(chǔ)n Introduction to Database System違約處理(續(xù)) CREATE TABLE SC CREATE TABLE SC ( (SnoSno CHAR(9) NOT NULL CHAR(9) NOT NULL, CnoCno CHAR(4) NOT NULL CHAR(4) NOT NULL, Grade SMALLINTGrade SMALLINT, PRIMARY KEYPRIMARY KEY(SnoSno,CnoCno),), FOREIGN KEY (FOREIGN KEY (SnoSno
15、) REFERENCES ) REFERENCES Student(SnoStudent(Sno) ) ON DELETE CASCADE /ON DELETE CASCADE /* *級(jí)聯(lián)刪除級(jí)聯(lián)刪除SCSC表中相應(yīng)的元組表中相應(yīng)的元組* */ / ON UPDATE CASCADE ON UPDATE CASCADE, / /* *級(jí)聯(lián)更新級(jí)聯(lián)更新SCSC表中相應(yīng)的元組表中相應(yīng)的元組* */ / FOREIGN KEY ( FOREIGN KEY (CnoCno) REFERENCES ) REFERENCES Course(CnoCourse(Cno) ) ON DELETE NO AC
16、TION ON DELETE NO ACTION / /* *當(dāng)刪除當(dāng)刪除course course 表中的元組造成了與表中的元組造成了與SCSC表不一致時(shí)表不一致時(shí)拒絕刪除拒絕刪除* */ / ON UPDATE CASCADE ON UPDATE CASCADE / /* *當(dāng)更新當(dāng)更新coursecourse表中的表中的cnocno時(shí),時(shí),級(jí)聯(lián)更新級(jí)聯(lián)更新SCSC表中相應(yīng)的元組表中相應(yīng)的元組* */ / ) );An Introduction to Database System例4 顯式說明參照完整性的違約處理示例第五章 數(shù)據(jù)庫完整性5.1 5.1 實(shí)體完整性實(shí)體完整性5.2 5.2
17、參照完整性參照完整性5.3 5.3 用戶定義的完整性用戶定義的完整性5.4 5.4 完整性約束命名字句完整性約束命名字句* *5.5 5.5 域中的完整性限制域中的完整性限制5.6 5.6 觸發(fā)器觸發(fā)器5.7 5.7 小結(jié)小結(jié)An Introduction to Database System5.3 用戶定義的完整性用戶定義的完整性就是針對(duì)用戶定義的完整性就是針對(duì)某一具體應(yīng)用某一具體應(yīng)用的數(shù)據(jù)必須滿足的數(shù)據(jù)必須滿足的語義要求的語義要求 RDBMSRDBMS提供,而不必由應(yīng)用程序承擔(dān)提供,而不必由應(yīng)用程序承擔(dān)An Introduction to Database System5.3 用戶定義的完
18、整性5.3.1 5.3.1 屬性上的約束條件的定義屬性上的約束條件的定義5.3.2 5.3.2 屬性上的約束條件檢查和違約處理屬性上的約束條件檢查和違約處理 5.3.3 5.3.3 元組上的約束條件的定義元組上的約束條件的定義 5.3.45.3.4元組上的約束條件檢查和違約處理元組上的約束條件檢查和違約處理An Introduction to Database System5.3.1 屬性上的約束條件的定義CREATE TABLECREATE TABLE時(shí)定義時(shí)定義列值非空(列值非空(NOT NULLNOT NULL)列值唯一(列值唯一(UNIQUEUNIQUE)檢查列值是否滿足一個(gè)布爾表達(dá)式
19、(檢查列值是否滿足一個(gè)布爾表達(dá)式(CHECKCHECK)defaultdefaultAn Introduction to Database System屬性上的約束條件的定義(續(xù))不允許取空值不允許取空值 An Introduction to Database System例5 在定義SC表時(shí),說明Sno、Cno、Grade屬性不允許取空值。 CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT NOT NULL default(60) check(grader=0 and grader =100
20、), PRIMARY KEY (Sno, Cno), /* 如果在表級(jí)定義實(shí)體完整性,隱含了Sno,Cno不允許取空值,則在列級(jí)不允許取空值的定義就不必寫了 * / ); 屬性上的約束條件的定義(續(xù))列值唯一列值唯一 An Introduction to Database System例6 建立部門表DEPT,要求部門名稱Dname列取值唯一,部門編號(hào)Deptno列為主碼 CREATE TABLE DEPT (Deptno NUMERIC(2), Dname CHAR(9) UNIQUE,/*要求Dname列值唯一*/ Location CHAR(10), PRIMARY KEY (Deptn
21、o) );屬性上的約束條件的定義(續(xù)) 用用CHECKCHECK短語指定列值應(yīng)該滿足的條件短語指定列值應(yīng)該滿足的條件An Introduction to Database System例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) );5.3 用戶定義的完整性5.3.1
22、 5.3.1 屬性上的約束條件的定義屬性上的約束條件的定義5.3.2 5.3.2 屬性上的約束條件檢查和違約處理屬性上的約束條件檢查和違約處理 5.3.3 5.3.3 元組上的約束條件的定義元組上的約束條件的定義 5.3.45.3.4元組上的約束條件檢查和違約處理元組上的約束條件檢查和違約處理An Introduction to Database System5.3.2 屬性上的約束條件檢查和違約處理插入元組或修改屬性的值時(shí),插入元組或修改屬性的值時(shí),RDBMSRDBMS檢查屬性上的約束條件檢查屬性上的約束條件是否被滿足是否被滿足如果不滿足則操作被拒絕執(zhí)行如果不滿足則操作被拒絕執(zhí)行 An In
23、troduction to Database System5.3 用戶定義的完整性5.3.1 5.3.1 屬性上的約束條件的定義屬性上的約束條件的定義5.3.2 5.3.2 屬性上的約束條件檢查和違約處理屬性上的約束條件檢查和違約處理 5.3.3 5.3.3 元組上的約束條件的定義元組上的約束條件的定義 5.3.45.3.4元組上的約束條件檢查和違約處理元組上的約束條件檢查和違約處理An Introduction to Database System5.3.3 元組上的約束條件的定義在在CREATE TABLECREATE TABLE時(shí)可以用時(shí)可以用CHECKCHECK短語定義元組上的約束條件
24、,短語定義元組上的約束條件,即即元組級(jí)的限制元組級(jí)的限制同屬性值限制相比,元組級(jí)的限制可以設(shè)置不同屬性之間同屬性值限制相比,元組級(jí)的限制可以設(shè)置不同屬性之間的取值的相互約束條件的取值的相互約束條件 An Introduction to Database System元組上的約束條件的定義(續(xù)) CREATE TABLE Student CREATE TABLE Student ( (SnoSno CHAR(9) CHAR(9), SnameSname CHAR(8) NOT NULL CHAR(8) NOT NULL, SsexSsex CHAR(2) CHAR(2), Sage SMALLI
25、NTSage SMALLINT, SdeptSdept CHAR(20) CHAR(20), PRIMARY KEY (PRIMARY KEY (SnoSno) ), CHECK (CHECK (SsexSsex=女女 OR OR SnameSname NOT LIKE Ms.%) NOT LIKE Ms.%) / /* *定義了元組中定義了元組中SnameSname和和 SsexSsex兩個(gè)屬性值之間的約束條件兩個(gè)屬性值之間的約束條件* */ / ) );性別是女性的元組都能通過該項(xiàng)檢查,因?yàn)樾詣e是女性的元組都能通過該項(xiàng)檢查,因?yàn)镾sexSsex=女女成立;成立;當(dāng)性別是男性時(shí),要通過檢查則
26、名字一定不能以當(dāng)性別是男性時(shí),要通過檢查則名字一定不能以Ms.Ms.打頭打頭An Introduction to Database System例9 當(dāng)學(xué)生的性別是男時(shí),其名字不能以Ms.打頭。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 元組上的約束條件檢查和違約處理元組上的約束條件檢查和違約處理An Introduction to Database System5.3
27、.4 元組上的約束條件檢查和違約處理插入元組或修改屬性的值時(shí),插入元組或修改屬性的值時(shí),RDBMSRDBMS檢查元組上的約束條件檢查元組上的約束條件是否被滿足是否被滿足如果不滿足則操作被拒絕執(zhí)行如果不滿足則操作被拒絕執(zhí)行 An Introduction to Database System第五章 數(shù)據(jù)庫完整性5.1 5.1 實(shí)體完整性實(shí)體完整性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é)An Int
28、roduction to Database System5.4 完整性約束命名子句CONSTRAINT CONSTRAINT 約束約束CONSTRAINT CONSTRAINT PRIMARY KEYPRIMARY KEY短語短語 | FOREIGN KEY| FOREIGN KEY短語短語 | CHECK| CHECK短語短語 An Introduction to Database System完整性約束命名子句(續(xù)) CREATE TABLE Student CREATE TABLE Student ( (SnoSno NUMERIC(6), NUMERIC(6), CONSTRAINT
29、C1 CHECK (CONSTRAINT C1 CHECK (SnoSno BETWEEN 90000 AND 99999) BETWEEN 90000 AND 99999), SnameSname CHAR(20), CHAR(20), CONSTRAINT C2 NOT NULLCONSTRAINT C2 NOT NULL, Sage NUMERIC(3),Sage NUMERIC(3), CONSTRAINT C3 CHECK (Sage 30)CONSTRAINT C3 CHECK (Sage 30), SsexSsex CHAR(2), CHAR(2), CONSTRAINT C4
30、CHECK (CONSTRAINT C4 CHECK (SsexSsex IN ( IN ( 男男 , 女女), CONSTRAINT CONSTRAINT StudentKeyStudentKey PRIMARY PRIMARY KEY(SnoKEY(Sno) ) ) );在在StudentStudent表上建立了表上建立了5 5個(gè)約束條件,包括主碼約束(命名為個(gè)約束條件,包括主碼約束(命名為StudentKeyStudentKey)以及以及C1C1、C2C2、C3C3、C4C4四個(gè)列級(jí)約束。四個(gè)列級(jí)約束。An Introduction to Database System例10 建立學(xué)生登
31、記表Student,要求學(xué)號(hào)在9000099999之間,姓名不能取空值,年齡小于30,性別只能是“男”或“女”。完整性約束命名子句(續(xù)) 修改表中的完整性限制修改表中的完整性限制使用使用ALTER TABLEALTER TABLE語句修改表中的完整性限制語句修改表中的完整性限制An Introduction to Database System完整性約束命名子句(續(xù))n可以先刪除原來的約束條件,再增加新的約束條件可以先刪除原來的約束條件,再增加新的約束條件 ALTER TABLE StudentALTER TABLE Student DROP CONSTRAINT C1; DROP CONST
32、RAINT C1; ALTER TABLE StudentALTER TABLE Student ADD CONSTRAINT C1 CHECK ( ADD CONSTRAINT C1 CHECK (SnoSno BETWEEN 900000 AND 999999); BETWEEN 900000 AND 999999); ALTER TABLE StudentALTER TABLE Student DROP CONSTRAINT C3; DROP CONSTRAINT C3; ALTER TABLE StudentALTER TABLE Student ADD CONSTRAINT C3 C
33、HECK (Sage 40) ADD CONSTRAINT C3 CHECK (Sage 40);An Introduction to Database System例13 修改表Student中的約束條件,要求學(xué)號(hào)改為在900000999999之間,年齡由小于30改為小于40第五章 數(shù)據(jù)庫完整性5.1 5.1 實(shí)體完整性實(shí)體完整性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é)An Introduct
34、ion to Database System5.5 域中的完整性限制SQLSQL支持域的概念,并可以用支持域的概念,并可以用CREATE DOMAINCREATE DOMAIN語句建立一個(gè)域以語句建立一個(gè)域以及該域應(yīng)該滿足的完整性約束條件。及該域應(yīng)該滿足的完整性約束條件。An Introduction to Database System例14建立一個(gè)性別域,并聲明性別域的取值范圍例15建立一個(gè)性別域GenderDomain,并對(duì)其中的限制命名 CREATE DOMAIN GenderDomain CHAR(2) CHECK (VALUE IN (男,女) ); 這樣例10中對(duì)Ssex的說明可
35、以改寫為 Ssex GenderDomain CREATE DOMAIN GenderDomain CHAR(2) CONSTRAINT GD CHECK ( VALUE IN (男,女) );域中的完整性限制(續(xù)) ALTER DOMAIN ALTER DOMAIN GenderDomainGenderDomain DROP CONSTRAINT GD; DROP CONSTRAINT GD;An Introduction to Database System例16刪除域GenderDomain的限制條件GD。 ALTER DOMAIN GenderDomain ADD CONSTRAINT
36、 GDD CHECK (VALUE IN ( 1,0) ); 通過例16和例17,就把性別的取值范圍由(男,女)改為 ( 1,0) 例17在域GenderDomain上增加限制條件GDD。第五章 數(shù)據(jù)庫完整性5.1 5.1 實(shí)體完整性實(shí)體完整性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é)An Introduction to Database System觸發(fā)器觸發(fā)器(觸發(fā)器(TriggerTrigg
37、er)是用戶定義在關(guān)系表上的一類由)是用戶定義在關(guān)系表上的一類由事件驅(qū)事件驅(qū)動(dòng)動(dòng)的特殊過程的特殊過程由服務(wù)器自動(dòng)激活由服務(wù)器自動(dòng)激活可以進(jìn)行更為復(fù)雜的檢查和操作,具有更精細(xì)和更強(qiáng)大的數(shù)據(jù)控制可以進(jìn)行更為復(fù)雜的檢查和操作,具有更精細(xì)和更強(qiáng)大的數(shù)據(jù)控制能力能力 An Introduction to Database System5.6 觸發(fā)器5.6.1 5.6.1 定義觸發(fā)器定義觸發(fā)器 5.6.2 5.6.2 激活觸發(fā)器激活觸發(fā)器 5.6.3 5.6.3 刪除觸發(fā)器刪除觸發(fā)器 An Introduction to Database System5.6.1 定義觸發(fā)器CREATE TRIGGERCR
38、EATE TRIGGER語法格式語法格式 CREATE TRIGGER CREATE TRIGGER BEFORE | AFTER BEFORE | AFTER ON ON FOR EACH ROW | STATEMENT FOR EACH ROW | STATEMENT WHEN WHEN An Introduction to Database System定義觸發(fā)器(續(xù))定義觸發(fā)器的語法說明定義觸發(fā)器的語法說明: :1. 1. 創(chuàng)建者:表的創(chuàng)建者:表的擁有者擁有者2. 2. 觸發(fā)器名觸發(fā)器名3. 3. 表名:觸發(fā)器的目標(biāo)表表名:觸發(fā)器的目標(biāo)表4. 4. 觸發(fā)事件:觸發(fā)事件:INSERTIN
39、SERT、DELETEDELETE、UPDATEUPDATE5. 5. 觸發(fā)器類型觸發(fā)器類型行級(jí)觸發(fā)器(行級(jí)觸發(fā)器(FOR EACH ROWFOR EACH ROW)語句級(jí)觸發(fā)器(語句級(jí)觸發(fā)器(FOR EACH STATEMENTFOR EACH STATEMENT)An Introduction to Database System定義觸發(fā)器(續(xù))例如例如, ,假設(shè)在例假設(shè)在例1010的的STUDENTSTUDENT表上創(chuàng)建了一個(gè)表上創(chuàng)建了一個(gè)AFTER AFTER UPDATEUPDATE觸發(fā)器。如果表觸發(fā)器。如果表SUTDENTSUTDENT有有10001000行,執(zhí)行如下語句:行,執(zhí)行
40、如下語句: UPDATE STUDENT SET SAGE=SAGE+1; UPDATE STUDENT SET SAGE=SAGE+1; 如果該觸發(fā)器為語句級(jí)觸發(fā)器,那么執(zhí)行完該語句后,觸發(fā)動(dòng)如果該觸發(fā)器為語句級(jí)觸發(fā)器,那么執(zhí)行完該語句后,觸發(fā)動(dòng)作只發(fā)生一次作只發(fā)生一次如果是行級(jí)觸發(fā)器,觸發(fā)動(dòng)作將執(zhí)行如果是行級(jí)觸發(fā)器,觸發(fā)動(dòng)作將執(zhí)行10001000次次 An Introduction to Database System定義觸發(fā)器(續(xù)) 觸發(fā)條件觸發(fā)條件觸發(fā)條件為真觸發(fā)條件為真省略省略WHENWHEN觸發(fā)條件觸發(fā)條件 An Introduction to Database Systemv觸發(fā)
41、動(dòng)作體 觸發(fā)動(dòng)作體可以是一個(gè)匿名PL/SQL過程塊 也可以是對(duì)已創(chuàng)建存儲(chǔ)過程的調(diào)用定義觸發(fā)器(續(xù)) CREATE TRIGGER CREATE TRIGGER Insert_Or_Update_SalInsert_Or_Update_Sal BEFORE BEFORE INSERT OR UPDATEINSERT OR UPDATE ON Teacher ON Teacher / /* *觸發(fā)事件是插入或更新操作觸發(fā)事件是插入或更新操作* */ / FOR FOR EACH ROWEACH ROW / /* *行級(jí)觸發(fā)器行級(jí)觸發(fā)器* */ / AS BEGIN AS BEGIN / /* *定
42、義觸發(fā)動(dòng)作體,是定義觸發(fā)動(dòng)作體,是PL/SQLPL/SQL過程塊過程塊* */ / IF ( IF (new.Jobnew.Job=教授教授) AND () AND (new.Salnew.Sal 4000) THEN 4000) THEN new.Salnew.Sal :=4000; :=4000; END IF; END IF; END; END; An Introduction to Database System例18 定義一個(gè)BEFORE行級(jí)觸發(fā)器,為教師表Teacher定義完整性規(guī)則“教授的工資不得低于4000元,如果低于4000元,自動(dòng)改為4000元”。定義觸發(fā)器(續(xù))首先建立工
43、資變化表首先建立工資變化表Sal_logSal_log CREATE TABLE CREATE TABLE Sal_logSal_log ( (EnoEno NUMERIC(4) references NUMERIC(4) references teacher(enoteacher(eno) ), Sal NUMERIC(7Sal NUMERIC(7,2)2), Username char(10)Username char(10), Date TIMESTAMPDate TIMESTAMP ) );An Introduction to Database System例19定義AFTER行級(jí)觸發(fā)
44、器,當(dāng)教師表Teacher的工資發(fā)生變化后就自動(dòng)在工資變化表Sal_log中增加一條相應(yīng)記錄定義觸發(fā)器(續(xù)) 例例1919(續(xù))(續(xù)) CREATE TRIGGER CREATE TRIGGER Insert_SalInsert_Sal AFTER INSERTAFTER INSERT ON Teacher ON Teacher / /* *觸發(fā)事件是觸發(fā)事件是INSERTINSERT* */ / FOR EACH ROW FOR EACH ROW AS BEGIN AS BEGIN INSERT INTO INSERT INTO Sal_logSal_log VALUES( VALUES(
45、new.Enonew.Eno,new.Salnew.Sal, CURRENT_USERCURRENT_USER,CURRENT_TIMESTAMP);CURRENT_TIMESTAMP); END; END; CREATE TRIGGER CREATE TRIGGER Update_SalUpdate_Sal AFTER UPDATEAFTER UPDATE ON Teacher ON Teacher / /* *觸發(fā)事件是觸發(fā)事件是UPDATE UPDATE * */ / FOR EACH ROW FOR EACH ROW AS BEGIN AS BEGIN IF ( IF (new.Salnew.Sal old.Salold.Sal) THEN INSERT INTO ) THEN INSERT INTO Sal_logSal_log VALUES( VALUES( new.Enonew.Eno,new.Salnew.Sal,CURRENT_USERCURRENT_USER,CURRENT_TIMESTAMP);CURRENT_
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年全球及中國熱覆膜機(jī)行業(yè)競爭趨勢(shì)及未來發(fā)展前景預(yù)測(cè)報(bào)告
- 2024-2030年全球及中國水泥3D建筑打印行業(yè)發(fā)展前景及投資戰(zhàn)略研究報(bào)告
- 2024-2030年全球及中國果蔬切片機(jī)行業(yè)營銷策略及渠道策略研究報(bào)告
- 2024-2030年全球及中國數(shù)據(jù)中心機(jī)柜行業(yè)現(xiàn)狀規(guī)模及發(fā)展前景預(yù)測(cè)報(bào)告
- 2024年招標(biāo)代理單位工程合同
- 2024-2030年全球及中國動(dòng)力調(diào)音臺(tái)行業(yè)銷售現(xiàn)狀及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 2024學(xué)校轉(zhuǎn)讓過程中雙方保密協(xié)議
- 2024-2030年全球與中國聚氨酯同步帶行業(yè)前景動(dòng)態(tài)及投資前景預(yù)測(cè)報(bào)告
- 2024年度項(xiàng)目調(diào)研合同
- 2024-2030年中國魚子醬行業(yè)生產(chǎn)銷售模式及發(fā)展策略分析報(bào)告
- 江蘇省某高速公路結(jié)構(gòu)物臺(tái)背回填監(jiān)理細(xì)則
- 電大護(hù)理本科臨床實(shí)習(xí)手冊(cè)內(nèi)容(原表)
- 當(dāng)代德國學(xué)校勞動(dòng)教育課程構(gòu)建的經(jīng)驗(yàn)與啟示共3篇
- “小金庫”治理與防范 習(xí)題及答案
- 王偉核桃經(jīng)濟(jì)價(jià)值及加工利用
- 新生兒胎糞吸入綜合征臨床路徑標(biāo)準(zhǔn)住院流程及路徑表單
- 氯化鈉特性表
- 鉆井井架起升鋼絲繩管理臺(tái)賬
- 單片機(jī)原理與應(yīng)用說課
- 船舶租賃盡職調(diào)查
- GB/T 13912-2020金屬覆蓋層鋼鐵制件熱浸鍍鋅層技術(shù)要求及試驗(yàn)方法
評(píng)論
0/150
提交評(píng)論