第8章數(shù)據(jù)庫(kù)數(shù)據(jù)完整性約束_第1頁(yè)
第8章數(shù)據(jù)庫(kù)數(shù)據(jù)完整性約束_第2頁(yè)
第8章數(shù)據(jù)庫(kù)數(shù)據(jù)完整性約束_第3頁(yè)
第8章數(shù)據(jù)庫(kù)數(shù)據(jù)完整性約束_第4頁(yè)
第8章數(shù)據(jù)庫(kù)數(shù)據(jù)完整性約束_第5頁(yè)
已閱讀5頁(yè),還剩44頁(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、第第8 8章章 數(shù)據(jù)完整性約束數(shù)據(jù)完整性約束8.1 8.1 數(shù)據(jù)完整性的概念數(shù)據(jù)完整性的概念8.2 8.2 實(shí)現(xiàn)數(shù)據(jù)完整性實(shí)現(xiàn)數(shù)據(jù)完整性8.3 8.3 系統(tǒng)對(duì)完整性約束的檢查系統(tǒng)對(duì)完整性約束的檢查8.4 8.4 刪除約束刪除約束8.5 8.5 觸發(fā)器觸發(fā)器*18.1 8.1 數(shù)據(jù)完整性的概念數(shù)據(jù)完整性的概念o 數(shù)據(jù)完整性是指數(shù)據(jù)的正確性和相容性。如數(shù)據(jù)完整性是指數(shù)據(jù)的正確性和相容性。如:n 每個(gè)人的身份證號(hào)必須是唯一的,每個(gè)人的身份證號(hào)必須是唯一的,n 人的性別只能是人的性別只能是男男或或女女。o 為了維護(hù)數(shù)據(jù)的完整性,為了維護(hù)數(shù)據(jù)的完整性,DBMSDBMS必須要提供一種必須要提供一種機(jī)制來(lái)檢

2、查數(shù)據(jù)庫(kù)中的數(shù)據(jù)。機(jī)制來(lái)檢查數(shù)據(jù)庫(kù)中的數(shù)據(jù)。o 這些加在數(shù)據(jù)庫(kù)數(shù)據(jù)之上的語(yǔ)義約束條件就稱這些加在數(shù)據(jù)庫(kù)數(shù)據(jù)之上的語(yǔ)義約束條件就稱為為數(shù)據(jù)完整性約束條件數(shù)據(jù)完整性約束條件。o DBMSDBMS中檢查數(shù)據(jù)是否滿足完整性條件的機(jī)制就中檢查數(shù)據(jù)是否滿足完整性條件的機(jī)制就稱為稱為完整性檢查完整性檢查。*2完整性約束條件的作用對(duì)象完整性約束條件的作用對(duì)象o列級(jí)約束列級(jí)約束o元組約束元組約束o關(guān)系約束關(guān)系約束*3列級(jí)約束列級(jí)約束o 主要是對(duì)列的類型、取值范圍、精度等的約束,主要是對(duì)列的類型、取值范圍、精度等的約束,包括:包括:n 對(duì)數(shù)據(jù)類型的約束對(duì)數(shù)據(jù)類型的約束:數(shù)據(jù)類型、長(zhǎng)度、精度等:數(shù)據(jù)類型、長(zhǎng)度、精度

3、等例:例:sno char(8)sno char(8)n 對(duì)數(shù)據(jù)格式的約束對(duì)數(shù)據(jù)格式的約束: Sno: Sno:2010201001011 10101年年專業(yè)專業(yè)班號(hào)班號(hào)序列號(hào)序列號(hào)n 對(duì)取值范圍的約束對(duì)取值范圍的約束:如學(xué)生的成績(jī)?nèi)≈捣秶鸀椋喝鐚W(xué)生的成績(jī)?nèi)≈捣秶鸀? 0100100。n 對(duì)空值的約束對(duì)空值的約束:列:列是否是否允許允許有有空空值值。*4元組約束元組約束o元組約束是元組中各個(gè)字段之間的聯(lián)元組約束是元組中各個(gè)字段之間的聯(lián)系的約束,如:系的約束,如:n 開(kāi)始日期小于結(jié)束日期開(kāi)始日期小于結(jié)束日期n 訂貨數(shù)量小于等于庫(kù)存數(shù)量訂貨數(shù)量小于等于庫(kù)存數(shù)量n 最低工資不能低于規(guī)定的最低值最低工

4、資不能低于規(guī)定的最低值*5關(guān)系約束關(guān)系約束o是指若干元組之間、關(guān)系之間的聯(lián)系是指若干元組之間、關(guān)系之間的聯(lián)系的約束。比如的約束。比如:n 學(xué)號(hào)的取值不能重復(fù)也不能取空值學(xué)號(hào)的取值不能重復(fù)也不能取空值n 學(xué)生修課表中學(xué)號(hào)的取值受學(xué)生表學(xué)生修課表中學(xué)號(hào)的取值受學(xué)生表中學(xué)號(hào)取值的限制等中學(xué)號(hào)取值的限制等。*6實(shí)現(xiàn)數(shù)據(jù)完整性的方法實(shí)現(xiàn)數(shù)據(jù)完整性的方法o 可以在服務(wù)器端完成,也可以在客戶端可以在服務(wù)器端完成,也可以在客戶端編程實(shí)現(xiàn)。編程實(shí)現(xiàn)。o 在在服務(wù)器端服務(wù)器端實(shí)現(xiàn)數(shù)據(jù)完整性的方法主要實(shí)現(xiàn)數(shù)據(jù)完整性的方法主要有兩種有兩種:n 聲明數(shù)據(jù)完整性聲明數(shù)據(jù)完整性n 觸發(fā)器觸發(fā)器o 在在客戶端客戶端實(shí)現(xiàn)數(shù)據(jù)完

5、整性主要是用前端實(shí)現(xiàn)數(shù)據(jù)完整性主要是用前端開(kāi)發(fā)工具,在應(yīng)用程序中編寫(xiě)代碼保證開(kāi)發(fā)工具,在應(yīng)用程序中編寫(xiě)代碼保證。*78.2 8.2 實(shí)現(xiàn)數(shù)據(jù)完整性實(shí)現(xiàn)數(shù)據(jù)完整性o 設(shè)有如下兩張表:設(shè)有如下兩張表:CREATE TABLE CREATE TABLE 職工表職工表( ( 職工編號(hào)職工編號(hào) CHAR(7) NOT NULL, CHAR(7) NOT NULL, 職工名職工名 CHAR(10)NOT NULL, CHAR(10)NOT NULL,工作編號(hào)工作編號(hào) CHAR(8), CHAR(8),工資工資 SMALLINT, SMALLINT,電話電話 CHAR(8), CHAR(8),身份證號(hào)身份證

6、號(hào) CHAR(18) CHAR(18) ) *8CREATE TABLE CREATE TABLE 工作表工作表( ( 工作編號(hào)工作編號(hào) CHAR(8) NOT NULL, CHAR(8) NOT NULL,最低工資最低工資 SMALLINT, SMALLINT,最高工資最高工資 SMALLINT SMALLINT ) )1.1.實(shí)體完整性約束實(shí)體完整性約束o實(shí)體完整性是用實(shí)體完整性是用PRIMARY KEYPRIMARY KEY來(lái)保證來(lái)保證。注意:注意:o每個(gè)表只能有一個(gè)每個(gè)表只能有一個(gè)PRIMARY KEYPRIMARY KEY約束;約束;o用用PRIMARY KEYPRIMARY KEY

7、約束的列的取值必須是約束的列的取值必須是不重復(fù)的(對(duì)由多列構(gòu)成的主鍵,是不重復(fù)的(對(duì)由多列構(gòu)成的主鍵,是這些主鍵列組合起來(lái)取值不重),并這些主鍵列組合起來(lái)取值不重),并且不允許有空值且不允許有空值。*9添加主鍵約束添加主鍵約束ALTER TABLE ALTER TABLE 表名表名 ADD CONSTRAINT ADD CONSTRAINT 約束名約束名 PRIMARY KEY PRIMARY KEY ( , , n n )*10示例示例ALTER TABLE ALTER TABLE 職工表職工表 ADD CONSTRAINT PK_EMP ADD CONSTRAINT PK_EMP PRIM

8、ARY KEY PRIMARY KEY (職工編號(hào))(職工編號(hào))ALTER TABLE ALTER TABLE 工作表工作表 ADD CONSTRAINT PK_JOB ADD CONSTRAINT PK_JOB PRIMARY KEY PRIMARY KEY (工作編號(hào))(工作編號(hào))*112. 2. 唯一值約束唯一值約束o 用用UNIQUEUNIQUE約束實(shí)現(xiàn),用于限制一個(gè)列或者是約束實(shí)現(xiàn),用于限制一個(gè)列或者是多個(gè)列的組合取值不重復(fù)。多個(gè)列的組合取值不重復(fù)。o 用在事實(shí)上具有唯一性的屬性列上,比如身用在事實(shí)上具有唯一性的屬性列上,比如身份證號(hào)碼、駕駛證號(hào)碼等份證號(hào)碼、駕駛證號(hào)碼等。注意。注意

9、:o 有有UNIQUEUNIQUE約束的列允許有一個(gè)空值;約束的列允許有一個(gè)空值;o 在一個(gè)表中可以定義多個(gè)在一個(gè)表中可以定義多個(gè)UNIQUEUNIQUE約束;約束;o 可以在一個(gè)列或多個(gè)列上定義可以在一個(gè)列或多個(gè)列上定義UNIQUEUNIQUE約束;約束;*12在創(chuàng)建表時(shí)定義在創(chuàng)建表時(shí)定義UNIQUEUNIQUE約束約束CREATE TABLE CREATE TABLE 表名(表名( 列名列名 類型類型 CONSTRAINT CONSTRAINT 約束名約束名 UNIQUE UNIQUE( , , n n), , )或者:或者:CREATE TABLE CREATE TABLE 表名(表名(

10、 列名列名 類型類型, , CONSTRAINT CONSTRAINT 約束名約束名 UNIQUE UNIQUE( , , n n)*13添加添加UNIQUEUNIQUE約束約束ALTER TABLE ALTER TABLE 表名表名 ADD CONSTRAINT ADD CONSTRAINT 約束名約束名 UNIQUE UNIQUE( , , n n )*14示例示例創(chuàng)建表時(shí)定義創(chuàng)建表時(shí)定義o 例例2.2.為為 “ “身份證號(hào)身份證號(hào)”列添加唯一值約束。列添加唯一值約束。CREATE TABLE CREATE TABLE 職工表(職工表(身份證號(hào)身份證號(hào) CHAR(19) CHAR(19)

11、UNIQUEUNIQUE, , )或:或:CREATE TABLE CREATE TABLE 職工表(職工表(身份證號(hào)身份證號(hào) CHAR(19), CHAR(19),UNIQUE(UNIQUE(身份證號(hào)身份證號(hào)) ), ,)*15示例示例添加約束添加約束ALTER TABLE ALTER TABLE 職工表職工表 ADD CONSTRAINT UN_EMP ADD CONSTRAINT UN_EMP UNIQUE UNIQUE (身份證號(hào))(身份證號(hào))*16復(fù)合唯一約束示例復(fù)合唯一約束示例o 例例3.3.設(shè)設(shè)authorsauthors表,其中表,其中有有au_fnameau_fname和和a

12、u_lnameau_lname兩個(gè)列,現(xiàn)要限制這兩個(gè)列組合起來(lái)不重復(fù)。兩個(gè)列,現(xiàn)要限制這兩個(gè)列組合起來(lái)不重復(fù)。 CREATE TABLE authors ( CREATE TABLE authors ( au_fname VARCHAR(20), au_fname VARCHAR(20), au_lname VARCHAR(20) au_lname VARCHAR(20) UNIQUE(au_fname, UNIQUE(au_fname, au_lname)au_lname), , -作為列級(jí)約束定義作為列級(jí)約束定義) )*17復(fù)合唯一約束示例復(fù)合唯一約束示例CREATE TABLE auth

13、ors (CREATE TABLE authors (au_fname VARCHAR(20),au_fname VARCHAR(20),au_lname VARCHAR(20) ,au_lname VARCHAR(20) ,UNIQUE(au_fname, au_lname)UNIQUE(au_fname, au_lname), , -作為表級(jí)約束定義作為表級(jí)約束定義) )18*復(fù)合唯一約束示例復(fù)合唯一約束示例o在已創(chuàng)建好的表上添加唯一值約束:在已創(chuàng)建好的表上添加唯一值約束:ALTER TABLE authorsALTER TABLE authors ADD CONSTRAINT UN_Na

14、me ADD CONSTRAINT UN_Name UNIQUE (au_fname, au_lname)UNIQUE (au_fname, au_lname)*193. 3. 參照完整性參照完整性o參照完整性(引用完整性)用參照完整性(引用完整性)用FOREIGN KEYFOREIGN KEY約束保證約束保證. .o定義定義FOREIGN KEYFOREIGN KEY約束時(shí)要注意:約束時(shí)要注意:n 外鍵列引用的列必須是有外鍵列引用的列必須是有PRIMARY PRIMARY KEYKEY約束或約束或UNIQUEUNIQUE約束的列約束的列,通常,通常是有是有PRIMARY KEYPRIMARY

15、 KEY約束約束的列的列。*20添加外鍵約束添加外鍵約束ALTER TABLE ALTER TABLE 表名表名 ADD CONSTRAINT ADD CONSTRAINT 約束名約束名 FOREIGN KEY FOREIGN KEY ( )REFERENCES REFERENCES 引用表名(引用表名( ) ON DELETE ON DELETE CASCADE | NO ACTION CASCADE | NO ACTION ON UPDATE ON UPDATE CASCADE | NO ACTION CASCADE | NO ACTION o ON DELETEON DELETE:級(jí)聯(lián)或

16、限制刪除;:級(jí)聯(lián)或限制刪除;o ON UPDATEON UPDATE:級(jí)聯(lián)或限制更新。:級(jí)聯(lián)或限制更新。*21刪除示例刪除示例*22SnoSnameSsexSageSdept08111010811101李勇李勇 男男2121計(jì)算機(jī)系計(jì)算機(jī)系08111020811102劉晨劉晨 男男2020計(jì)算機(jī)系計(jì)算機(jī)系08111030811103王敏王敏 女女2020計(jì)算機(jī)系計(jì)算機(jī)系08111040811104張小紅張小紅 女女1919計(jì)算機(jī)系計(jì)算機(jī)系08211010821101張立張立 男男2020信息管理系信息管理系08211020821102吳賓吳賓 女女1919信息管理系信息管理系082110308

17、21103張海張海 男男2020信息管理系信息管理系SnoCnoGrade0811101C001 960811101C002 800811101C003 840811101C005 620811102C001 920811102C002 900811102C004 840821102C001 760821102C004 850821102C005 730821102C007 NULL0821103C001 500821103C004 8008111020811102劉晨劉晨 男男2020計(jì)算機(jī)系計(jì)算機(jī)系0811102C001 920811102C002 900811102C004 84ON D

18、ELETE CASCADEON DELETE CASCADEON DELETEON DELETE NO ACTION NO ACTION08111020811102劉晨劉晨 男男2020計(jì)算機(jī)系計(jì)算機(jī)系0811102C001 920811102C002 900811102C004 84更新示例更新示例*23SnoSnameSsexSageSdept08111010811101李勇李勇 男男2121計(jì)算機(jī)系計(jì)算機(jī)系08111020811102劉晨劉晨 男男2020計(jì)算機(jī)系計(jì)算機(jī)系08111030811103王敏王敏 女女2020計(jì)算機(jī)系計(jì)算機(jī)系08111040811104張小紅張小紅 女女191

19、9計(jì)算機(jī)系計(jì)算機(jī)系08211010821101張立張立 男男2020信息管理系信息管理系08211020821102吳賓吳賓 女女1919信息管理系信息管理系08211030821103張海張海 男男2020信息管理系信息管理系SnoCnoGrade0811101C001 960811101C002 800811101C003 840811101C005 620811102C001 920811102C002 900811102C004 840821102C001 760821102C004 850821102C005 730821102C007 NULL0821103C001 5008211

20、03C004 8008111020811102劉晨劉晨 男男2020計(jì)算機(jī)系計(jì)算機(jī)系0811102C001 920811102C002 900811102C004 84ON UPDATE CASCADEON UPDATE CASCADEON UPDATEON UPDATE NO ACTION NO ACTION08111100811110劉晨劉晨 男男2020計(jì)算機(jī)系計(jì)算機(jī)系0811110C001 920811110C002 900811110C004 84示例示例o例例4 4 為職工表的為職工表的“工作編號(hào)工作編號(hào)”列添列添加外鍵約束,此列引用工作表中的加外鍵約束,此列引用工作表中的“工作編

21、號(hào)工作編號(hào)”列。列。ALTER TABLE ALTER TABLE 職工表職工表 ADD CONSTRAINT FK_job_id ADD CONSTRAINT FK_job_id FOREIGN KEY( FOREIGN KEY( 工作編號(hào)工作編號(hào) ) ) REFERENCES REFERENCES 工作表工作表 ( ( 工作編號(hào)工作編號(hào) ) )*244. 4. 默認(rèn)值約束默認(rèn)值約束o用用DEFAULTDEFAULT約束實(shí)現(xiàn),用于提供列的約束實(shí)現(xiàn),用于提供列的默認(rèn)值。注意:默認(rèn)值。注意:o只在向表中插入數(shù)據(jù)時(shí)才檢查只在向表中插入數(shù)據(jù)時(shí)才檢查DEFAULTDEFAULT約束;約束;o每個(gè)列只能

22、有一個(gè)每個(gè)列只能有一個(gè)DEFAULTDEFAULT約束。約束。*25定義或添加默認(rèn)值約束定義或添加默認(rèn)值約束CREATE TABLE CREATE TABLE 表名(表名( 列名列名 類型類型 CONSTRAINT CONSTRAINT 約束名約束名 DEFAULT DEFAULT 常常量表達(dá)式量表達(dá)式, , )ALTER TABLE ALTER TABLE 表名表名 ADD CONSTRAINT ADD CONSTRAINT 約束名約束名 DEFAULT DEFAULT 常量表達(dá)式常量表達(dá)式 FOR FOR 列名列名*26示例示例o 例例5 5 在職工表中,如果某個(gè)職工沒(méi)有電話,則在職工表中

23、,如果某個(gè)職工沒(méi)有電話,則寫(xiě)入默認(rèn)值:寫(xiě)入默認(rèn)值:1111111111111111。CREATE TABLE CREATE TABLE 職工表職工表( (電話電話 CHAR(8) CHAR(8) DEFAULT 11111111 DEFAULT 11111111 , ,) )o 或:或:ALTER TABLE ALTER TABLE 職工表職工表 ADD CONSTRAINT DF_PHONE ADD CONSTRAINT DF_PHONE DEFAULT 11111111 FOR DEFAULT 11111111 FOR 電話電話*275. 5. 列取值范圍約束列取值范圍約束o 用用CHEC

24、KCHECK約束實(shí)現(xiàn),用于限制列的取值在指定范約束實(shí)現(xiàn),用于限制列的取值在指定范圍內(nèi),即約束列的取值符合應(yīng)用語(yǔ)義,如圍內(nèi),即約束列的取值符合應(yīng)用語(yǔ)義,如:n 人的性別只能是人的性別只能是“男男”或或“女女”,n 工資必須大于工資必須大于10001000。o 使用使用CHECKCHECK約束時(shí)注意:約束時(shí)注意:n 在執(zhí)行在執(zhí)行INSERTINSERT語(yǔ)句和語(yǔ)句和UPDATEUPDATE語(yǔ)句時(shí)系統(tǒng)自動(dòng)語(yǔ)句時(shí)系統(tǒng)自動(dòng)檢查檢查CHECKCHECK約束;約束;n CHECKCHECK約束可以限制一個(gè)列的取值范圍,也約束可以限制一個(gè)列的取值范圍,也可以限制同表多列之間的取值約束關(guān)系。可以限制同表多列之間的

25、取值約束關(guān)系。*28定義或添加定義或添加CHECKCHECK約束約束CREATE TABLE CREATE TABLE 表名表名( ( 列名列名 類型類型 CONSTRAINT CONSTRAINT 約束名約束名 CHECK( CHECK(邏輯表達(dá)式邏輯表達(dá)式) ), , )或:或:ALTER TABLE ALTER TABLE 表名表名 ADD CONSTRAINT ADD CONSTRAINT 約束名約束名 CHECK CHECK (邏輯表達(dá)式)(邏輯表達(dá)式)*29示例示例定義定義CHECKCHECK約束約束例例6 6 為職工表定義工資必須大于等于為職工表定義工資必須大于等于1000100

26、0的約束。的約束。CREATE TABLE CREATE TABLE 職工表職工表 ( 工資工資 SMALLINT SMALLINT CHECK ( CHECK ( 工資工資 = 1000 )= 1000 ), , )o 或者:或者:CREATE TABLE CREATE TABLE 職工表職工表 ( 工資工資 SMALLINT,SMALLINT, CHECK ( CHECK ( 工資工資 = 1000 )= 1000 ) , , )*30示例示例添加添加CHECKCHECK約束約束ALTER TABLE ALTER TABLE 職工表職工表 ADD CONSTRAINT CHK_Salary

27、ADD CONSTRAINT CHK_Salary CHECK ( CHECK ( 工資工資 = 1000 ) = 1000 )*31示例:定義多列取值約束示例:定義多列取值約束o 例例7 7 限制限制“最低工資最低工資”=“最高工資最高工資”。CREATE TABLE CREATE TABLE 工作表(工作表(最低工資最低工資 int, int,最高工資最高工資 int, int, CHECKCHECK(最低工資(最低工資 = = 最高工資)最高工資), , )o 注意:多列之間的注意:多列之間的CHECKCHECK約束只能定義在表級(jí)約約束只能定義在表級(jí)約束處。束處。*32示例:添加多列取值

28、約束示例:添加多列取值約束ALTER TABLE ALTER TABLE 工作表工作表 ADD CONSTRAINT CHK_Job_Salary ADD CONSTRAINT CHK_Job_Salary CHECK ( CHECK ( 最低工資最低工資 = = 最高工資最高工資 ) )*33示例示例o例例8 8 限制電話號(hào)碼列的每一位的取限制電話號(hào)碼列的每一位的取值必須是值必須是0 0 9 9之間的數(shù)字。之間的數(shù)字。 CHECK CHECK(電話(電話 LIKE 0-90-90-9 LIKE 0-90-90-9 0-90-90-90-90-90-90-90-90-90-9) *348.3

29、8.3 系統(tǒng)對(duì)完整性約束的檢查系統(tǒng)對(duì)完整性約束的檢查o 主鍵約束主鍵約束:插入插入和更新數(shù)據(jù)和更新數(shù)據(jù)時(shí),檢查新時(shí),檢查新數(shù)據(jù)的主鍵值是否與已存在的主鍵值重?cái)?shù)據(jù)的主鍵值是否與已存在的主鍵值重復(fù),或者新主鍵值是否為空。復(fù),或者新主鍵值是否為空。o 唯一值約束唯一值約束:同主鍵約束。:同主鍵約束。o 默認(rèn)值約束默認(rèn)值約束:插入數(shù)據(jù):插入數(shù)據(jù)且沒(méi)有為某個(gè)列且沒(méi)有為某個(gè)列提供值提供值時(shí)檢查。時(shí)檢查。o 列取值范圍約束列取值范圍約束:插入和修改:插入和修改有列取值有列取值約束的數(shù)據(jù)檢查約束的數(shù)據(jù)檢查。*35外鍵外鍵約束的檢查約束的檢查對(duì)子表對(duì)子表o插入數(shù)據(jù)插入數(shù)據(jù)時(shí),檢查新數(shù)據(jù)的外鍵值是時(shí),檢查新數(shù)據(jù)的

30、外鍵值是否在主表的主鍵值范圍內(nèi)。否在主表的主鍵值范圍內(nèi)。o修改外鍵修改外鍵列值時(shí),檢查修改后的外鍵列值時(shí),檢查修改后的外鍵值是否在主表的主鍵值范圍內(nèi)值是否在主表的主鍵值范圍內(nèi)。*36外鍵外鍵約束的檢查約束的檢查對(duì)主表對(duì)主表o 刪除數(shù)據(jù)刪除數(shù)據(jù)時(shí),檢查被刪除數(shù)據(jù)的主鍵值是否在子時(shí),檢查被刪除數(shù)據(jù)的主鍵值是否在子表中有對(duì)它的引用,若無(wú),則刪除之;若有,則表中有對(duì)它的引用,若無(wú),則刪除之;若有,則看是否允許級(jí)聯(lián)刪除看是否允許級(jí)聯(lián)刪除:n 若允許若允許:則將子表則將子表中相應(yīng)中相應(yīng)數(shù)據(jù)一起刪掉;數(shù)據(jù)一起刪掉;n 若不允許若不允許:則刪除失敗。則刪除失敗。o 更改主鍵更改主鍵列值時(shí),檢查被更改的主鍵值是

31、否在子列值時(shí),檢查被更改的主鍵值是否在子表中有對(duì)它的引用,若無(wú),則更改之;若有,則表中有對(duì)它的引用,若無(wú),則更改之;若有,則看是否允許級(jí)聯(lián)更改看是否允許級(jí)聯(lián)更改:n 若允許若允許:則將子表中則將子表中相應(yīng)數(shù)據(jù)相應(yīng)數(shù)據(jù)一起進(jìn)行更改;一起進(jìn)行更改;n 若不允許若不允許:則更改失敗則更改失敗。*378.4 8.4 刪除約束刪除約束ALTER TABLE ALTER TABLE 表名表名 DROP CONSTRAINT DROP CONSTRAINT 約束名約束名o例例9 9 刪除在職工表上定義的限制電刪除在職工表上定義的限制電話號(hào)碼的話號(hào)碼的CHK_PHONECHK_PHONE約束。約束。ALTER

32、 TABLE ALTER TABLE 職工表職工表 DROP CHK_PHONE DROP CHK_PHONE*388.5 8.5 觸發(fā)器觸發(fā)器o是一段由對(duì)數(shù)據(jù)的更改操作引發(fā)的是一段由對(duì)數(shù)據(jù)的更改操作引發(fā)的自自動(dòng)執(zhí)行的代碼動(dòng)執(zhí)行的代碼。更改操作包括更改操作包括:UPDATEUPDATE、INSERTINSERT、DELETEDELETEo通常用于保證業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性通常用于保證業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性o主要優(yōu)點(diǎn)是用戶可以用編程的方法實(shí)主要優(yōu)點(diǎn)是用戶可以用編程的方法實(shí)現(xiàn)復(fù)雜的處理邏輯和商業(yè)規(guī)則,增強(qiáng)現(xiàn)復(fù)雜的處理邏輯和商業(yè)規(guī)則,增強(qiáng)了數(shù)據(jù)完整性約束的功能。了數(shù)據(jù)完整性約束的功能。*39創(chuàng)建觸發(fā)器創(chuàng)

33、建觸發(fā)器CREATE TRIGGER CREATE TRIGGER 觸發(fā)器名稱觸發(fā)器名稱ON ON 表名表名 | | 視圖名視圖名 FOR | AFTER | INSTEAD OF FOR | AFTER | INSTEAD OF INSERT , DELETE , INSERT , DELETE , UPDATE UPDATE AS AS SQL SQL 語(yǔ)句語(yǔ)句*40注意注意o 在一個(gè)表上可以建立多個(gè)名稱不同、類型各異在一個(gè)表上可以建立多個(gè)名稱不同、類型各異的觸發(fā)器,每個(gè)觸發(fā)器可由所有三個(gè)操作引發(fā)的觸發(fā)器,每個(gè)觸發(fā)器可由所有三個(gè)操作引發(fā)o 對(duì)對(duì)AFTERAFTER型型觸發(fā)器,可以在同一種操

34、作上建立多觸發(fā)器,可以在同一種操作上建立多個(gè)觸發(fā)器;個(gè)觸發(fā)器;o 對(duì)對(duì)INSTEAD OFINSTEAD OF型型觸發(fā)器,在同一種操作上只能觸發(fā)器,在同一種操作上只能建立一個(gè)觸發(fā)器。建立一個(gè)觸發(fā)器。o 大部分大部分SQLSQL語(yǔ)句都可用在觸發(fā)器中,但所有的創(chuàng)語(yǔ)句都可用在觸發(fā)器中,但所有的創(chuàng)建和更改數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)對(duì)象的語(yǔ)句、所有建和更改數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)對(duì)象的語(yǔ)句、所有的的DROPDROP語(yǔ)句都不允許在觸發(fā)器中使用。語(yǔ)句都不允許在觸發(fā)器中使用。*41兩個(gè)特殊的臨時(shí)表兩個(gè)特殊的臨時(shí)表o 在觸發(fā)器中可以使用兩個(gè)特殊的臨時(shí)表:在觸發(fā)器中可以使用兩個(gè)特殊的臨時(shí)表:n INSERTEDINSERTEDn

35、DELETEDDELETEDo 由系統(tǒng)自動(dòng)創(chuàng)建,由系統(tǒng)自動(dòng)創(chuàng)建,結(jié)構(gòu)同建立觸發(fā)器的表結(jié)構(gòu)結(jié)構(gòu)同建立觸發(fā)器的表結(jié)構(gòu)o 只能用在觸發(fā)器代碼中。只能用在觸發(fā)器代碼中。o INSERTEDINSERTED:保存保存INSERTINSERT操作中新插入的數(shù)據(jù)和操作中新插入的數(shù)據(jù)和UPDATEUPDATE操作中更新后的數(shù)據(jù);操作中更新后的數(shù)據(jù);o DELETEDDELETED:保存保存DELETEDELETE操作刪除的數(shù)據(jù)和操作刪除的數(shù)據(jù)和UPDATEUPDATE操作中更新前的數(shù)據(jù)操作中更新前的數(shù)據(jù)。*42后觸發(fā)型觸發(fā)器后觸發(fā)型觸發(fā)器o當(dāng)后觸發(fā)型觸發(fā)器執(zhí)行時(shí),引發(fā)觸發(fā)當(dāng)后觸發(fā)型觸發(fā)器執(zhí)行時(shí),引發(fā)觸發(fā)器執(zhí)行

36、的數(shù)據(jù)操作語(yǔ)句已經(jīng)執(zhí)行完成器執(zhí)行的數(shù)據(jù)操作語(yǔ)句已經(jīng)執(zhí)行完成*43執(zhí)行到引發(fā)觸發(fā)器執(zhí)行的操作語(yǔ)句執(zhí)行到引發(fā)觸發(fā)器執(zhí)行的操作語(yǔ)句執(zhí)行觸發(fā)器執(zhí)行觸發(fā)器執(zhí)行該語(yǔ)句執(zhí)行該語(yǔ)句示例:示例:維護(hù)不同表數(shù)據(jù)之間的取值約束維護(hù)不同表數(shù)據(jù)之間的取值約束o 例例1.1.針對(duì)針對(duì)職工表和工作表,限制職工工資必須在相職工表和工作表,限制職工工資必須在相應(yīng)工作的最低工資到最高工資之間。應(yīng)工作的最低工資到最高工資之間。CREATE Trigger tri_SalaryCREATE Trigger tri_Salary ON ON 職工表職工表 AFTER INSERT, UPDATEAFTER INSERT, UPDATEASAS IF EXISTS(SELECT IF EXISTS(SELECT * * FROM FROM 職工表職

溫馨提示

  • 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)論