版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)的完整性第一頁,共二十五頁,編輯于2023年,星期三為了維護(hù)數(shù)據(jù)庫的完整性,DBMS必須提供如下功能:
1.定義功能:提供定義完整性約束條件的機(jī)制。
2.檢查功能:檢查用戶發(fā)出的操作請(qǐng)求是否違背了完整性約束條件。完整性檢查的時(shí)機(jī):
(1)立即執(zhí)行約束:在一條語句執(zhí)行完后立即檢查是否違背完整性約束。(2)延遲執(zhí)行約束:有時(shí)完整性檢查需要延遲到整個(gè)事務(wù)執(zhí)行結(jié)束后再進(jìn)行,檢查正確方可提交,稱這類約束為延遲執(zhí)行約束。
3.違約處理:如果發(fā)現(xiàn)用戶的操作請(qǐng)求使數(shù)據(jù)違背了完整性約束條件,則采取一定的操作,以保證數(shù)據(jù)的完整性。第二頁,共二十五頁,編輯于2023年,星期三
8.1實(shí)體完整性的定義
P152實(shí)體完整性的檢查及違約處理P153
8.2參照完整性的定義
P154參照完整性的檢查及違約處理P154
第三頁,共二十五頁,編輯于2023年,星期三實(shí)現(xiàn)參照完整性要考慮的幾個(gè)問題P155表5.11.在被參照關(guān)系中刪除元組的問題
當(dāng)刪除被參照關(guān)系的某個(gè)元組,而參照關(guān)系存在若干元組,其外碼值與被參照關(guān)系刪除元組的主碼值相同,這時(shí)可有三種不同的策略:
(1)級(jí)聯(lián)刪除(CASCADES)
將參照關(guān)系中所有外碼值與被參照關(guān)系中要?jiǎng)h除元組主碼值相同的元組一起刪除。
(2)受限刪除僅當(dāng)參照關(guān)系中沒有任何元組的外碼值與被參照關(guān)系中要?jiǎng)h除元組的主碼值相同時(shí),系統(tǒng)才執(zhí)行刪除操作,否則拒絕此刪除操作。
(3)置空值刪除刪除被參照關(guān)系的元組,并將參照關(guān)系中相應(yīng)元組的外碼值置空值。第四頁,共二十五頁,編輯于2023年,星期三
2.在參照關(guān)系中插入元組時(shí)的問題
當(dāng)參照關(guān)系插入某個(gè)元組,而被參照關(guān)系不存在相應(yīng)的元組,其主碼值與參照關(guān)系插入元組的外碼值相同,這時(shí)可有以下策略:
(1)受限插入僅當(dāng)被參照關(guān)系中存在相應(yīng)的元組,其主碼值與參照關(guān)系插入元組的外碼值相同時(shí),系統(tǒng)才執(zhí)行插入操作,否則拒絕此操作。
(2)遞歸插入首先向被參照關(guān)系中插入相應(yīng)的元組,其主碼值等于參照關(guān)系插入元組的外碼值,然后向參照關(guān)系插入元組。第五頁,共二十五頁,編輯于2023年,星期三3.修改被參照表主碼值的問題
(1)不允許修改主碼值在有些RDBMS中,不允許修改被參照表的主碼值。
(2)允許級(jí)聯(lián)修改或外碼值置空在有些RDBMS中,允許修改關(guān)系主碼,但必須保證主碼值與對(duì)應(yīng)外碼值一致。第六頁,共二十五頁,編輯于2023年,星期三4.外碼是否允許空值的問題實(shí)現(xiàn)參照完整性時(shí),系統(tǒng)除了應(yīng)提供定義外碼的機(jī)制,還應(yīng)提供定義外碼列是否允許空值的機(jī)制。
例:部門表與職工—部門表,職工—部門表中部門可取空值;但學(xué)生表與學(xué)生—選課表,學(xué)生—選課表不能取空值。第七頁,共二十五頁,編輯于2023年,星期三8.3用戶定義的完整性P156——P1598.4完整性約束命名子句P158第八頁,共二十五頁,編輯于2023年,星期三5.5用觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)的完整性1.觸發(fā)器簡介
觸發(fā)器是定義在表或視圖上的一類特殊的子程序,用于維護(hù)表中的數(shù)據(jù),當(dāng)有操作影響到觸發(fā)器關(guān)聯(lián)的數(shù)據(jù)時(shí),觸發(fā)器自動(dòng)執(zhí)行,例如:通過觸發(fā)器維護(hù)多個(gè)表間數(shù)據(jù)的一致性。一般情況下,對(duì)表數(shù)據(jù)的操作有:插入、修改、刪除,因而維護(hù)數(shù)據(jù)的觸發(fā)器也可分為三種類型:INSERT、UPDATE和DELETE觸發(fā)器。同一個(gè)表可定義多個(gè)觸發(fā)器。第九頁,共二十五頁,編輯于2023年,星期三2.Oracle觸發(fā)器的定義P161-163第十頁,共二十五頁,編輯于2023年,星期三
3.SQLSERVER觸發(fā)器的定義
利用觸發(fā)器可以方便地實(shí)現(xiàn)數(shù)據(jù)庫中數(shù)據(jù)的完整性。例如,對(duì)于圖書管理數(shù)據(jù)庫xsbook如下:
xs(借書證號(hào),姓名,專業(yè)名,性別,出生時(shí)間,借書數(shù),照片)Book(ISBN,書名,作者,出版社,價(jià)格,復(fù)本數(shù),庫存數(shù))JY(借書證號(hào),ISBN,索書號(hào),借書日期)
第十一頁,共二十五頁,編輯于2023年,星期三SQLServer觸發(fā)器定義的語法CREATETRIGGERtrigger_nameON{table|view}
/*指定觸發(fā)器名及操作對(duì)象*/{FOR|AFTER|INSTEADOF}{[DELETE][,][INSERT][,][UPDATE]}
/*定義觸發(fā)器的類型*/
AS
sql_statements
/*T-SQL語句序列*/第十二頁,共二十五頁,編輯于2023年,星期三觸發(fā)器中使用的特殊表
執(zhí)行觸發(fā)器時(shí),系統(tǒng)創(chuàng)建了兩個(gè)特殊的邏輯表:inserted表和deleted表,inserted邏輯表:當(dāng)向表中插入數(shù)據(jù)時(shí),INSERT觸發(fā)器觸發(fā)執(zhí)行,新的記錄插入到觸發(fā)器表和inserted表中。deleted邏輯表:用于保存已從表中刪除的記錄,當(dāng)觸發(fā)一個(gè)DELETE觸發(fā)器時(shí),被刪除的記錄存放到deleted邏輯表中。第十三頁,共二十五頁,編輯于2023年,星期三
修改一條記錄等于插入一新記錄,同時(shí)刪除舊記錄。當(dāng)對(duì)定義了UPDATE觸發(fā)器的表記錄修改時(shí),表中原記錄移到deleted表中,修改過的記錄插入到inserted表中。觸發(fā)器可檢查deleted表、inserted表及被修改的表。例如,若要檢索deleted、inserted表中的所有記錄,可使用如下語句:SELECT*FROMdeletedSELECT*FROMinserteddeleted、inserted邏輯表的查詢方法與數(shù)據(jù)庫用戶表的查詢方法相同。第十四頁,共二十五頁,編輯于2023年,星期三使用觸發(fā)器的限制
(1)CREATETRIGGER必須是批處理中的第一條語句,并且只能應(yīng)用到一個(gè)表中。(2)觸發(fā)器只能在當(dāng)前的數(shù)據(jù)庫中創(chuàng)建。(3)在同一CREATETRIGGER語句中,可以為多種操作(如INSERT和UPDATE)定義相同的觸發(fā)器操作。第十五頁,共二十五頁,編輯于2023年,星期三(4)如果一個(gè)表的外鍵在DELETE、UPDATE操作上定義了級(jí)聯(lián),則不能在該表上定義INSTEADOFDELETE、INSTEADOFUPDATE觸發(fā)器。(5)在觸發(fā)器內(nèi)可以指定任意的SET語句,所選擇的SET選項(xiàng)在觸發(fā)器執(zhí)行期間有效,并在觸發(fā)器執(zhí)行完后恢復(fù)到以前的設(shè)置。(6)觸發(fā)器中不允許包含以下T-SQL語句:
CREATEDATABASE、ALTERDATABASE、LOADDATABASE、RESTOREDATABASE、DROPDATABASE、LOADLOG、RESTORELOG、DISKINIT、DISKRESIZE和RECONFIGURE(7)觸發(fā)器不能返回任何結(jié)果,為了阻止從觸發(fā)器返回結(jié)果,不要在觸發(fā)器定義中包含SELECT語句或給變量賦值。第十六頁,共二十五頁,編輯于2023年,星期三【例】在數(shù)據(jù)庫XSBOOK中創(chuàng)建一觸發(fā)器,當(dāng)向JY表插入一記錄時(shí),檢查該記錄的借書證號(hào)在XS表是否存在,檢查圖書的ISBN號(hào)在BOOK表中是否存在,及圖書的庫存量是否大于0,若有一項(xiàng)為否,則不允許插入,在滿足條件的情況下進(jìn)行插入。第十七頁,共二十五頁,編輯于2023年,星期三USEXSBOOKIFEXISTS(SELECTnameFROMsysobjectsWHERENAME='tjy_insert'andtype='TR')DROPTRIGGERtjy_insertGOCREATETRIGGERtjy_insertONjyFORINSERTASIFEXISTS(SELECT*FROMinsertedaWHEREa.借書證號(hào)NOTIN(SELECTb.借書證號(hào)FROMXSb)ORa.ISBNNOTIN(SELECTc.ISBNFROMBOOKc))OREXISTS(SELECT*FROMBOOKWHERE庫存量<=0ANDa.ISBN=BOOK.ISBN) BEGINRAISERROR('違背數(shù)據(jù)的一致性.',16,1)ROLLBACKTRANSACTION END第十八頁,共二十五頁,編輯于2023年,星期三ELSEBEGINUPDATEXSSET借書數(shù)=借書數(shù)+1WHEREXS.借書證號(hào)IN(SELECTinserted.借書證號(hào)
FROMinserted)UPDATEBOOKSET庫存量=庫存量-1WHEREbook.ISBNIN(SELECTinserted.ISBNFROMinserted)ENDGO第十九頁,共二十五頁,編輯于2023年,星期三【例】在XSBOOK數(shù)據(jù)庫的JY表上創(chuàng)建一觸發(fā)器,若對(duì)借書證號(hào)列和圖書的ISBN列修改,則給出提示信息,并取消修改操作,用兩種方法實(shí)現(xiàn)。第二十頁,共二十五頁,編輯于2023年,星期三方法1:利用IFUPDATE(column)…子句實(shí)現(xiàn):USEXSBOOKGOCREATETRIGGERupdate_trigger1 ONJYFORUPDATEAS/*檢查借書證號(hào)列或ISBN列是否被修改,如果有某些列被修改了,則取消修改操作*/IFUPDATE(借書證號(hào))orUPDATE(ISBN) BEGINRAISERROR('違背數(shù)據(jù)的一致性.',16,1)ROLLBACKTRANSACTIONENDGO第二十一頁,共二十五頁,編輯于2023年,星期三方法2:調(diào)用COLUMNS_UPDATED()函數(shù),檢查借書證號(hào)列或ISBN列是否被修改。USEXSBOOKGOCREATETRIGGERupdate_trigger2ONJYFORupdateAS/*檢查借書證號(hào)列(C0)和ISBN列(C1)是否被修改,如果有某些列被修改了,則取消修改操作*/IF(COLUMNS_UPDATED()&3)>0 BEGINRAISERROR('違背數(shù)據(jù)的一致性.',16,1)ROLLBACKTRANSACTIONENDGO第二十二頁,共二十五頁,編輯于2023年,星期三JY表INSERT觸發(fā)器的定義USEXSBOOKGOCREATETRIGGERtjy_insertONdbo.JYFORINSERTASBEGIN UPDATEXS SET借書數(shù)=借書數(shù)+1WHEREXS.借書證號(hào)IN(SELECTinserted.借書證號(hào)
FROMinserted)UPDATEBOOKSET庫存量=庫存量-1WHEREbook.ISBNIN(SELECTinserted.ISBNFROMinserted)END第二十三頁,共二十五頁,編輯于2023年,星期三JY表DELETE觸發(fā)器的定義CREATETRIGGERtjy_deleteONjyFORDELETEAS BEGIN declare@sshchar(10),@jszhchar(8),@isbnchar(16) declare@jssjdatetime,@hssjdatetimeUPDATEXSSET借書數(shù)=借書數(shù)-1WHEREXS.借書證號(hào)IN(SELECTdeleted.借書證號(hào)
FROMdeleted)UPDATEBOOKSET庫存量=庫存量+1WHEREBOOK.ISBNIN(SELECTdeleted.ISBNFROMdeleted)SELECT@ssh=索書號(hào),@jszh=借書證號(hào),@isbn=ISBN,@jssj=借書時(shí)間FROMdeletedINSERTJYLS(索書號(hào),借書證號(hào),ISBN,借書時(shí)間,還書時(shí)間)VALUES(@ssh,@
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個(gè)人信用借款擔(dān)保合同修訂標(biāo)準(zhǔn)
- 2025年度基礎(chǔ)設(shè)施建設(shè)項(xiàng)目承包合同書8篇
- 2025版數(shù)據(jù)分析師試用期勞動(dòng)合同樣本3篇
- 二手房買賣簽意向合同范本(2024版)
- 二零二四年度虛擬現(xiàn)實(shí)教育培訓(xùn)軟件開發(fā)合同范本2篇
- 二零二五年度消防產(chǎn)品研發(fā)與銷售合作協(xié)議4篇
- 2025年度復(fù)雜地質(zhì)條件打井工程合同7篇
- 2025年度存量房居間買賣合同綠色出行引導(dǎo)細(xì)則4篇
- 二零二四年新建醫(yī)院醫(yī)療設(shè)備采購合同3篇
- 二零二四年礦井設(shè)備安裝吊裝服務(wù)合同2篇帶眉腳
- 2024年中國華能集團(tuán)燃料有限公司招聘筆試參考題庫含答案解析
- 《紅樓夢(mèng)》中的男性形象解讀
- 安全生產(chǎn)技術(shù)規(guī)范 第49部分:加油站 DB50-T 867.49-2023
- 《三國演義》中的語言藝術(shù):詩詞歌賦的應(yīng)用
- 腸外營養(yǎng)液的合理配制
- 消防安全教育培訓(xùn)記錄表
- 2023年河南省新鄉(xiāng)市鳳泉區(qū)事業(yè)單位招聘53人高頻考點(diǎn)題庫(共500題含答案解析)模擬練習(xí)試卷
- 2023年小升初簡歷下載
- 廣府文化的奇葩
- 公路工程標(biāo)準(zhǔn)施工招標(biāo)文件(2018年版)解析
- 七年級(jí)地理下冊(cè)期末試卷(人教版)
評(píng)論
0/150
提交評(píng)論