第4章 完整性約束 V2.0_第1頁(yè)
第4章 完整性約束 V2.0_第2頁(yè)
第4章 完整性約束 V2.0_第3頁(yè)
第4章 完整性約束 V2.0_第4頁(yè)
第4章 完整性約束 V2.0_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué)電子科技大學(xué)電子科技大學(xué) 計(jì)算機(jī)學(xué)院計(jì)算機(jī)學(xué)院胡旺胡旺 20222022年年3 3月月2525日星期五日星期五數(shù)據(jù)庫(kù)原理及應(yīng)用數(shù)據(jù)庫(kù)原理及應(yīng)用第第4章章 完整性約束完整性約束DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué)Click to add TitleClick to add Title1 1 數(shù)據(jù)庫(kù)完整性概述數(shù)據(jù)庫(kù)完整性概述1 1Click to add TitleClick to add Title2 2 完整性約束的分類(lèi)完整性約束的分類(lèi)2 2Click to add TitleClick to add Titl

2、e2 2 完整性約束的定義完整性約束的定義3 3Click to add TitleClick to add Title1 1 完整性約束的修改完整性約束的修改4 4Click to add TitleClick to add Title1 1 * *完整性約束的驗(yàn)證完整性約束的驗(yàn)證 5 5Click to add TitleClick to add Title1 1 * *數(shù)據(jù)庫(kù)產(chǎn)品的完整性支持?jǐn)?shù)據(jù)庫(kù)產(chǎn)品的完整性支持6 6DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) n完整性約束是加在數(shù)據(jù)庫(kù)模式上的一個(gè)具體條件,它完整性約束是加在數(shù)據(jù)庫(kù)模式上的一個(gè)具體條件,它規(guī)定什么樣的數(shù)據(jù)

3、能夠存儲(chǔ)到數(shù)據(jù)庫(kù)系統(tǒng)中。規(guī)定什么樣的數(shù)據(jù)能夠存儲(chǔ)到數(shù)據(jù)庫(kù)系統(tǒng)中。 n例如:例如: u學(xué)生的年齡必須是整數(shù),取值范圍為學(xué)生的年齡必須是整數(shù),取值范圍為14-2914-29;u學(xué)生的性別只能是學(xué)生的性別只能是“男男”或或“女女”;u學(xué)生的學(xué)號(hào)一定是唯一的;學(xué)生的學(xué)號(hào)一定是唯一的;u學(xué)生所在的系必須是學(xué)校開(kāi)設(shè)的系;學(xué)生所在的系必須是學(xué)校開(kāi)設(shè)的系;DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) n數(shù)據(jù)完整性和安全性是兩個(gè)不同概念數(shù)據(jù)完整性和安全性是兩個(gè)不同概念n數(shù)據(jù)的數(shù)據(jù)的完整性完整性是為了防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的是為了防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù),防止錯(cuò)誤數(shù)據(jù)的輸入和輸出所造成

4、的無(wú)效操作數(shù)據(jù),防止錯(cuò)誤數(shù)據(jù)的輸入和輸出所造成的無(wú)效操作和錯(cuò)誤結(jié)果。和錯(cuò)誤結(jié)果。n數(shù)據(jù)的數(shù)據(jù)的安全性安全性是防止非法用戶的非法操作所造成的對(duì)是防止非法用戶的非法操作所造成的對(duì)數(shù)據(jù)庫(kù)的惡意破壞。數(shù)據(jù)庫(kù)的惡意破壞。 DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) n完整性約束條件定義機(jī)制完整性約束條件定義機(jī)制u完整性約束條件:數(shù)據(jù)模型的組成部分,約束數(shù)據(jù)庫(kù)中數(shù)據(jù)的語(yǔ)義完整性約束條件:數(shù)據(jù)模型的組成部分,約束數(shù)據(jù)庫(kù)中數(shù)據(jù)的語(yǔ)義uDBMSDBMS應(yīng)提供定義數(shù)據(jù)庫(kù)完整性約束條件,并把它們作為模式的一部分應(yīng)提供定義數(shù)據(jù)庫(kù)完整性約束條件,并把它們作為模式的一部分存入數(shù)據(jù)庫(kù)中存入數(shù)據(jù)庫(kù)中n完整性

5、檢查機(jī)制完整性檢查機(jī)制u檢查用戶發(fā)出的操作請(qǐng)求是否違背了完整性約束條件檢查用戶發(fā)出的操作請(qǐng)求是否違背了完整性約束條件n違約反應(yīng)違約反應(yīng) u如果發(fā)現(xiàn)用戶的操作請(qǐng)求使數(shù)據(jù)違背了完整性約束條件,則采取一定如果發(fā)現(xiàn)用戶的操作請(qǐng)求使數(shù)據(jù)違背了完整性約束條件,則采取一定的動(dòng)作來(lái)保證數(shù)據(jù)的完整性的動(dòng)作來(lái)保證數(shù)據(jù)的完整性DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) n按照完整性約束條件作用的對(duì)象分:按照完整性約束條件作用的對(duì)象分:u類(lèi)型約束類(lèi)型約束u屬性約束屬性約束u關(guān)系變量約束關(guān)系變量約束u數(shù)據(jù)庫(kù)約束數(shù)據(jù)庫(kù)約束n按照完整性約束條件聲明時(shí)的位置分:按照完整性約束條件聲明時(shí)的位置分:u列級(jí)約束列

6、級(jí)約束u表級(jí)約束表級(jí)約束n兩種狀態(tài)兩種狀態(tài)u靜態(tài)靜態(tài): : 對(duì)靜態(tài)對(duì)象的約束是反映數(shù)據(jù)庫(kù)狀態(tài)合理性的約束對(duì)靜態(tài)對(duì)象的約束是反映數(shù)據(jù)庫(kù)狀態(tài)合理性的約束u動(dòng)態(tài)動(dòng)態(tài): : 對(duì)動(dòng)態(tài)對(duì)象的約束是反映數(shù)據(jù)庫(kù)狀態(tài)變遷的約束,新舊值之間對(duì)動(dòng)態(tài)對(duì)象的約束是反映數(shù)據(jù)庫(kù)狀態(tài)變遷的約束,新舊值之間滿足的約束滿足的約束DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) nPrimary KeyPrimary Key約束:實(shí)體完整性規(guī)則?約束:實(shí)體完整性規(guī)則?n列級(jí)約束列級(jí)約束CREATE TABLE RecipeMasterCREATE TABLE RecipeMasterRno VARCHAR(10) Rn

7、o VARCHAR(10) PRIMARY KEYPRIMARY KEY, , DGno VARCHARDGno VARCHAR(1010),),Rdatetime DATETIMERdatetime DATETIME n表級(jí)約束:?jiǎn)螌傩灾麈I表級(jí)約束:?jiǎn)螌傩灾麈ICREATE TABLE MedicineCREATE TABLE MedicineMno VARCHAR(10),Mno VARCHAR(10),Mname VARCHAR(50) NOT NULL,Mname VARCHAR(50) NOT NULL,Mprice DECIMAL(18,2) NOT NULL,Mprice DECI

8、MAL(18,2) NOT NULL,Munit VARCHAR(10),Munit VARCHAR(10),Mtype VARCHAR(10),Mtype VARCHAR(10),PRIMARY KEY(Mno)PRIMARY KEY(Mno) DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) n表級(jí)約束:多屬性組合主鍵表級(jí)約束:多屬性組合主鍵CREATE TABLE RecipeDetailCREATE TABLE RecipeDetailRno VARCHAR(10),Rno VARCHAR(10),Mno VARCHAR(10) NOT NULL,Mno VARCHAR(1

9、0) NOT NULL,Mamount DECIMAL(18,0),Mamount DECIMAL(18,0),PRIMARY KEY(Rno,Mno)PRIMARY KEY(Rno,Mno) nUNIQUEUNIQUE約束定義和約束定義和PRIMARY KEYPRIMARY KEY約束定義不能在同一屬約束定義不能在同一屬性上性上nPRIMARY KEYPRIMARY KEY子句中的每個(gè)屬性的取值都必須是子句中的每個(gè)屬性的取值都必須是NOT NOT NULLNULLDATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) n列級(jí)約束列級(jí)約束CREATE TABLE DeptCREATE T

10、ABLE DeptDeptNo VARCHAR(10) PRIMARY KEY,DeptNo VARCHAR(10) PRIMARY KEY,DeptName VARCHAR(50) DeptName VARCHAR(50) UNIQUEUNIQUE, ,ParentDeptNo VARCHAR(10),ParentDeptNo VARCHAR(10),Manager VARCHAR(10)Manager VARCHAR(10) n索引對(duì)象約束索引對(duì)象約束CREATE CREATE UNIQUE INDEX UNIQUE INDEX deptname_index ON dept(DeptNam

11、e)deptname_index ON dept(DeptName)nUNIQUEUNIQUE與與Primary KeyPrimary Keyu在一個(gè)關(guān)系中,在一個(gè)關(guān)系中,PRIMARY KEYPRIMARY KEY只有一個(gè),而只有一個(gè),而UNIQUEUNIQUE可以聲明多個(gè)可以聲明多個(gè)uPRIMARY KEYPRIMARY KEY要求屬性取值不能為要求屬性取值不能為NULLNULL,而,而UNIQUEUNIQUE允許屬性取空值,允許屬性取空值,允許多個(gè)空值同時(shí)存在允許多個(gè)空值同時(shí)存在u在定義了在定義了UNIQUEUNIQUE,PRIMARY KEY PRIMARY KEY 約束的屬性上建立索

12、引是十分必要約束的屬性上建立索引是十分必要的,它可以使約束的檢查執(zhí)行起來(lái)更有效的,它可以使約束的檢查執(zhí)行起來(lái)更有效 DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) nNOT NULLNOT NULL列級(jí)約束列級(jí)約束CREATE TABLE DiagnosisCREATE TABLE DiagnosisDGno VARCHAR(10) PRIMARY KEY,DGno VARCHAR(10) PRIMARY KEY,Pno VARCHAR(10) Pno VARCHAR(10) NOT NULLNOT NULL, ,Dno VARCHAR(10) Dno VARCHAR(10) N

13、OT NULLNOT NULL, ,Symptom VARCHAR(100),Symptom VARCHAR(100),Diagnosis VARCHAR(100),Diagnosis VARCHAR(100),DGtime DATETIME,DGtime DATETIME,Rfee DECIMAL(18,2) Rfee DECIMAL(18,2) NOT NULLNOT NULL nNOT NULLNOT NULL域?qū)ο蠹s束域?qū)ο蠹s束CREATE DOMAIN fee DECIMAL(18,2) CREATE DOMAIN fee DECIMAL(18,2) NOT NULLNOT NULL

14、; ; DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) nCHECKCHECK表級(jí)約束表級(jí)約束CREATE TABLE DoctorCREATE TABLE DoctorDno VARCHAR(10),Dno VARCHAR(10),Dname VARCHAR(50) NOT NULL,Dname VARCHAR(50) NOT NULL,Dsex VARCHAR(2),Dsex VARCHAR(2),Dage INT,Dage INT,Ddeptno VARCHAR(10),Ddeptno VARCHAR(10),Dlevel VARCHAR(50),Dlevel VARCHA

15、R(50),Dsalary DECIMAL(18,2),Dsalary DECIMAL(18,2),PRIMARY KEY(Dno),PRIMARY KEY(Dno),CHECK( Dsex IN (CHECK( Dsex IN (男男, , 女女),),CHECK( Dage 0 AND Dage 0 AND Dage 0CHECK(VALUE 0)nCHECK CHECK 在在SQLSQL條件中的約束條件中的約束CREATE TABLE RecipeDetailCREATE TABLE RecipeDetailRno VARCHAR(10),Rno VARCHAR(10),Mno VARC

16、HAR(10) NOT NULL,Mno VARCHAR(10) NOT NULL,Mamount DECIMAL(18,0),Mamount DECIMAL(18,0),PRIMARY KEY(Rno,Mno),PRIMARY KEY(Rno,Mno),CHECK (Mno IN (SELECT Mno FROM medicine)CHECK (Mno IN (SELECT Mno FROM medicine) u上述上述CHECKCHECK語(yǔ)句實(shí)際上是定義了一個(gè)參照完整性約束語(yǔ)句實(shí)際上是定義了一個(gè)參照完整性約束u一般而言,由于一般而言,由于CheckCheck條件中允許出現(xiàn)包含其他關(guān)系的子

17、查詢,條件中允許出現(xiàn)包含其他關(guān)系的子查詢,CheckCheck條件可能變得更復(fù)雜,也更難檢測(cè)。條件可能變得更復(fù)雜,也更難檢測(cè)。DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) nFKFK的值必須為(參照完整性?):的值必須為(參照完整性?):u取空值;取空值;u等于對(duì)應(yīng)等于對(duì)應(yīng)PKPK中某個(gè)主碼值。中某個(gè)主碼值。 nFKFK列級(jí)約束列級(jí)約束CREATE TABLE DoctorCREATE TABLE DoctorDno VARCHAR(10),Dno VARCHAR(10),Dname VARCHAR(50) NOT NULL,Dname VARCHAR(50) NOT NULL

18、,Dsex VARCHAR(2),Dsex VARCHAR(2),Dage INT,Dage INT,Ddeptno VARCHAR(10)Ddeptno VARCHAR(10) REFERENCES Dept(DeptNo)REFERENCES Dept(DeptNo), ,Dlevel VARCHAR(50),Dlevel VARCHAR(50),Dsalary DECIMAL(18,2),Dsalary DECIMAL(18,2),PRIMARY KEY(Dno),PRIMARY KEY(Dno),CHECK( Dsex IN (CHECK( Dsex IN (男男, , 女女) DAT

19、ABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) nFKFK表級(jí)約束表級(jí)約束CREATE TABLE RecipeDetailCREATE TABLE RecipeDetailRno VARCHAR(10),Rno VARCHAR(10),Mno VARCHAR(10) NOT NULL,Mno VARCHAR(10) NOT NULL,Mamount DECIMAL(18,0),Mamount DECIMAL(18,0),PRIMARY KEY(Rno,Mno),PRIMARY KEY(Rno,Mno),FOREIGN KEYFOREIGN KEY(MnoMno)REFERENCES

20、Medicine(Mno)REFERENCES Medicine(Mno) nRDBMSRDBMS實(shí)現(xiàn)參照完整性時(shí)需要考慮的問(wèn)題:實(shí)現(xiàn)參照完整性時(shí)需要考慮的問(wèn)題:u外碼是否可以接受空值的問(wèn)題外碼是否可以接受空值的問(wèn)題u在被參照關(guān)系中刪除元組時(shí)的問(wèn)題在被參照關(guān)系中刪除元組時(shí)的問(wèn)題u在參照關(guān)系中插入元組時(shí)的問(wèn)題在參照關(guān)系中插入元組時(shí)的問(wèn)題u修改關(guān)系中主碼的問(wèn)題修改關(guān)系中主碼的問(wèn)題DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) n關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)都提供了定義和檢查實(shí)體完整性、參關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)都提供了定義和檢查實(shí)體完整性、參照完整性和用戶定義的完整性的功能照完整性和用戶定義的完整性的功能n

21、違反實(shí)體完整性規(guī)則和用戶定義的完整性規(guī)則違反實(shí)體完整性規(guī)則和用戶定義的完整性規(guī)則的操作的操作u一般是拒絕執(zhí)行一般是拒絕執(zhí)行n違反參照完整性違反參照完整性的操作的操作u拒絕執(zhí)行拒絕執(zhí)行u或者接受這個(gè)操作,同時(shí)執(zhí)行一些附加的操作,以保證數(shù)據(jù)庫(kù)的狀態(tài)或者接受這個(gè)操作,同時(shí)執(zhí)行一些附加的操作,以保證數(shù)據(jù)庫(kù)的狀態(tài)正確正確DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) n受限策略(受限策略(RESTRICTEDRESTRICTED)u系統(tǒng)的默認(rèn)方式。系統(tǒng)的默認(rèn)方式。u當(dāng)出現(xiàn)違背參照完整性規(guī)則的更新操作請(qǐng)求時(shí),系統(tǒng)拒絕執(zhí)行該操作。當(dāng)出現(xiàn)違背參照完整性規(guī)則的更新操作請(qǐng)求時(shí),系統(tǒng)拒絕執(zhí)行該操作。n

22、?請(qǐng)分析:在?請(qǐng)分析:在RecipeDetailRecipeDetail中新增、修改中新增、修改MnoMno分量,在分量,在MedicineMedicine中刪除、修改中刪除、修改MnoMno的分量值時(shí),系統(tǒng)如何處理?的分量值時(shí),系統(tǒng)如何處理?CREATE TABLE RecipeDetailCREATE TABLE RecipeDetailRno VARCHAR(10),Rno VARCHAR(10),Mno VARCHAR(10) NOT NULL,Mno VARCHAR(10) NOT NULL,Mamount DECIMAL(18,0),Mamount DECIMAL(18,0),PR

23、IMARY KEY(Rno,Mno),PRIMARY KEY(Rno,Mno),FOREIGN KEY(Mno) REFERENCES Medicine(Mno)FOREIGN KEY(Mno) REFERENCES Medicine(Mno) DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) n置空策略(置空策略(SET-NULLSET-NULL)u依照參照完整性規(guī)則,外碼是可以取空值的。依照參照完整性規(guī)則,外碼是可以取空值的。u但具體能否取空值,要根據(jù)應(yīng)用環(huán)境的語(yǔ)義來(lái)定。但具體能否取空值,要根據(jù)應(yīng)用環(huán)境的語(yǔ)義來(lái)定。n示例示例CREATE TABLE DoctorCREATE T

24、ABLE DoctorDno VARCHAR(10) PRIMARY KEY,Dno VARCHAR(10) PRIMARY KEY,Dname VARCHAR(50) NOT NULL,Dname VARCHAR(50) NOT NULL,Dsex VARCHAR(2),Dsex VARCHAR(2),Dage INT,Dage INT,Ddeptno VARCHAR(10) REFERENCES Dept(DeptNo)Ddeptno VARCHAR(10) REFERENCES Dept(DeptNo)ON DELETE SET NULL ,ON DELETE SET NULL ,Dle

25、vel VARCHAR(50),Dlevel VARCHAR(50),Dsalary DECIMAL(18,2)Dsalary DECIMAL(18,2) DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) n級(jí)聯(lián)策略(級(jí)聯(lián)策略(CASCADECASCADE)u不用拒絕用戶操作請(qǐng)求的處理方式。不用拒絕用戶操作請(qǐng)求的處理方式。u連帶處理參照數(shù)據(jù)。連帶處理參照數(shù)據(jù)。n示例:請(qǐng)分析主從表的連帶操作?示例:請(qǐng)分析主從表的連帶操作?CREATE TABLE RecipeDetailCREATE TABLE RecipeDetailRno VARCHAR(10),Rno VARCHAR(10),

26、Mno VARCHAR(10) NOT NULL,Mno VARCHAR(10) NOT NULL,Mamount DECIMAL(18,0),Mamount DECIMAL(18,0),PRIMARY KEY(Rno,Mno),PRIMARY KEY(Rno,Mno),FOREIGN KEYFOREIGN KEY(MnoMno)REFERENCE Medicine(Mno) REFERENCE Medicine(Mno) ON DELETE CASCADEON DELETE CASCADEON UPDATE CASCADEON UPDATE CASCADE DATABASEUESTC學(xué)以致用

27、學(xué)以致用 用以促學(xué)用以促學(xué) n域約束域約束u通過(guò)通過(guò)CREATE DOMAINCREATE DOMAIN可以定義一個(gè)新的域;可以定義一個(gè)新的域;u通過(guò)對(duì)域進(jìn)行約束可以達(dá)到對(duì)屬性列取值的約束;通過(guò)對(duì)域進(jìn)行約束可以達(dá)到對(duì)屬性列取值的約束;uSQL92SQL92用一個(gè)特殊的關(guān)鍵字用一個(gè)特殊的關(guān)鍵字VALUEVALUE表示域的一個(gè)值。表示域的一個(gè)值。u統(tǒng)一約束,便于修改。統(tǒng)一約束,便于修改。n定義域定義域CREATE DOMAIN SexVal CREATE DOMAIN SexVal CHAR(2)CHAR(2)CHECK (VALUE IN(CHECK (VALUE IN(男男, , 女女););

28、n使用域使用域CREATE TABLE PatientCREATE TABLE PatientPno VARCHAR(10),Pno VARCHAR(10),Pname VARCHAR(50) NOT NULL,Pname VARCHAR(50) NOT NULL,Psex Psex SexValSexVal, ,Page INT,Page INT,Pino VARCHAR(50),Pino VARCHAR(50),Pid VARCHAR(18),Pid VARCHAR(18),PRIMARY KEY(Pno)PRIMARY KEY(Pno)DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)

29、用以促學(xué) n 表級(jí)約束只關(guān)聯(lián)一張表。雖然在使用表級(jí)約束只關(guān)聯(lián)一張表。雖然在使用CHECKCHECK語(yǔ)句時(shí)其表達(dá)式中可以語(yǔ)句時(shí)其表達(dá)式中可以引用其他關(guān)系表,但表級(jí)約束要求關(guān)聯(lián)的表是非空的。引用其他關(guān)系表,但表級(jí)約束要求關(guān)聯(lián)的表是非空的。n 當(dāng)約束條件涉及兩張、甚至更多的關(guān)系表時(shí),這種表級(jí)約束的缺當(dāng)約束條件涉及兩張、甚至更多的關(guān)系表時(shí),這種表級(jí)約束的缺陷就顯現(xiàn)出來(lái),不能滿足需要。陷就顯現(xiàn)出來(lái),不能滿足需要。n SQLSQL中的斷言可以解決多張關(guān)系表關(guān)聯(lián)的約束定義。中的斷言可以解決多張關(guān)系表關(guān)聯(lián)的約束定義。n 前面介紹的域約束和參照完整性約束是斷言的特殊形式,它們?nèi)萸懊娼榻B的域約束和參照完整性約束是

30、斷言的特殊形式,它們?nèi)菀讬z測(cè)并適用于很多數(shù)據(jù)庫(kù)應(yīng)用。易檢測(cè)并適用于很多數(shù)據(jù)庫(kù)應(yīng)用。n 當(dāng)創(chuàng)建斷言時(shí),系統(tǒng)要檢測(cè)其有效性。如果斷言有效,則以后只當(dāng)創(chuàng)建斷言時(shí),系統(tǒng)要檢測(cè)其有效性。如果斷言有效,則以后只有不破壞斷言的數(shù)據(jù)庫(kù)修改才被允許。如果斷言比較復(fù)雜,則檢有不破壞斷言的數(shù)據(jù)庫(kù)修改才被允許。如果斷言比較復(fù)雜,則檢測(cè)會(huì)帶來(lái)相當(dāng)大的開(kāi)銷(xiāo)。因此,使用斷言應(yīng)該特別小心。測(cè)會(huì)帶來(lái)相當(dāng)大的開(kāi)銷(xiāo)。因此,使用斷言應(yīng)該特別小心。DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) n 斷言格式斷言格式CREATE ASSERTION CREATE ASSERTION CHECK CHECK n 斷言示例斷言

31、示例Create assertion salarycheck check(Create assertion salarycheck check(Not exists(Not exists(Select * from Doctor xWhere Dsalary = some ( select Dsalary from Doctor y Where x.Deptno=y.Deptno and y.Dno =(Select Manager from Dept Where x.Deptno =Dept.Deptno) )DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) n 任何時(shí)候都可以添

32、加、修改、刪除約束。任何時(shí)候都可以添加、修改、刪除約束。n 為了對(duì)約束進(jìn)行修改、刪除,有必要對(duì)約束命名。為了對(duì)約束進(jìn)行修改、刪除,有必要對(duì)約束命名。n 約束命名:約束命名:CONSTRAINTCONSTRAINT關(guān)鍵字后跟約束名稱關(guān)鍵字后跟約束名稱n 約束示例約束示例CREATE TABLE RecipeDetailCREATE TABLE RecipeDetailRno VARCHAR(10),Rno VARCHAR(10),Mno VARCHAR(10) Mno VARCHAR(10) CONSTRAINT notnullMno NOT NULL,CONSTRAINT notnullMno

33、 NOT NULL,Mamount DECIMAL(18,0),Mamount DECIMAL(18,0),CONSTRAINT pkRecipeDetailRnoMno CONSTRAINT pkRecipeDetailRnoMno PRIMARY KEY(Rno,Mno),PRIMARY KEY(Rno,Mno),CONSTRAINT fkRecipeDetailMnoMedicine CONSTRAINT fkRecipeDetailMnoMedicine FOREIGN KEYFOREIGN KEY(MnoMno)REFERENCES Medicine(Mno)REFERENCES M

34、edicine(Mno)ON DELETE CASCADEON DELETE CASCADEON UPDATE CASCADEON UPDATE CASCADE DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) n 刪除約束刪除約束uALTER TABLE ALTER TABLE RecipeDetail RecipeDetail DROPDROP CONSTRAINT CONSTRAINT pkRecipeDetailRnoMnopkRecipeDetailRnoMno n 增加約束增加約束uALTER TABLE ALTER TABLE RecipeDetail RecipeD

35、etail ADDADD CONSTRAINT CONSTRAINT pkRecipeDetailRnoMnopkRecipeDetailRnoMno PRIMARY KEY(Rno,Mno);PRIMARY KEY(Rno,Mno);uALTER TABLE ALTER TABLE RecipeDetail RecipeDetail ADD ADD CONSTRAINT CONSTRAINT fkRecipeDetailMnoMedicinefkRecipeDetailMnoMedicine FOREIGN KEY(Mno)REFERENCES FOREIGN KEY(Mno)REFEREN

36、CES Medicine (Mno);Medicine (Mno);uALTER TABLE ALTER TABLE D Doctor octor ADD ADD CONSTRAINT CONSTRAINT checkPsexcheckPsex CHECK( Psex IN CHECK( Psex IN (男男, , 女女););uALTER DOMAIN ALTER DOMAIN rfee DECIMAL(18,2) rfee DECIMAL(18,2) DROPDROP CONSTRAINT rfee_test CONSTRAINT rfee_test;n 刪除斷言刪除斷言u(píng)DROP ASSERTION DROP ASSERTION salarycheck. salarycheck. DATABASEUESTC學(xué)以致用學(xué)以致用 用以促學(xué)用以促學(xué) n每當(dāng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)發(fā)生變化時(shí),每當(dāng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)發(fā)生變化時(shí),DBMSDBMS將立即檢查這將立即檢查這些變化與約束是否被沖突,若有沖突些變化與約束是否被沖突,若有沖突DBMSDBMS會(huì)拒絕產(chǎn)生會(huì)拒絕產(chǎn)生變化

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論