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

下載本文檔

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

文檔簡介

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)對完整性約束的檢查系統(tǒng)對完整性約束的檢查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 每個人的身份證號必須是唯一的,每個人的身份證號必須是唯一的,n 人的性別只能是人的性別只能是男男或或女女。o 為了維護(hù)數(shù)據(jù)的完整性,為了維護(hù)數(shù)據(jù)的完整性,DBMSDBMS必須要提供一種必須要提供一種機(jī)制來檢

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

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

4、資不能低于規(guī)定的最低值*5關(guān)系約束關(guān)系約束o是指若干元組之間、關(guān)系之間的聯(lián)系是指若干元組之間、關(guān)系之間的聯(lián)系的約束。比如的約束。比如:n 學(xué)號的取值不能重復(fù)也不能取空值學(xué)號的取值不能重復(fù)也不能取空值n 學(xué)生修課表中學(xué)號的取值受學(xué)生表學(xué)生修課表中學(xué)號的取值受學(xué)生表中學(xué)號取值的限制等中學(xué)號取值的限制等。*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ù)完整性主要是用前端開發(fā)工具,在應(yīng)用程序中編寫代碼保證開發(fā)工具,在應(yīng)用程序中編寫代碼保證。*78.2 8.2 實(shí)現(xiàn)數(shù)據(jù)完整性實(shí)現(xiàn)數(shù)據(jù)完整性o 設(shè)有如下兩張表:設(shè)有如下兩張表:CREATE TABLE CREATE TABLE 職工表職工表( ( 職工編號職工編號 CHAR(7) NOT NULL, CHAR(7) NOT NULL, 職工名職工名 CHAR(10)NOT NULL, CHAR(10)NOT NULL,工作編號工作編號 CHAR(8), CHAR(8),工資工資 SMALLINT, SMALLINT,電話電話 CHAR(8), CHAR(8),身份證號身份證

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

7、約束的列的取值必須是約束的列的取值必須是不重復(fù)的(對由多列構(gòu)成的主鍵,是不重復(fù)的(對由多列構(gòu)成的主鍵,是這些主鍵列組合起來取值不重),并這些主鍵列組合起來取值不重),并且不允許有空值且不允許有空值。*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 (職工編號)(職工編號)ALTER TABLE ALTER TABLE 工作表工作表 ADD CONSTRAINT PK_JOB ADD CONSTRAINT PK_JOB PRIMARY KEY PRIMARY KEY (工作編號)(工作編號)*112. 2. 唯一值約束唯一值約束o 用用UNIQUEUNIQUE約束實(shí)現(xiàn),用于限制一個列或者是約束實(shí)現(xiàn),用于限制一個列或者是多個列的組合取值不重復(fù)。多個列的組合取值不重復(fù)。o 用在事實(shí)上具有唯一性的屬性列上,比如身用在事實(shí)上具有唯一性的屬性列上,比如身份證號碼、駕駛證號碼等份證號碼、駕駛證號碼等。注意。注意

9、:o 有有UNIQUEUNIQUE約束的列允許有一個空值;約束的列允許有一個空值;o 在一個表中可以定義多個在一個表中可以定義多個UNIQUEUNIQUE約束;約束;o 可以在一個列或多個列上定義可以在一個列或多個列上定義UNIQUEUNIQUE約束;約束;*12在創(chuàng)建表時定義在創(chuàng)建表時定義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)建表時定義創(chuàng)建表時定義o 例例2.2.為為 “ “身份證號身份證號”列添加唯一值約束。列添加唯一值約束。CREATE TABLE CREATE TABLE 職工表(職工表(身份證號身份證號 CHAR(19) CHAR(19)

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

12、u_lnameau_lname兩個列,現(xiàn)要限制這兩個列組合起來不重復(fù)。兩個列,現(xiàn)要限制這兩個列組合起來不重復(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), , -作為列級約束定義作為列級約束定義) )*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), , -作為表級約束定義作為表級約束定義) )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約束時要注意:約束時要注意: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:級聯(lián)或

16、限制刪除;:級聯(lián)或限制刪除;o ON UPDATEON UPDATE:級聯(lián)或限制更新。:級聯(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 為職工表的為職工表的“工作編號工作編號”列添列添加外鍵約束,此列引用工作表中的加外鍵約束,此列引用工作表中的“工作編

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

22、有一個每個列只能有一個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 在職工表中,如果某個職工沒有電話,則在職工表中

23、,如果某個職工沒有電話,則寫入默認(rèn)值:寫入默認(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)用語義,如圍內(nèi),即約束列的取值符合應(yīng)用語義,如:n 人的性別只能是人的性別只能是“男男”或或“女女”,n 工資必須大于工資必須大于10001000。o 使用使用CHECKCHECK約束時注意:約束時注意:n 在執(zhí)行在執(zhí)行INSERTINSERT語句和語句和UPDATEUPDATE語句時系統(tǒng)自動語句時系統(tǒng)自動檢查檢查CHECKCHECK約束;約束;n CHECKCHECK約束可以限制一個列的取值范圍,也約束可以限制一個列的取值范圍,也可以限制同表多列之間的取值約束關(guān)系??梢韵拗仆矶嗔兄g的

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約束只能定義在表級約約束只能定義在表級約束處。束處。*32示例:添加多列取值

28、約束示例:添加多列取值約束ALTER TABLE ALTER TABLE 工作表工作表 ADD CONSTRAINT CHK_Job_Salary ADD CONSTRAINT CHK_Job_Salary CHECK ( CHECK ( 最低工資最低工資 = = 最高工資最高工資 ) )*33示例示例o例例8 8 限制電話號碼列的每一位的取限制電話號碼列的每一位的取值必須是值必須是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)對完整性約束的檢查系統(tǒng)對完整性約束的檢查o 主鍵約束主鍵約束:插入插入和更新數(shù)據(jù)和更新數(shù)據(jù)時,檢查新時,檢查新數(shù)據(jù)的主鍵值是否與已存在的主鍵值重?cái)?shù)據(jù)的主鍵值是否與已存在的主鍵值重復(fù),或者新主鍵值是否為空。復(fù),或者新主鍵值是否為空。o 唯一值約束唯一值約束:同主鍵約束。:同主鍵約束。o 默認(rèn)值約束默認(rèn)值約束:插入數(shù)據(jù):插入數(shù)據(jù)且沒有為某個列且沒有為某個列提供值提供值時檢查。時檢查。o 列取值范圍約束列取值范圍約束:插入和修改:插入和修改有列取值有列取值約束的數(shù)據(jù)檢查約束的數(shù)據(jù)檢查。*35外鍵外鍵約束的檢查約束的檢查對子表對子表o插入數(shù)據(jù)插入數(shù)據(jù)時,檢查新數(shù)據(jù)的外鍵值是時,檢查新數(shù)據(jù)的

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

31、否在子列值時,檢查被更改的主鍵值是否在子表中有對它的引用,若無,則更改之;若有,則表中有對它的引用,若無,則更改之;若有,則看是否允許級聯(lián)更改看是否允許級聯(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 刪除在職工表上定義的限制電刪除在職工表上定義的限制電話號碼的話號碼的CHK_PHONECHK_PHONE約束。約束。ALTER

32、 TABLE ALTER TABLE 職工表職工表 DROP CHK_PHONE DROP CHK_PHONE*388.5 8.5 觸發(fā)器觸發(fā)器o是一段由對數(shù)據(jù)的更改操作引發(fā)的是一段由對數(shù)據(jù)的更改操作引發(fā)的自自動執(zhí)行的代碼動執(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 語句語句*40注意注意o 在一個表上可以建立多個名稱不同、類型各異在一個表上可以建立多個名稱不同、類型各異的觸發(fā)器,每個觸發(fā)器可由所有三個操作引發(fā)的觸發(fā)器,每個觸發(fā)器可由所有三個操作引發(fā)o 對對AFTERAFTER型型觸發(fā)器,可以在同一種操

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

35、DELETEDDELETEDo 由系統(tǒng)自動創(chuàng)建,由系統(tǒ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í)行時,引發(fā)觸發(fā)當(dāng)后觸發(fā)型觸發(fā)器執(zhí)行時,引發(fā)觸發(fā)器執(zhí)行

36、的數(shù)據(jù)操作語句已經(jīng)執(zhí)行完成器執(zhí)行的數(shù)據(jù)操作語句已經(jīng)執(zhí)行完成*43執(zhí)行到引發(fā)觸發(fā)器執(zhí)行的操作語句執(zhí)行到引發(fā)觸發(fā)器執(zhí)行的操作語句執(zhí)行觸發(fā)器執(zhí)行觸發(fā)器執(zhí)行該語句執(zhí)行該語句示例:示例:維護(hù)不同表數(shù)據(jù)之間的取值約束維護(hù)不同表數(shù)據(jù)之間的取值約束o 例例1.1.針對針對職工表和工作表,限制職工工資必須在相職工表和工作表,限制職工工資必須在相應(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論