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

下載本文檔

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

文檔簡介

數(shù)據(jù)庫系統(tǒng)概論AnIntroductiontoDatabaseSystem第5章數(shù)據(jù)庫完整性第2節(jié)數(shù)據(jù)庫完整性一、完整性約束條件二、完整性控制三、SQL完整性四、小結(jié)5.2數(shù)據(jù)庫完整性什么是數(shù)據(jù)庫的完整性數(shù)據(jù)的正確性和相容性防止不合語義的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫。例:學(xué)生的年齡必須是整數(shù),取值范圍為14--29;學(xué)生的性別只能是男或女;學(xué)生的學(xué)號一定是唯一的;學(xué)生所在的系必須是學(xué)校開設(shè)的系;完整性:否真實(shí)地反映現(xiàn)實(shí)世界數(shù)據(jù)庫的完整性

1、數(shù)據(jù)庫的完整性是指數(shù)據(jù)的正確性和相容性。數(shù)據(jù)庫中數(shù)據(jù)發(fā)生錯誤,往往是由非法更新引起的。數(shù)據(jù)庫完整性是通過DBMS的完整性子系統(tǒng)實(shí)現(xiàn)的,它有兩個功能:(1)監(jiān)督事務(wù)的執(zhí)行,并測試是否違反完整性規(guī)則。(2)如有違反,則采取恰當(dāng)?shù)牟僮?,如拒絕、報告違反情況,改正錯誤等方法進(jìn)行處理。數(shù)據(jù)庫完整性子系統(tǒng)是根據(jù)"完整性規(guī)則集"工作的,這些完整性規(guī)則包括:域完整性規(guī)則、域聯(lián)系的規(guī)則、關(guān)系完整性規(guī)則(一個比一個大)SQL中的完整性約束在SQL中,表達(dá)完整性約束的規(guī)則有主鍵約束、外鍵約束、屬性值約束和全局約束等多種形式。

主鍵約束:可用主鍵子句或主鍵短語PRIMARYKEY來定義。外鍵約束:可用外鍵子句來定義如FOREIGNKEY(S#)REFERNCES(S#)屬性值約束:包括非空值約束(NOTNULL)和基于屬性的檢查子句(CHECK)域約束子句如CREATDOMAINAGESMALLINTCHECK(VALUE>10)全局約束:包括基于元組的檢查子句(CHECK)。

完整性控制機(jī)制1.完整性約束條件定義機(jī)制2.完整性檢查機(jī)制3.違約反應(yīng)

完整性約束條件定義完整性約束條件:數(shù)據(jù)模型的組成部分約束數(shù)據(jù)庫中數(shù)據(jù)的語義DBMS應(yīng)提供定義數(shù)據(jù)庫完整性約束條件,并把它們作為模式的一部分存入數(shù)據(jù)庫中完整性控制機(jī)制檢查用戶發(fā)出的操作請求是否違背了完整性約束條件

違約反應(yīng)如果發(fā)現(xiàn)用戶的操作請求使數(shù)據(jù)違背了完整性約束條件,則采取一定的動作來保證數(shù)據(jù)的完整性。一、完整性約束條件完整性約束條件作用的對象列:對屬性的取值類型、范圍、精度等的約束條件元組:對元組中各個屬性列間的聯(lián)系的約束關(guān)系:對若干元組間、關(guān)系集合上以及關(guān)系之間的聯(lián)系的約束完整性約束條件(續(xù))靜態(tài)對靜態(tài)對象的約束是反映數(shù)據(jù)庫狀態(tài)合理性的約束動態(tài)對動態(tài)對象的約束是反映數(shù)據(jù)庫狀態(tài)變遷的約束完整性約束條件分類六類完整性約束條件靜態(tài)列級約束靜態(tài)元組約束靜態(tài)關(guān)系約束動態(tài)列級約束動態(tài)元組約束動態(tài)關(guān)系約束完整性約束條件(續(xù))對象狀態(tài)動態(tài)列級約束動態(tài)元組約束動態(tài)關(guān)系約束動態(tài) ④⑤⑥

靜態(tài)列級約束靜態(tài)元組約束靜態(tài)關(guān)系約束靜態(tài)①②③

列元組關(guān)系對象粒度1.靜態(tài)列級約束靜態(tài)列級約束:對取值域的說明最常見、最簡單、最容易實(shí)現(xiàn)的一類完整性約束靜態(tài)列級約束五類靜態(tài)列級約束1)數(shù)據(jù)類型約束:數(shù)據(jù)的類型、長度、單位、精度等2)對數(shù)據(jù)格式的約束 例:學(xué)號:前兩位表示入學(xué)年份,后四位為順序編號日期:YY.MM.DD。3)取值范圍或取值集合的約束 例:規(guī)定成績的取值范圍為0-100性別的取值集合為[男,女]4)對空值的約束 空值:未定義或未知的值空值:與零值和空格不同有的列允許空值,有的則不允許,如成績可為空值5)其他約束 例:關(guān)于列的排序說明,組合列等靜態(tài)列級約束2.靜態(tài)元組約束規(guī)定元組的各個列之間的約束關(guān)系例:訂貨關(guān)系中發(fā)貨量<=訂貨量教師關(guān)系中教授的工資>1500元

靜態(tài)元組約束只局限在元組上3.靜態(tài)關(guān)系約束關(guān)系的各個元組之間或若干關(guān)系之間存在的各種聯(lián)系或約束常見的靜態(tài)約束有四種:實(shí)體完整性參照完整性函數(shù)依賴約束---隱念在關(guān)系模式中統(tǒng)計約束---某個字段值與一個關(guān)系多個元組的統(tǒng)計值之間的約束關(guān)系。統(tǒng)計約束定義某個字段值一個關(guān)系多個元組的統(tǒng)計值之間的約束關(guān)系例:職工平均工資的2倍<=部門經(jīng)理的工資<=職工平均工資的5倍職工平均工資值:統(tǒng)計值4.動態(tài)列級約束動態(tài)列級約束是修改列定義或列值時應(yīng)滿足的約束條件 1)修改列定義時的約束 例:將原來允許空值的列改為不允許空值時:該列目前已存在空值,則拒絕這種修改2)修改列值時的約束修改列值時新舊值之間要滿足的約束條件例:職工工資調(diào)整>=原來工資年齡只能增長5.動態(tài)元組約束修改元組值:各個字段之間要滿足的約束條件例:職工工資調(diào)整不得低于其原來工資+工齡*26.動態(tài)關(guān)系約束關(guān)系變化前后狀態(tài):限制條件例:事務(wù)一致性、原子性等約束條件完整性約束條件小結(jié)粒度狀態(tài)

列級

元組級

關(guān)系級

靜態(tài)列定義·類型·格式·值域·空值

元組值應(yīng)滿足的條件

實(shí)體完整性約束參照完整性約束函數(shù)依賴約束統(tǒng)計約束動態(tài)改變列定義或列值元組新舊值之間應(yīng)滿足的約束條件

關(guān)系新舊狀態(tài)間應(yīng)滿足的約束條件

二、完整性控制1、DBMS的完整性控制機(jī)制2、關(guān)系系統(tǒng)三類完整性的實(shí)現(xiàn)3、參照完整性的實(shí)現(xiàn)1、DBMS的完整性控制機(jī)制(1)定義功能一個完善的完整性控制機(jī)制應(yīng)該允許用戶定義各類完整性約束條件。DBMS的完整性控制機(jī)制(續(xù))(2)檢查功能立即執(zhí)行的約束(Immediateconstraints)

語句執(zhí)行完后立即檢查是否違背完整性約束延遲執(zhí)行的約束(Deferredconstrainsts)完整性檢查延遲到整個事務(wù)執(zhí)行結(jié)束后進(jìn)行DBMS的完整性控制機(jī)制(續(xù))例:銀行數(shù)據(jù)庫中“借貸總金額應(yīng)平衡”的約束就應(yīng)該是延遲執(zhí)行的約束從賬號A轉(zhuǎn)一筆錢到賬號B為一個事務(wù),從賬號A轉(zhuǎn)出去錢后賬就不平了,必須等轉(zhuǎn)入賬號B后賬才能重新平衡,這時才能進(jìn)行完整性檢查。DBMS的完整性控制機(jī)制(續(xù))(3)違約反應(yīng)

拒絕該操作其他處理方法DBMS的完整性控制機(jī)制(續(xù))一條完整性規(guī)則可以用一個五元組表示: (D,O,A,C,P)D(Data)約束作用的數(shù)據(jù)對象;O(Operation)觸發(fā)完整性檢查的數(shù)據(jù)庫操作

當(dāng)用戶發(fā)出什么操作請求時需要檢查該完整性規(guī)則是立即檢查還是延遲檢查;A(Assertion)數(shù)據(jù)對象必須滿足的斷言或語義約束這是規(guī)則的主體;

C(Condition)選擇A作用的數(shù)據(jù)對象值的謂詞;

P(Procedure)違反完整性規(guī)則時觸發(fā)的過程。DBMS的完整性控制機(jī)制(續(xù))例1:在“學(xué)號不能為空”的約束中D約束作用的對象為Sno屬性O(shè)插入或修改Student元組時ASno不能為空C無(A可作用于所有記錄的Sno屬性)P拒絕執(zhí)行該操作DBMS的完整性控制機(jī)制(續(xù))例2:在“教授工資不得低于2000元”的約束中D約束作用的對象為工資Sal屬性O(shè)插入或修改職工元組時ASal不能小于2000C職稱=′教授′(A僅作用于職稱=‘教授’的記錄)P拒絕執(zhí)行該操作2、關(guān)系系統(tǒng)三類完整性的實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫系統(tǒng)都提供了定義和檢查實(shí)體完整性、參照完整性和用戶定義的完整性的功能違反實(shí)體完整性規(guī)則和用戶定義的完整性規(guī)則的操作:一般是拒絕執(zhí)行違反參照完整性的操作:拒絕執(zhí)行接受這個操作,同時執(zhí)行一些附加的操作,以保證數(shù)據(jù)庫的狀態(tài)正確3、參照完整性的實(shí)現(xiàn)例:職工-部門數(shù)據(jù)庫包含職工表EMP和部門表DEPT1DEPT關(guān)系的主碼為部門號Deptno2EMP關(guān)系的主碼為職工號Empno,外碼為部門號Deptno稱DEPT為被參照關(guān)系或目標(biāo)關(guān)系,EMP為參照關(guān)系RDBMS實(shí)現(xiàn)參照完整性時需要考慮以下4方面:(1)外碼是否可以接受空值的問題外碼是否能夠取空值:依賴于應(yīng)用環(huán)境的語義實(shí)現(xiàn)參照完整性:系統(tǒng)提供定義外碼的機(jī)制定義外碼列是否允許空值的機(jī)制外碼是否可以接受空值的問題(續(xù))例1:在職工-部門數(shù)據(jù)庫中,EMP關(guān)系包含有外碼Deptno某元組的這一列若為空值,表示這個職工尚未分配到任何具體的部門工作和應(yīng)用環(huán)境的語義是相符外碼是否可以接受空值的問題(續(xù))例2:學(xué)生-選課數(shù)據(jù)庫

Student關(guān)系為被參照關(guān)系,其主碼為Sno。SC為參照關(guān)系,外碼為Sno。若SC的Sno為空值:表明尚不存在的某個學(xué)生,或者某個不知學(xué)號的學(xué)生,選修了某門課程,其成績記錄在Grade中與學(xué)校的應(yīng)用環(huán)境是不相符的,因此SC的Sno列不能取空值。(2)在被參照關(guān)系中刪除元組時的問題出現(xiàn)違約操作的情形:刪除被參照關(guān)系的某個元組(student)而參照關(guān)系有若干元組(SC)的外碼值與被刪除的被參照關(guān)系的主碼值相同在被參照關(guān)系中刪除元組時的問題違約反應(yīng):可有三種策略級聯(lián)刪除(CASCADES)受限刪除(RESTRICTED)置空值刪除(NULLIFIES) 這三種處理方法,哪一種是正確的,要依應(yīng)用環(huán)境的語義來定在被參照關(guān)系中刪除元組時的問題級聯(lián)刪除將參照關(guān)系中外碼值與被參照關(guān)系中要刪除元組主碼值相對應(yīng)的元組一起刪除受限刪除當(dāng)參照關(guān)系中沒有任何元組的外碼值與要刪除的被參照關(guān)系的元組的主碼值相對應(yīng)時,系統(tǒng)才執(zhí)行刪除操作,否則拒絕此刪除操作在被參照關(guān)系中刪除元組時的問題置空值刪除刪除被參照關(guān)系的元組,并將參照關(guān)系中與被參照關(guān)系中被刪除元組主碼值相等的外碼值置為空值。在被參照關(guān)系中刪除元組時的問題例:要刪除Student關(guān)系中Sno=950001的元組,而SC關(guān)系中有4個元組的Sno都等于950001。級聯(lián)刪除:將SC關(guān)系中所有4個Sno=950001的元組一起刪除。如果參照關(guān)系同時又是另一個關(guān)系的被參照關(guān)系,則這種刪除操作會繼續(xù)級聯(lián)下去

受限刪除:系統(tǒng)將拒絕執(zhí)行此刪除操作。在被參照關(guān)系中刪除元組時的問題置空值刪除:將SC關(guān)系中所有Sno=950001的元組的Sno值置為空值。在學(xué)生選課數(shù)據(jù)庫中,顯然第一種方法和第二種方法都是對的。第三種方法不符合應(yīng)用環(huán)境語義。(3)在參照關(guān)系中插入元組時的問題出現(xiàn)違約操作的情形需要在參照關(guān)系中插入元組,而被參照關(guān)系不存在相應(yīng)的元組違約反應(yīng)受限插入遞歸插入

在參照關(guān)系中插入元組時的問題受限插入僅當(dāng)被參照關(guān)系中存在相應(yīng)的元組,其主碼值與參照關(guān)系插入元組的外碼值相同時,系統(tǒng)才執(zhí)行插入操作,否則拒絕此操作。

遞歸插入首先向被參照關(guān)系中插入相應(yīng)的元組,其主碼值等于參照關(guān)系插入元組的外碼值,然后向參照關(guān)系插入元組。在參照關(guān)系中插入元組時的問題例:向SC關(guān)系插入(99001,1,90)元組,而Student關(guān)系中尚沒有Sno=99001的學(xué)生受限插入:系統(tǒng)將拒絕向SC關(guān)系插入(99001,1,90)元組遞歸插入:系統(tǒng)將首先向Student關(guān)系插入Sno=99001的元組,然后向SC關(guān)系插入(99001,1,90)元組。(4)修改被參照關(guān)系中主碼的問題兩種策略(1)不允許修改主碼(2)允許修改主碼

允許修改主碼策略違約操作要修改被參照關(guān)系中某些元組的主碼值,而參照關(guān)系中有些元組的外碼值正好等于被參照關(guān)系要修改的主碼值要修改參照關(guān)系中某些元組的主碼值,而被參照關(guān)系中沒有任何元組的外碼值等于被參照關(guān)系修改后的主碼值允許修改主碼策略違約反應(yīng)(1)修改的關(guān)系是被參照關(guān)系:與刪除類似級聯(lián)修改受限修改置空值修改允許修改主碼策略級聯(lián)修改修改被參照關(guān)系中主碼值同時,用相同的方法修改參照關(guān)系中相應(yīng)的外碼值。受限修改拒絕此修改操作。只當(dāng)參照關(guān)系中沒有任何元組的外碼值等于被參照關(guān)系中某個元組的主碼值時,這個元組的主碼值才能被修改。置空值修改修改被參照關(guān)系中主碼值,同時將參照關(guān)系中相應(yīng)的外碼值置為空值。允許修改主碼策略例:將Student關(guān)系中Sno=950001的元組中Sno值改為960123。而SC關(guān)系中有4個元組的Sno=950001級聯(lián)修改:將SC關(guān)系中4個Sno=950001元組中的Sno值也改為960123。如果參照關(guān)系同時又是另一個關(guān)系的被參照關(guān)系,則這種修改操作會繼續(xù)級聯(lián)下去。允許修改主碼策略受限修改:只有SC中沒有任何元組的Sno=950001時,才能修改Student表中Sno=950001的元組的Sno值改為960123。置空值修改:將Student表中Sno=950001的元組的Sno值改為960123。而將SC表中所有Sno=950001的元組的Sno值置為空值。在學(xué)生選課數(shù)據(jù)庫中只有第二種方法是正確的。允許修改主碼策略違約反應(yīng)(2)修改的關(guān)系是參照關(guān)系:與插入類似受限插入遞歸插入?yún)⒄胀暾缘膶?shí)現(xiàn)RDBMS在實(shí)現(xiàn)參照完整性時:需要向用戶提供定義主碼、外碼的機(jī)制向用戶提供按照自己的應(yīng)用要求選擇處理依賴關(guān)系中對應(yīng)的元組的方法三、SQLserver的完整性1、SQLserver中的實(shí)體完整性2、SQLserver中的參照完整性3、SQLserver中用戶定義的完整性1、SQLserver中的實(shí)體完整性在CREATETABLE語句中提供了PRIMARYKEY子句,供用戶在建表時指定關(guān)系的主碼列。在列級使用PRIMARYKEY子句在表級使用PRIMARYKEY子句

SQLserver中的實(shí)體完整性(續(xù))例1:在學(xué)生選課數(shù)據(jù)庫中,要定義Student表的Sno屬性為主碼CREATETABLEStudent(SnoCHAR(8),SnameCHAR(20),SageINT,

CONSTRAINTPK_SNOPRIMARYKEY(Sno));或:CREATETABLEStudent(SnoCHAR(8)PRIMARYKEY

,SnameCHAR(20),SageINT);SQLserver中的實(shí)體完整性(續(xù))例2:要在SC表中定義(Sno,Cno)為主碼

CREATETABLESC(SnoCHAR(8),CnoCHAR(2),GradeINT,

CONSTRAINTPK_SCPRIMARYKEY(Sno,Cno));SQLserver中的實(shí)體完整性(續(xù))用戶程序?qū)χ鞔a列進(jìn)行更新操作時,系統(tǒng)自動進(jìn)行完整性檢查違約操作使主屬性值為空值的操作使主碼值在表中不唯一的操作違約反應(yīng)系統(tǒng)拒絕此操作,從而保證了實(shí)體完整性2、SQLserver中的參照完整性定義參照完整性FOREIGNKEY子句:定義外碼列REFERENCES子句:外碼相應(yīng)于哪個表的主碼

外鍵Foreignkey約束用來定義參照完整性,即維護(hù)兩個表之間的一致性。即與另一基本表的primarykey建立聯(lián)系限制自身基本表的數(shù)據(jù)輸入限制主關(guān)鍵字所在的基本表的修改學(xué)生(學(xué)號,姓名,性別,專業(yè)號,年齡)專業(yè)(專業(yè)號,專業(yè)名)外鍵Foreignkey約束方法11、如外部關(guān)鍵字只有一列,可以在它的列名和類型后面直接用references說明它參照了基本個基本表的某些列(主鍵)References<表名>(<列名>)如createtable學(xué)生(學(xué)號char(5)primarykey,姓名char(8),性別char(2),年齡int,專業(yè)號char(5)References專業(yè)(專業(yè)號))外鍵Foreignkey約束方法2在相應(yīng)列名及類型后單獨(dú)列出,并指定約束名Foreignkey(<列名>)References<表名>(<列名>)createtable學(xué)生(學(xué)號char(5)primarykey,姓名char(8),性別char(2),年齡int,專業(yè)號char(5),constraintkkforeignkey(專業(yè)號)references專業(yè)(專業(yè)號))例建立一個SC表,定義SNO,CNO為SC的外部鍵。createtablesc(snochar(5)notnullforeignkeyreferencess(sno),cnochar(5)notnullforeignkeyreferencesc(cno),scorenumeric(3),constraints_c_primprimarykey(sno,cno));

createtable選課(學(xué)號char(8)notnullreferences學(xué)生(學(xué)號),課程號char(2)notnullreferences課程(課程號),成績int,primarykey(學(xué)號,課程號));SQLserver中的參照完整性(續(xù))這時“學(xué)生”表中外碼為“專業(yè)號”,它相應(yīng)于“專業(yè)”表中的主碼“專業(yè)號”。當(dāng)要修改“學(xué)生”表中的“專業(yè)號”值時,先要檢查“專業(yè)”表中有無元組“專業(yè)號”的值與之對應(yīng)若沒有,系統(tǒng)接受這個修改操作否則,系統(tǒng)拒絕此操作SQLserver中的參照完整性(續(xù))當(dāng)要刪除“學(xué)生”表中某個元組時,系統(tǒng)要檢查“專業(yè)”表,若找到相應(yīng)元組即將其隨之刪除。當(dāng)要插入“學(xué)生”表中某個元組時,系統(tǒng)要檢查“專業(yè)”表,先要檢查“專業(yè)”表中有無元組的“專業(yè)號”值與之對應(yīng)若沒有,系統(tǒng)拒絕此插入操作否則,系統(tǒng)接受此操作3、SQLserver中用戶定義的完整性SQLserver中定義用戶完整性的兩類方法用CREATETABLE語句在建表時定義用戶完整性約束通過觸發(fā)器來定義用戶的完整性規(guī)則SQLserver中用戶定義的完整性(續(xù))(1)用CREATETABLE語句在建表時定義用戶完整性約束可定義三類完整性約束列值非空(NOTNULL短語)列值唯一(UNIQUE短語)檢查列值是否滿足一個布爾表達(dá)式(CHECK短語)SQLserver中用戶定義的完整性(續(xù))例1:建立部門表DEPT,要求部門名稱Dname列取值唯一,部門編號Deptno列為主碼CREATETABLEDEPT(DeptnoCHAR(6),DnameCHAR(9)CONSTRAINTU1UNIQUE,LocCHAR(10),CONSTRAINTPK_DEPTPRIMARYKEY(Deptno));其中CONSTRAINTU1UNIQUE表示約束名為U1,該約束要求Dname列值唯一。SQLserver中用戶定義的完整性(續(xù))例2:建立學(xué)生登記表Student,要求學(xué)號在900000至999999之間,年齡<29,性別只能是‘男’或‘女’,姓名非空CREATETABLEStudent

CREATETABLEStudent111(SnoCHAR(5)CHECK(SnoBETWEEN900000AND999999),SnameCHAR(20)NOTNULL,SageINTCHECK(Sage<29),SsexCHAR(2),CONSTRAINTC4CHECK(SsexIN('男','女')));SQLserver中用戶定義的完整性(續(xù))例3:建立職工表EMP,要求每個職工的應(yīng)發(fā)工資不得超過3000元。應(yīng)發(fā)工資實(shí)際上就是實(shí)發(fā)工資列Sal與扣除項(xiàng)Deduct之和。CREATETABLEEMP(Enochar(4),EnameCHAR(10),JobCHAR(8),SalNUMeric(7,2),Deductnumeric(7,2),DeptnoCHAR(2),CONSTRAINTC1CHECK(Sal+Deduct<=3000));SQLserver中用戶定義的完整性(續(xù))(2)通過觸發(fā)器來定義用戶的完整性規(guī)則定義其它的完整性約束時,需要用數(shù)據(jù)庫觸發(fā)器(Trigger)來實(shí)現(xiàn)。數(shù)據(jù)庫觸發(fā)器:一類靠事務(wù)驅(qū)動的特殊過程一旦由某個用戶定義,任何用戶對該數(shù)據(jù)的增、刪、改操作均由服務(wù)器自動激活相應(yīng)的觸發(fā)子,在核心層進(jìn)行集中的完整性控制定義數(shù)據(jù)庫觸發(fā)器的語句CREATETRIGGER<觸發(fā)器名>on<表名>|<視圖名>

{for|AFTER|INSTEADOF}[INSERT][,][UPDATE][,][DELETE]AS<SQL語句>SQLserver中用戶定義的完整性(續(xù))例女生考試(學(xué)號,課程號,成績)學(xué)生(學(xué)號,姓名,性別,年齡,班級號)班級(班級號,班級名,人數(shù),專業(yè)號)教師(教師號,姓名,性別,電話號碼,城市,區(qū),街道,郵編,工齡,基本工資,養(yǎng)老金,公積金,系號,職稱號)例1創(chuàng)建一個名為ins_student的觸發(fā)器,要求在向“學(xué)生”表插入元組后引發(fā)該觸發(fā)器,檢查所插入的元組中學(xué)生的班級號是否出現(xiàn)的“班級”表中,如果在“班級”表中找不到相應(yīng)的班級號,則提示用戶“班級號輸入有誤”,并且回滾事務(wù)。CREATETRIGGERins_studenton學(xué)生AFTERINSERT/*觸發(fā)器在插入元組后被引發(fā)*/ASIF(SELECTCOUNT(*)FROM班級,insertedWHERE班級.班級號=inserted.班級號)=0BEGINPRINT'班級號輸入有誤!'ROLLBACKTRANSACTIONEND例2要求建立一個名為ins_exam的觸發(fā)器,在向“女生考試”表中插入元組后引發(fā)該觸發(fā)器,根據(jù)所插入元組的學(xué)號檢查插入是否是女生的成績,若不是,則提示用戶“輸入的不是女學(xué)生的成績”,并且回滾事務(wù)。CREATETRIGGERins_examon女生考試AFTERINSERT/*觸發(fā)器在插入元組后被引發(fā)*/ASIF(SELECTCOUNT(*)FROM學(xué)生,insertedWHERE學(xué)生.性別="女"and學(xué)生.學(xué)號=inserted.學(xué)號)=0BEGINPRINT'輸入的不是女學(xué)生的成績!'ROLLBACKTRANSACTIONEND

溫馨提示

  • 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

提交評論