第7章數(shù)據(jù)庫(kù)完整性_第1頁(yè)
第7章數(shù)據(jù)庫(kù)完整性_第2頁(yè)
第7章數(shù)據(jù)庫(kù)完整性_第3頁(yè)
第7章數(shù)據(jù)庫(kù)完整性_第4頁(yè)
第7章數(shù)據(jù)庫(kù)完整性_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第7章 數(shù)據(jù)庫(kù)完整性第7章 數(shù)據(jù)庫(kù)完整性什么是數(shù)據(jù)庫(kù)的完整性 數(shù)據(jù)的正確性和相容性,防止不合語(yǔ)義的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)。例: 學(xué)生的年齡必須是整數(shù),取值范圍為14-29; 學(xué)生的性別只能是男或女; 學(xué)生的學(xué)號(hào)一定是唯一的; 學(xué)生所在的系必須是學(xué)校開設(shè)的系; 完整性:否真實(shí)地反映現(xiàn)實(shí)世界 第7章 數(shù)據(jù)庫(kù)完整性第7章 數(shù)據(jù)庫(kù)完整性為維護(hù)數(shù)據(jù)庫(kù)的完整性,DBMS必須:1.提供定義完整性約束條件的機(jī)制2.提供完整性檢查的方法3.違約處理 第7章 數(shù)據(jù)庫(kù)完整性7.1 實(shí)體完整性7.2 參照完整性7.3 用戶自定義完整性7.4 完整性約束命名子句7.5 觸發(fā)器7.6 小結(jié)7.1 實(shí)體完整性7.1.1 實(shí)體完整性

2、定義7.1.2 實(shí)體完整性檢查和違約處理實(shí)體完整性的定義實(shí)體完整性的定義實(shí)體完整性的定義實(shí)體完整性的定義(2)在表級(jí)定義主碼 CREATE TABLE S (Sno CHAR(9), Sname CHAR(20) NOT NULL, Ssex CHAR(2) , Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno) ); 實(shí)體完整性的定義7.1 實(shí)體完整性7.1.1 實(shí)體完整性定義7.1.2 實(shí)體完整性檢查和違約處理7.1.2 實(shí)體完整性檢查和違約處理7.1.2 實(shí)體完整性檢查和違約處理7.1.2 實(shí)體完整性檢查和違約處理 參照完整性7.2 參照完整

3、性7.2.1 參照完整性定義7.2.2 參照完整性檢查和違約處理7.2.1 參照完整性定義7.2.1 參照完整性定義例如,關(guān)系SC中(Sno,Cno)是主碼。Sno,Cno分別參照引用S表的主碼和C表的主碼 例3 定義SC中的參照完整性 CREATE TABLE SC (Sno CHAR(9) , Cno CHAR(4) , Grade SMALLINT, PRIMARY KEY (Sno, Cno), /*在表級(jí)定義實(shí)體完整性*/ FOREIGN KEY (Sno) REFERENCES S (Sno), /*在表級(jí)定義參照完整性*/ FOREIGN KEY (Cno) REFERENCES

4、 C (Cno) /*在表級(jí)定義參照完整性*/ );7.2 參照完整性7.2.1 參照完整性定義7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理3. 在參照關(guān)系中,修改外碼的問題 S(Sno,Sname,Sage,) SC(Sno,Cno,Grade) 95001,張三,20, 9500

5、1,DB,90 95002,李四,19, 95001,OS,85 95002,DB,867.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理7.2.2 參照完整性檢查和違約處理顯式說明參照完整性的違約處理示例 CREATE TABLE SC (Sno CHAR(9) , Cno CHAR(4) , Grade SMALLINT, PRIMARY KEY(Sno,Cno), FOREIGN KEY

6、(Sno) REFERENCES S (Sno) ON DELETE CASCADE /*當(dāng)刪除s表中的元組時(shí)級(jí)聯(lián)刪除SC表中相應(yīng)的元組*/ ON UPDATE CASCADE, /*當(dāng)更新s表中的元組時(shí),級(jí)聯(lián)更新SC表中相應(yīng)的元組*/ FOREIGN KEY (Cno) REFERENCES C (Cno) ON DELETE NO ACTION /*當(dāng)刪除c 表中的元組造成了與SC表不一致時(shí)拒絕刪除*/ ON UPDATE CASCADE /*當(dāng)更新c表中的元組時(shí),級(jí)聯(lián)更新SC表中相應(yīng)的元組*/ );7.3 用戶自定義完整性7.3 用戶定義的完整性7.3.1 屬性上的約束條件的定義7.3.

7、2 屬性上的約束條件檢查和違約處理 7.3.3 元組上的約束條件的定義 元組上的約束條件檢查和違約處理 7.3.1 屬性上的約束條件的定義7.3.1 屬性上的約束條件的定義7.3.1 屬性上的約束條件的定義7.3 用戶自定義完整性7.3 用戶定義的完整性7.3.1 屬性上的約束條件的定義7.3.2 屬性上的約束條件檢查和違約處理 7.3.3 元組上的約束條件的定義 元組上的約束條件檢查和違約處理 7.3.2 屬性上的約束條件檢查和違約處理 插入元組或修改屬性的值時(shí),RDBMS檢查屬性上的約束條件是否被滿足 如果不滿足則操作被拒絕執(zhí)行 7.3 用戶定義的完整性7.3.1 屬性上的約束條件的定義7

8、.3.2 屬性上的約束條件檢查和違約處理 7.3.3 元組上的約束條件的定義 元組上的約束條件檢查和違約處理 7.3.3 元組上的約束條件的定義7.3.3 元組上的約束條件的定義7.3 用戶定義的完整性7.3.1 屬性上的約束條件的定義7.3.2 屬性上的約束條件檢查和違約處理 7.3.3 元組上的約束條件的定義 元組上的約束條件檢查和違約處理 元組上的約束條件檢查和違約處理7.4 完整性約束命名子句7.4 完整性約束命名子句例10 建立學(xué)生登記表Student,要求學(xué)號(hào)在9000099999之間,姓名不能取空值,年齡小于30,性別只能是“男”或“女”。 CREATE TABLE Studen

9、t (Sno INT(6) CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999), Sname CHAR(20) CONSTRAINT C2 NOT NULL, Sage SMALLINT(3) CONSTRAINT C3 CHECK (Sage < 30), Ssex CHAR(2) CONSTRAINT C4 CHECK (Ssex IN ( '男','女'), CONSTRAINT StudentKey PRIMARY KEY(Sno) );在Student表上建立了5個(gè)約束條件,包括主碼約束(命名為St

10、udentKey)以及C1、C2、C3、C4四個(gè)列級(jí)約束。7.4 完整性約束命名子句7.4 完整性約束命名子句例13 修改表Student中的約束條件,要求學(xué)號(hào)改為在900000999999之間,年齡由小于30改為小于40可以先刪除原來的約束條件,再增加新的約束條件 ALTER TABLE Student DROP CONSTRAINT C1; ALTER TABLE Student ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999), ALTER TABLE Student DROP CONSTRAINT C3; ALTER TAB

11、LE Student ADD CONSTRAINT C3 CHECK (Sage < 40);7.5 觸發(fā)器7.5 觸發(fā)器7.5.1 定義觸發(fā)器 7.5.2 激活觸發(fā)器 7.5.3 刪除觸發(fā)器 7.5.1 定義觸發(fā)器7.5.1 定義觸發(fā)器7.5.1 定義觸發(fā)器7.5.1 定義觸發(fā)器(6) 觸發(fā)條件 WHEN<觸發(fā)條件>:指定觸發(fā)器的觸發(fā)條件。當(dāng)滿足觸發(fā)條件時(shí),DBMS才激發(fā)觸發(fā)器。如果省略,則觸發(fā)動(dòng)作體在觸發(fā)器激活后立即執(zhí)行。(7) 觸發(fā)動(dòng)作體 觸發(fā)動(dòng)作體可以是一個(gè)匿名PL/SQL過程塊 也可以是對(duì)已創(chuàng)建存儲(chǔ)過程的調(diào)用7.5.1 定義觸發(fā)器例2 定義一個(gè)BEFORE行級(jí)觸發(fā)器

12、,為教師表Teacher定義完整性規(guī)則“教授的工資不得低于4000元,如果低于4000元,自動(dòng)改為4000元”。 CREATE TRIGGER Insert_Or_Update_Sal BEFORE INSERT OR UPDATE ON Teacher /*觸發(fā)事件是插入或更新操作*/ FOR EACH ROW /*行級(jí)觸發(fā)器*/ AS BEGIN /*定義觸發(fā)動(dòng)作體,是PL/SQL過程塊*/ IF (new.Job='教授') AND (new.Sal < 4000) THEN new.Sal :=4000; END IF; END; 例3定義AFTER行級(jí)觸發(fā)器,當(dāng)

13、教師表Teacher的工資發(fā)生變化后就自動(dòng)在工資變化表Sal_log中增加一條相應(yīng)記錄 首先建立工資變化表Sal_log CREATE TABLE Sal_log (Tno char(5) references Teacher(Tno), Sal numeric(7,2), Username char(10), Date datatime );例3(續(xù))CREATE TRIGGER Insert_Sal AFTER INSERT ON Teacher /*觸發(fā)事件是INSERT*/ FOR EACH ROW AS BEGIN INSERT INTO Sal_log VALUES(,CURREN

14、T_USER,CURRENT_TIMESTAMP); END;例3(續(xù))CREATE TRIGGER Update_Sal AFTER UPDATE ON Teacher /*觸發(fā)事件是UPDATE */ FOR EACH ROW AS BEGIN IF (new.Sal <> old.Sal) THEN INSERT INTO Sal_log VALUES( ,CURRENT_USER,CURRENT_TIMESTAMP); END IF; END;7.5 觸發(fā)器7.5.1 定義觸發(fā)器 7.5.2 激活觸發(fā)器 7.5.3 刪除觸發(fā)器 7.5.2 激活觸發(fā)器觸發(fā)器的執(zhí)行,是由觸發(fā)事

15、件激活的,并由數(shù)據(jù)庫(kù)服務(wù)器自動(dòng)執(zhí)行一個(gè)數(shù)據(jù)表上可能定義了多個(gè)觸發(fā)器同一個(gè)表上的多個(gè)觸發(fā)器激活時(shí)遵循如下的執(zhí)行順序: (1 ) 執(zhí)行該表上的BEFORE 觸發(fā)器; (2 ) 激活觸發(fā)器的SQL 語(yǔ)句; (3 ) 執(zhí)行該表上的AFTER 觸發(fā)器。 例4執(zhí)行修改某個(gè)教師工資的SQL語(yǔ)句,激活上述定義的觸發(fā)器。 UPDATE Teacher SET Sal=800 WHERE Ename='陳平' 執(zhí)行順序是:Ø 執(zhí)行觸發(fā)器Insert_Or_Update_SalØ 執(zhí)行SQL語(yǔ)句“UPDATE Teacher SET Sal=800 WHERE Ename='陳平'”Ø 執(zhí)行觸發(fā)器Insert_Sal;Ø 執(zhí)行觸發(fā)器Update_Sal 7.5 觸發(fā)器7.5.1 定義觸發(fā)器 7.5.2 激活觸發(fā)器 7.5.3 刪除觸發(fā)器 7.5.3

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論