第二章數(shù)據(jù)庫(kù)的完整性控制數(shù)據(jù)完整性(DataIntegrity)是指數(shù)據(jù)的精確_第1頁(yè)
第二章數(shù)據(jù)庫(kù)的完整性控制數(shù)據(jù)完整性(DataIntegrity)是指數(shù)據(jù)的精確_第2頁(yè)
第二章數(shù)據(jù)庫(kù)的完整性控制數(shù)據(jù)完整性(DataIntegrity)是指數(shù)據(jù)的精確_第3頁(yè)
第二章數(shù)據(jù)庫(kù)的完整性控制數(shù)據(jù)完整性(DataIntegrity)是指數(shù)據(jù)的精確_第4頁(yè)
第二章數(shù)據(jù)庫(kù)的完整性控制數(shù)據(jù)完整性(DataIntegrity)是指數(shù)據(jù)的精確_第5頁(yè)
已閱讀5頁(yè),還剩3頁(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)介

第二章數(shù)據(jù)庫(kù)的完整性控制數(shù)據(jù)完整性(DataIntegrity)是指數(shù)據(jù)的精確性(accuracy)和可靠性(reliability),它是防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義規(guī)定的數(shù)據(jù)和防止因錯(cuò)誤的信息的輸入造成無(wú)效操作或錯(cuò)誤信息而提出的,保證在一個(gè)應(yīng)用程序更新數(shù)據(jù)的過(guò)程中數(shù)據(jù)的語(yǔ)義正確性。數(shù)據(jù)完整性主要分為三類:實(shí)體完整性(EntityIntegrity),參照完整性(ReferentialIntegrity)以及用戶定義的完整性(User-definedIntegrity),其中用戶定義的完整性主要包括域完整性(DomainIntegrity)和其他自定義完整性。為維護(hù)數(shù)據(jù)庫(kù)德完整性,數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)必須提供一種機(jī)制來(lái)檢查數(shù)據(jù)庫(kù)中的數(shù)據(jù),看其是否滿足語(yǔ)義規(guī)定的條件。這些加在數(shù)據(jù)庫(kù)數(shù)據(jù)上的語(yǔ)義約束條件稱為數(shù)據(jù)庫(kù)完整性規(guī)則,它們作為模式的一部分存入數(shù)據(jù)庫(kù)中。完整性控制是指對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新操作,要遵守完整性規(guī)則,才能保證數(shù)據(jù)的語(yǔ)義正確性,防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù)。目的是在合法用戶訪數(shù)問(wèn)據(jù)庫(kù)的過(guò)程中,保證數(shù)據(jù)的正確性和準(zhǔn)確性。完整性檢查機(jī)制是指在DBMS中檢查數(shù)據(jù)是否滿足完整性條件的機(jī)制。由DBMS在執(zhí)行更新動(dòng)作時(shí),檢查是否滿足預(yù)定的完整性約束條件,來(lái)進(jìn)行控制。廣義的完整性控制包括故障恢復(fù)、并發(fā)控制。而一般所指的完整性控制是指基于數(shù)據(jù)庫(kù)的完整性約束規(guī)則,如:實(shí)體完整性、引用完整性等。SQL中兩種主要的數(shù)據(jù)完整性控制機(jī)制是指完整性約束規(guī)則的定義和檢查以及觸發(fā)器(Trigger)機(jī)制。完整性控制機(jī)制應(yīng)具有三個(gè)功能:(1)定義功能,即提供定義完整性約束條件的機(jī)制;(2)檢查功能,即檢查用戶發(fā)出的操作請(qǐng)求書(shū)否違反了約束條件;(3)如果發(fā)現(xiàn)用戶操作請(qǐng)求使數(shù)據(jù)違背了完整性約束條件,則采取一定的動(dòng)作來(lái)保證數(shù)據(jù)的完整性。完整性控制機(jī)制的工作原理基本上分為兩類,一種是定義完整性時(shí)就立刻進(jìn)行檢查的,例如實(shí)體完整性的定義;另外一種是定義完整性之后進(jìn)行檢查的,例如參照完整性的定義。SQLServer提供了一些工具來(lái)幫助用戶實(shí)現(xiàn)數(shù)據(jù)完整性,其中最主要的是:規(guī)則(Rule),默認(rèn)值(Default),約束(Constraint)和觸發(fā)器(Trigger)實(shí)驗(yàn)報(bào)告2.1實(shí)體完整性實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)實(shí)體完整性的建立,以及實(shí)踐違反實(shí)體完整性的結(jié)果。實(shí)驗(yàn)原理:1、實(shí)體完整性(EntityIntegrity)定義實(shí)體完整性規(guī)定表的每一行在表中是唯一的實(shí)體。SQL語(yǔ)法中,表中的UNIQUE、PRIMARYKEY和IDENTITY約束就是實(shí)體完整性的體現(xiàn)。實(shí)體完整性規(guī)則:每個(gè)關(guān)系中主碼的任何屬性不能取空值。注意:空值為NULL,不是0,也不是空格,而是一個(gè)“不知道”或“不確定”的數(shù)據(jù)值。2、實(shí)施完整性檢查的時(shí)機(jī)實(shí)施完整性規(guī)則檢查的時(shí)機(jī)分為立即檢查和延遲檢查(ImmediateordeferredChecking),只有選擇正確的檢查時(shí)機(jī)才能保證語(yǔ)義的正確性,即保證數(shù)據(jù)的完整性。實(shí)體完整性規(guī)則檢查的時(shí)機(jī)是立即檢查的,而參照完整性和觸發(fā)器一般都是延遲檢查。3、事務(wù)處理事務(wù)是一組數(shù)據(jù)庫(kù)操作的集合,這些操作要么一起成功,要么一起失敗。操作的提交或回退是一同生效的。事務(wù)處理的概念對(duì)維護(hù)數(shù)據(jù)的完整性和一致性是十分重要的。

數(shù)據(jù)庫(kù)操作(如INSERT、UPDATE和DELETE)如果是一個(gè)事務(wù)中的操作,那么它們要在事務(wù)控制之下完成。數(shù)據(jù)庫(kù)對(duì)象的beginTransaction、commitTransaction和rollbackTransaction方法分別用來(lái)啟動(dòng)、提交和回退事務(wù)。實(shí)驗(yàn)內(nèi)容:(1)在數(shù)據(jù)庫(kù)School中建立表Stu_Union,進(jìn)行主鍵約束,在沒(méi)有違反實(shí)體完整性的前提下插入并更新一條記錄。(2)演示違反實(shí)體完整性的插入操作。(3)演示違反實(shí)體完整性的更新操作。(4)演示事務(wù)的處理,包括事務(wù)的建立、處理以及出錯(cuò)時(shí)的事務(wù)回滾。(5)通過(guò)建立Scholarship表,插入數(shù)據(jù),演示當(dāng)與現(xiàn)有的數(shù)據(jù)環(huán)境不等時(shí),無(wú)法建立實(shí)體完整性以及參照完整性。實(shí)驗(yàn)步驟:代碼實(shí)現(xiàn)參見(jiàn)數(shù)據(jù)庫(kù)實(shí)驗(yàn)習(xí)題2.1.sql文檔心得體會(huì):1、學(xué)習(xí)了實(shí)體完整性的相關(guān)內(nèi)容,加深了對(duì)于這部分知識(shí)點(diǎn)的認(rèn)識(shí);(實(shí)驗(yàn)課本第59頁(yè)——思考:為什么sno置為‘’沒(méi)有違反非空的約束?答:SQL系統(tǒng)默認(rèn)這里定義的‘’為一個(gè)值;如果執(zhí)行sno=NULL,則將被系統(tǒng)拒絕)實(shí)驗(yàn)2.2參照完整性實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)建立外鍵,以及利用FOREIGNKEY---REFERENCES子句以及各種約束保證參照完整性。實(shí)驗(yàn)原理:1)參照完整性(ReferentialIntegrity)參照完整性是指兩個(gè)表的主關(guān)鍵字和外關(guān)鍵字的數(shù)據(jù)對(duì)應(yīng)一致。它確保了有主關(guān)鍵字的表中對(duì)應(yīng)其他表的外關(guān)鍵字的行存在,即保證了表之間的數(shù)據(jù)的一致性,防止了數(shù)據(jù)丟失或無(wú)意義的數(shù)據(jù)在數(shù)據(jù)庫(kù)中擴(kuò)散。參照完整性是建立在外關(guān)鍵字和主關(guān)鍵之間或外關(guān)鍵字和唯一性關(guān)鍵字之間的關(guān)系上的。參照完整性規(guī)則:關(guān)系R的外來(lái)碼取值必須是關(guān)系S中某個(gè)元組的主碼值,或者可以是一個(gè)“空值”。定義外鍵時(shí)定義參照完整性、約束參照表A和被參照表B。對(duì)于違反參照完整性的操作有時(shí)候并不是簡(jiǎn)單拒絕執(zhí)行,而是接受該操作,同時(shí)執(zhí)行必要的附加操作。DBMS提供機(jī)制來(lái)定義是否必須制定外鍵的具體值而非空值。主鍵列和外鍵列可以有不同的名字,空值的要求也可以不一致,默認(rèn)值也可以不同,但數(shù)據(jù)類型必須相同。2)SLServer中完整性的體現(xiàn)在SQLServer中參照完整性作用表現(xiàn)在如下幾個(gè)方面:·禁止在從表中插入包括主要中不存在的外關(guān)鍵字的數(shù)據(jù)行?!そ箷?huì)導(dǎo)致從表中的相應(yīng)值孤立的主表中的外關(guān)鍵字值改變?!そ箘h除在從表中的有對(duì)應(yīng)記錄的主表記錄。3)SQL語(yǔ)句中刪除和插入基本關(guān)系元組(1)在被參照關(guān)系中刪除元組的三種控制方式:·級(jí)聯(lián)刪除(CASCADES):將參照關(guān)系中與被參照關(guān)系中要?jiǎng)h除的元組主鍵值相同的元組一起刪除。

·受限刪除(RESTRICTED):只有參照關(guān)系中沒(méi)有元組與被參照關(guān)系中要?jiǎng)h除的元組主鍵值相同時(shí)才執(zhí)行刪除操作,否則拒絕?!ぶ每罩祫h除(SETNULL):刪除被參照關(guān)系中的元組,同時(shí)將參照關(guān)系中相應(yīng)元組的外鍵值置空。(2)在參照關(guān)系中插入元組?!な芟薏迦耄褐皇潜粎⒄贞P(guān)系中有元組與參照關(guān)系中要插入元組外鍵值相同時(shí),才執(zhí)行插入操作,否則拒絕?!みf歸插入:插入元組外鍵值在被參照關(guān)系中沒(méi)有相同元組,則首先向被參照關(guān)系插入元組,其主鍵值等于參照關(guān)系插入元組的外鍵值,然后再向參照關(guān)系插入元組。4)DBMS對(duì)參照完整性進(jìn)行檢查的四種情況(1)在四種情況下DBMS要進(jìn)行檢查,分別是對(duì)參照表進(jìn)行插入和修改以及對(duì)被參照表進(jìn)行刪除和修改。(2)SQLServer四種情況違反參照完整性的處理方法如表所示:相關(guān)操作INSERTDELETEUPDATE被參照表不需要檢查ONDELETE?(用戶顯示定ONUPDATE?(用戶顯示方義的方式,提供兩種:cascade式,提供兩種:cascade和no和noaction)ORdefault(系action)ORdefault(系統(tǒng)默認(rèn)統(tǒng)默認(rèn)的方式noaction)的方式noaction)參照表拒絕執(zhí)行不需要檢查拒絕執(zhí)行5)參照完整性的特殊問(wèn)題(1)表的自參考問(wèn)題。問(wèn)題1:無(wú)法定義。處理方法:先用createtable創(chuàng)建主鍵約束,再用altertable創(chuàng)建外鍵約束。問(wèn)題2:容易造成無(wú)法啟動(dòng)的情況。(系統(tǒng)通過(guò)事務(wù)完畢后再檢查)(2)兩張表互相參照的問(wèn)題。問(wèn)題1:無(wú)法定義。處理方法:同表的自參照問(wèn)題的解方?jīng)Q法相同。問(wèn)題2:容易造成無(wú)法啟動(dòng)的情況。(系統(tǒng)通過(guò)事務(wù)完畢后再檢查)(3)既是外鍵又是主鍵中的屬性。處理方法:既要遵從實(shí)體完整性也要遵從參照完整性。實(shí)驗(yàn)內(nèi)容:(1)為演示參照完整性,建立表Course,令cno為主鍵,并在Stu_Union中插入數(shù)據(jù)。為下面的實(shí)驗(yàn)步驟做預(yù)先準(zhǔn)備。(2)建立表SC,令sno和cno分別為參照Stu_Union表以及Course表的外鍵,設(shè)定為級(jí)聯(lián)刪除,并令(sno,cno)為其主鍵。在不違反參照完整性的前提下,插入數(shù)據(jù)。(3)演示違反參照完整性的插入數(shù)據(jù)。(4)在Stu_Union中刪除數(shù)據(jù),演示級(jí)聯(lián)刪除。(5)在Course中刪除數(shù)據(jù),演示級(jí)聯(lián)刪除。(6)為了演示多重級(jí)聯(lián)刪除,建立Stu_Union表,令stu_id為參照Stu_Union表的外鍵,令card_id為其主鍵,并插入數(shù)據(jù)。(7)為了演示多重級(jí)聯(lián)刪除,建立ICBC_Card表,令stu_card_id為參照Stu_Card表的外鍵,令bank_id為其主鍵,并插入數(shù)據(jù)。(8)通過(guò)刪除students表中的一條記錄,演示三個(gè)表的多重級(jí)聯(lián)刪除。(9)演示事務(wù)中進(jìn)行多重級(jí)聯(lián)刪除失敗的處理。修改ICBC_Card表的外鍵屬性,使其變?yōu)镺ndeleteNoaction,演示事務(wù)中通過(guò)刪除students表中的一條記錄,多重級(jí)聯(lián)刪除失敗,整個(gè)事務(wù)回滾到事務(wù)的初始狀態(tài)。(10)演示互參照問(wèn)題以及其解決方法。要建立教師授課和課程指定教師停課關(guān)系的兩張表,規(guī)定一個(gè)教師可以授多門課,但是每個(gè)課程只能指定一個(gè)教師去聽(tīng)課,所以要為兩張表建立相互之間的參照關(guān)系。實(shí)驗(yàn)步驟:代碼實(shí)現(xiàn)參見(jiàn)數(shù)據(jù)庫(kù)實(shí)驗(yàn)習(xí)題2.2.sql文檔心得體會(huì):1、學(xué)習(xí)了參照完整性的相關(guān)內(nèi)容,加深了對(duì)于這部分知識(shí)點(diǎn)的認(rèn)識(shí);(習(xí)題:(1)用altertable語(yǔ)句將SC表中的ondeletecascade改為ondeleterestrict。重新插入SC的數(shù)據(jù)。重復(fù)本實(shí)驗(yàn)的實(shí)驗(yàn)步驟中((2)用altertable語(yǔ)句將SC表中的ondeletecascade改為的數(shù)據(jù)。重復(fù)本實(shí)驗(yàn)的實(shí)驗(yàn)步驟中(4)(5),觀察結(jié)果,分析原因。4)(5),觀察結(jié)果,分析原因。ondeletesetNULL。重新插入SC解答:SQL不提供ondeleterestrict/ondeletesetNULL,用ondeletenoaction;結(jié)果:數(shù)據(jù)庫(kù)不允許刪除STU_UNION表以及NEW_COUSE表中對(duì)應(yīng)的元組;原因:(1)由于ondeleterestrict的約束,數(shù)據(jù)庫(kù)不允許任何引用關(guān)系存在對(duì)應(yīng)元組的刪除操作(2)約束ondeletesetNULL是將要?jiǎng)h除的對(duì)應(yīng)元組的外鍵置空值,如果sno和cno不是SC表的主鍵,刪除操作是可以完成的,但是由于主鍵不可以取空值,所以刪除操作不能進(jìn)行。)實(shí)驗(yàn)2.3用戶自定義完整性實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)用戶自定義約束,并實(shí)踐用戶自定義完整性,利用SQL查詢分析器用短語(yǔ)NOTNULL、UNIQUE、CHECK保證用戶定義完整性。實(shí)驗(yàn)原理:1)用戶自定義完整性(不同的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)根據(jù)其定義的完整性即是針對(duì)某個(gè)特定關(guān)系數(shù)據(jù)庫(kù)的約束條件,它反映某一具體應(yīng)用所必須滿足的語(yǔ)義要求。它主要包括:(1)域完整性(DomainIntegrity)[1]域完整性是指數(shù)據(jù)庫(kù)中的列必須滿足某種特定的數(shù)據(jù)戶自定義完整性約束,當(dāng)有新數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中,系統(tǒng)可以按照定否正確的檢測(cè)。其中,約束又包括取值范圍精度等規(guī)定。表中的CHECKFOREIGNKEY約束和DEFAULTNOTNULL定義都屬于域完整性的范疇。[2]現(xiàn)在的RDBMS中,一般都有域完整性檢查功能。SQLServer提供了定整性的機(jī)制,以便用統(tǒng)一的系統(tǒng)方法來(lái)處理它們。而不是用應(yīng)用程序來(lái)承擔(dān)這一功能。其的完整性類型都支持用戶定義的完整性。[3]一個(gè)屬性能否取空值一般由語(yǔ)義決定,也是域約束的內(nèi)容之一。(2)其他用戶自定義完整性不同的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)根據(jù)其應(yīng)用環(huán)境的不同,往往還需要一些特殊的約束條件。其他類型的用戶自定義的完整性即是針對(duì)某個(gè)特定關(guān)系數(shù)據(jù)庫(kù)的約束條件,它反映某個(gè)具體應(yīng)User-definedIntegrity)應(yīng)用環(huán)境的不同,往往需要一些特殊的約束條件。用戶自涉及的數(shù)據(jù)類型或約束。域約束是最常見(jiàn)的用義進(jìn)行關(guān)系屬性取值是義和檢驗(yàn)這類完他

用所涉及的數(shù)據(jù)必須滿足的語(yǔ)義要求。2)SQL中的約束機(jī)制約束主要包括如下兩種。(1)靜態(tài)約束:對(duì)靜態(tài)對(duì)象的約束是反映數(shù)據(jù)庫(kù)狀態(tài)合理性的約束,如實(shí)體完整性。(2)動(dòng)態(tài)約束:對(duì)動(dòng)態(tài)對(duì)象的約束是反映數(shù)據(jù)庫(kù)狀態(tài)變遷的約束,如觸發(fā)器。SQL中用于屬性約束方面的有NOTNULL、CHECK等子句;而用于全局約束方面的有CREATEASSERTION、CREATERULE等語(yǔ)句。3)一般的規(guī)則組成規(guī)則一般是由規(guī)則標(biāo)識(shí)(可默認(rèn))以及規(guī)則語(yǔ)句組成。規(guī)則語(yǔ)句由約束作用的數(shù)據(jù)對(duì)象、約束定義(如斷言Assertion)、觸發(fā)條件以及違反規(guī)則時(shí)的響應(yīng)動(dòng)作購(gòu)成。4)規(guī)則的一般分類類型屬性級(jí)元組級(jí)關(guān)系級(jí)靜態(tài)類型、格式、值域、空值元組的各個(gè)屬性之間的取實(shí)體、引用統(tǒng)計(jì)完整性函數(shù)依賴/值改變?cè)M值修改時(shí)各屬性間的關(guān)系變化的前后一致性值限制動(dòng)態(tài)屬性約束5)自定義數(shù)據(jù)類型和規(guī)則(1)如果多個(gè)列使用同一類型的約束,規(guī)則就為數(shù)據(jù)庫(kù)設(shè)計(jì)提供了更高層次的抽象,如工資數(shù)據(jù)類型肯定比smallmoney能建立更多的特征及更容易被理解?;蛟谝恍┨厥獾那闆r下,通過(guò)自定義的數(shù)據(jù)類型和(2)規(guī)則的創(chuàng)建(當(dāng)約束條件要為多列使用時(shí))。步驟一:CREATERULEruleAScondition_expression步驟二:Sp_bindrule[@rulename=]’rule’,[@objname=]’object_name’規(guī)則一般綁定到某一列,或者是用戶自己定義的數(shù)據(jù)類型。6)Check約束(1)CHECK約束是對(duì)列列或的組合的取值限制,它采用SQL語(yǔ)句中WHERE子句相同的表達(dá)方式來(lái)表達(dá),分為表一級(jí)和列一級(jí)的約束。(2)空值的問(wèn)題。空值意味著檢查約束的值是未知的,所以空值的出現(xiàn)不會(huì)違反檢查約束的條件。(3)潛在的語(yǔ)義問(wèn)題。[1]大多數(shù)的DBMS不會(huì)檢查約束和默認(rèn)值定義的語(yǔ)句,所以要注意語(yǔ)義沖突;[2]check和check之間的沖突。[3]定義了置空刪除,但表中檢查約束要求此列不能為空;定義該列不能為空,檢查約束要求此列為空。7)Rule約束的建立規(guī)則可以是WHERE子句中任何有效的表達(dá)式,并且可以包括諸如算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和謂詞(如IN、LIKE、BETWEEN)之類的元素。規(guī)則不能引用列或其他數(shù)據(jù)庫(kù)對(duì)象??梢园灰脭?shù)據(jù)庫(kù)對(duì)象的內(nèi)置函數(shù)。Condition_expression包括一個(gè)變用通過(guò)UPDATE或INSERT語(yǔ)句輸入的值。在創(chuàng)建規(guī)則時(shí),可以使用值,但第一個(gè)字符必須是@符號(hào)。8)Rule的綁定以及松綁量。每個(gè)局部變量的前面都有一個(gè)@符號(hào)。該表達(dá)式引任何名稱或符號(hào)表示創(chuàng)建規(guī)則后,規(guī)則僅僅只是一個(gè)存在于數(shù)據(jù)庫(kù)中的對(duì)象,并未發(fā)生作用。需要將規(guī)則與數(shù)據(jù)庫(kù)表或用戶自定義對(duì)象聯(lián)系起來(lái),才能達(dá)到創(chuàng)建規(guī)則的目的。聯(lián)系的方法稱為“綁定”,所謂“綁定”就是指定規(guī)則作用于哪個(gè)表的哪個(gè)列,或哪個(gè)用戶自定義數(shù)據(jù)類型。表的一列或一個(gè)用戶自定義數(shù)據(jù)類型只能與一個(gè)規(guī)則相綁定,而一個(gè)規(guī)則可以綁定多對(duì)象。這正是規(guī)則的魅力所在。解除規(guī)則與對(duì)象的綁定稱為“松綁”。(1)存儲(chǔ)過(guò)程Sp_bindrule綁定規(guī)則。存儲(chǔ)過(guò)程Sp_bindrule可以綁定一個(gè)規(guī)則到表的一個(gè)列或一個(gè)用戶自定義數(shù)據(jù)類型上。其語(yǔ)法如下:Sp_bindrule[@rulename=]’rule’,[@objname=]’object_name’[,’futureonly’]各參數(shù)說(shuō)明如下:[@rulename=]’rule’指定規(guī)則名稱。[@objname=]’object_name’指定規(guī)則綁定的對(duì)象。‘futureonly’選項(xiàng)僅在綁定規(guī)則到用戶定義數(shù)據(jù)類型上時(shí)才可以使用。當(dāng)指定此選項(xiàng)時(shí),僅以后使用此用戶自定義數(shù)據(jù)類型的列會(huì)應(yīng)用新規(guī)則,而當(dāng)前已經(jīng)使用此數(shù)據(jù)類型的列則不受影響。(2)存儲(chǔ)過(guò)程Sp_unbindrule解除規(guī)則的綁定。存儲(chǔ)過(guò)程Sp_unbindrule可解除規(guī)則與列或用戶自定義數(shù)據(jù)類型的綁定其語(yǔ)法如下:Sp_unbindrule[@objname=]’object_name’[,’futureonly’]其中‘futureonly’選項(xiàng)同綁定時(shí)一樣,僅用于用戶自定義數(shù)據(jù)類型。它指定現(xiàn)有的此用戶自定義數(shù)據(jù)類型定義的列仍然保持與此規(guī)則的綁定,如果不指定此項(xiàng)則所有由此用戶自定義數(shù)據(jù)類型定義的列也隨之解除與此規(guī)則的綁定。實(shí)驗(yàn)內(nèi)容:(1)創(chuàng)建worker表,并自定義2個(gè)約束U1以及U2,其中U1規(guī)定Name字段唯一,U2規(guī)定sage(級(jí)別)字段的上限是28。(2)在worker表中插入一條合法記錄。(3)演示插入違反U2例子,U2規(guī)定元組的sage屬性的值必須<=28。(4)去除U2(5)重新插入(3)中想要插入的數(shù)據(jù),由于去除了U2插入成功。(6)創(chuàng)建規(guī)則rule_sex,規(guī)定插入或更新的值只能是M或F,并綁定到worker的sex字段。(7)演示違反規(guī)則rule_sex的插入操作。實(shí)驗(yàn)步驟:代碼實(shí)現(xiàn)參見(jiàn)數(shù)據(jù)庫(kù)實(shí)驗(yàn)習(xí)題2.3.sql文檔心得體會(huì):1、學(xué)習(xí)了參照完整性的相關(guān)內(nèi)容,加深了對(duì)于這部分知識(shí)點(diǎn)的認(rèn)識(shí);實(shí)驗(yàn)報(bào)告2.4觸發(fā)器實(shí)驗(yàn)?zāi)康模和ㄟ^(guò)實(shí)驗(yàn)使實(shí)驗(yàn)原理:1、觸發(fā)器的概述學(xué)生加深對(duì)數(shù)據(jù)庫(kù)完整性的理解,學(xué)會(huì)創(chuàng)建和使用觸發(fā)器。觸發(fā)器是SQL提供的一種維護(hù)數(shù)據(jù)完整性的工具。觸發(fā)器過(guò)程是由程序員給定,例如

一個(gè)和完整性控制動(dòng)作有關(guān)的處理過(guò)程。當(dāng)系統(tǒng)規(guī)定的觸發(fā)條件發(fā)生時(shí),給定的過(guò)程被調(diào)用。觸發(fā)條件是多種多樣的,例如:進(jìn)入或退出程序的某層結(jié)構(gòu)(如Block、Form等);查詢、修改等操作發(fā)生之前或之后;某個(gè)按鍵動(dòng)作;Trigger過(guò)程調(diào)用(相當(dāng)于子程序調(diào)用)。觸發(fā)器是實(shí)施復(fù)雜完整性的特殊類型的存儲(chǔ)類型。觸發(fā)器不需要專門語(yǔ)句調(diào)用,當(dāng)對(duì)它所保護(hù)數(shù)據(jù)進(jìn)行修改時(shí)自動(dòng)激活,以防止對(duì)數(shù)據(jù)進(jìn)行不正確,未授權(quán)或不一致的修改。2、觸發(fā)器的類型以及其具有的特殊表一個(gè)觸發(fā)器只適用于一個(gè)表,每個(gè)表最多只能有三個(gè)觸發(fā)器,它們分別是INSERT、UPDATE和DELETE觸發(fā)器。觸發(fā)器僅在實(shí)施數(shù)據(jù)完整性和處理業(yè)務(wù)規(guī)則時(shí)使用。每個(gè)觸發(fā)器有兩個(gè)特殊的表,即入插表(INSERTTABLE)和刪除表(DELETETABLE)。這兩個(gè)表是邏輯表,并且這兩個(gè)表是由系統(tǒng)管理的,存儲(chǔ)在內(nèi)存中,不是存儲(chǔ)在數(shù)據(jù)庫(kù)中。因此不允許用戶直接對(duì)其修改,并且這兩個(gè)表的結(jié)構(gòu)總是與被該觸發(fā)器作用的表有相同的表結(jié)構(gòu)。3、三種觸發(fā)器的(1)INSERT觸發(fā)器:先向INSERTED表中插入一個(gè)的新行是否有效,確定是否要阻止該插入操作。如果所入插的行中的值是有入插觸發(fā)器表。(2)UPDATE觸發(fā)器:先將原

溫馨提示

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