版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
完整性約束條件完整性控制FoxPro的完整性小結(jié)5數(shù)據(jù)庫(kù)完整性數(shù)據(jù)庫(kù)的完整性是指數(shù)據(jù)的正確性和相容性。例如,學(xué)生的學(xué)號(hào)必須唯一;性別只能是男或女、本科學(xué)生的年齡的取值范圍為14-30的整數(shù);學(xué)生所在的系必須是學(xué)校已經(jīng)開(kāi)設(shè)的系等。數(shù)據(jù)庫(kù)是否具備完整性關(guān)系到數(shù)據(jù)庫(kù)系統(tǒng)能否真實(shí)地反映現(xiàn)實(shí)世界,因此維護(hù)數(shù)據(jù)庫(kù)的完整性是非常重要的。
5數(shù)據(jù)庫(kù)完整性數(shù)據(jù)的完整性和安全性是兩個(gè)不同的概念。前者是為了防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù),防止錯(cuò)誤信息的輸入和輸出,即所謂垃圾進(jìn)垃圾出(GarbageInGarbageOut)所造成的無(wú)效操作和錯(cuò)誤結(jié)果。而后者是保護(hù)數(shù)據(jù)庫(kù)防止惡意破壞和非法的存取。也就是說(shuō),安全性措施的防范對(duì)象是非法用戶和非法操作,完整性措施的防范對(duì)象是不合語(yǔ)義的數(shù)據(jù)。5.2數(shù)據(jù)庫(kù)完整性
為維護(hù)數(shù)據(jù)庫(kù)的完整性,DBMS必須提供一種機(jī)制來(lái)檢查數(shù)據(jù)庫(kù)中的數(shù)據(jù),看其是否滿足語(yǔ)義規(guī)定的條件。這些加在數(shù)據(jù)庫(kù)數(shù)據(jù)之上的語(yǔ)義約束條件稱為數(shù)據(jù)庫(kù)完整性約束條件,它們作為模式的一部分存放入數(shù)據(jù)庫(kù)中。而DBMS中檢查數(shù)據(jù)是否滿足完整性條件的機(jī)制稱為完整性檢查。5.2數(shù)據(jù)庫(kù)完整性5.1
完整性約束條件完整性檢查是圍繞完整性約束條件進(jìn)行的,因此完整性約束條件是完整性控制機(jī)制的核心。完整性約束條件作用的對(duì)象可以是關(guān)系、元組、列三種。其中列約束條件主要是列的類型、取值范圍、精度、排序等約束條件。元組的約束條件是元組中各個(gè)字段間的聯(lián)系的約束。關(guān)系的約束是若干元組間、關(guān)系集合上以及關(guān)系之間的聯(lián)系的約束。
5.1
完整性約束條件完整性約束條件涉及的這三類對(duì)象,其狀態(tài)可以是靜態(tài)的,也可以是動(dòng)態(tài)的。所謂靜態(tài)約束是指數(shù)據(jù)庫(kù)每一確定狀態(tài)時(shí)的數(shù)據(jù)對(duì)象所應(yīng)滿足的約束條件,它是反映數(shù)據(jù)庫(kù)狀態(tài)合理性的約束,這是最重要的一類完整性約束。動(dòng)態(tài)約束是指數(shù)據(jù)庫(kù)從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài)時(shí),新、舊值之間所應(yīng)滿足的約束條件,它反映數(shù)據(jù)庫(kù)狀態(tài)變遷的約束。5.1
完整性約束條件圖5.1完整性約束條件分類對(duì)象粒度對(duì)象狀態(tài)動(dòng)態(tài)列級(jí)約束動(dòng)態(tài)元組約束動(dòng)態(tài)關(guān)系約束④⑤⑥靜態(tài)列級(jí)約束靜態(tài)元組約束靜態(tài)關(guān)系約束①②
③
靜態(tài)動(dòng)態(tài)列元組關(guān)系5.1
完整性約束條件一、靜態(tài)列級(jí)約束靜態(tài)列級(jí)約束是對(duì)一個(gè)列的取值說(shuō)明,這是最常用也是最容易實(shí)現(xiàn)的一類完整性約束。
1.對(duì)數(shù)據(jù)類型的約束(包括數(shù)據(jù)的類型、長(zhǎng)度、單位、精度等)
2.對(duì)數(shù)據(jù)格式的約束例如,規(guī)定學(xué)號(hào)的前兩位表示入學(xué)年份,中間兩位表示系的編號(hào),后三位為順序編號(hào)。
5.1
完整性約束條件一、靜態(tài)列級(jí)約束
3.對(duì)取值范圍或取值集合的約束例如,規(guī)定學(xué)生成績(jī)的取值范圍為0-100,性別的取值集合為[男,女]。
4.對(duì)空值的約束空值表示未定義或未知的值,它與零值和空格不同。有的列允許有空值,有的則不允許。例如學(xué)生學(xué)號(hào)不能取空值,成績(jī)可以為空值。
5.其它約束例如關(guān)于列的排序,組合列等。5.1
完整性約束條件二、靜態(tài)元組約束一個(gè)元組是由若干個(gè)列值組成的,靜態(tài)元組約束就是規(guī)定元組的各個(gè)列之間的約束關(guān)系。例如訂貨關(guān)系中包含發(fā)貨量、訂貨量等列,規(guī)定發(fā)貨量不得超過(guò)訂貨量;又如教師關(guān)系中包含職稱、工資等列,規(guī)定教授的工資不低于1000元。5.1
完整性約束條件三、靜態(tài)關(guān)系約束在一個(gè)關(guān)系的各個(gè)元組之間或者若干關(guān)系之間常常存在各種聯(lián)系或約束。常見(jiàn)的靜態(tài)關(guān)系約束有:實(shí)體完整性約束參照完整性約束實(shí)體完整性約束和參照完整性約束是關(guān)系模型的兩個(gè)極其重要的約束,稱為關(guān)系的兩個(gè)不變性。5.1
完整性約束條件三、靜態(tài)關(guān)系約束函數(shù)依賴約束。大部分函數(shù)依賴約束都在關(guān)系模式中定義。統(tǒng)計(jì)約束。即字段值與關(guān)系中多個(gè)元組的統(tǒng)計(jì)值之間的約束關(guān)系。例如規(guī)定部門經(jīng)理的工資不得高于本部門職工平均工資的5倍,不得低于本部門職工平均工資的2倍。5.1
完整性約束條件四、動(dòng)態(tài)列級(jí)約束動(dòng)態(tài)列級(jí)約束是修改列定義或列值時(shí)應(yīng)滿足的約束條件,包括下面兩方面:修改列定義時(shí)的約束例如,將允許空值修改成不允許空值時(shí),如果該列目前已存在空值,則拒絕這種修改。修改列值時(shí)的約束修改列值有時(shí)需要參照其舊值,并且新舊值之間需要滿足某種約束條件。例如,職工工資調(diào)整不得低于其原來(lái)的工資,學(xué)生年齡只能增長(zhǎng)等。5.1
完整性約束條件五、動(dòng)態(tài)元組約束動(dòng)態(tài)元組約束是指修改元組的值時(shí)元組中各字段間需要滿足某種約束條件。例如職工工資調(diào)整時(shí)新工資不得低于原工資+工齡*1.5倍。六、動(dòng)態(tài)關(guān)系約束動(dòng)態(tài)關(guān)系約束是加在關(guān)系變化前后狀態(tài)上的限制條件,例如事務(wù)一致性、原子性等約束。5.1
完整性約束條件表5.1完整性的約束條件粒度
狀態(tài)列級(jí)元組級(jí)關(guān)系級(jí)列定義元組值實(shí)體完整性約束
靜態(tài)·類型應(yīng)滿足參照完整性約束
·格式的條件函數(shù)依賴約束
·值域統(tǒng)計(jì)約束
·空值動(dòng)態(tài)改變列定元組新舊值關(guān)系新舊狀態(tài)義或列值之間應(yīng)滿足之間應(yīng)滿足的的約束件條約束條件5.2完整性控制DBMS的完整性控制機(jī)制應(yīng)具有三個(gè)方面的功能:定義功能,提供定義完整性約束條件的機(jī)制。檢查功能,檢查用戶發(fā)出的操作請(qǐng)求是否違背了完整性約束條件。如果發(fā)現(xiàn)用戶的操作請(qǐng)求使數(shù)據(jù)違背了完整性約束條件,則采取一定的動(dòng)作來(lái)保證數(shù)據(jù)的完整性。
5.2完整性控制檢查是否違背完整性約束的時(shí)機(jī)通常是在一條語(yǔ)句執(zhí)行完后立即檢查,稱這類約束為立即執(zhí)行約束(ImmediateConstraints)。
有時(shí)完整性檢查需要延遲到整個(gè)事務(wù)執(zhí)行結(jié)束后再進(jìn)行,檢查正確方可提交,稱這類約束為延遲執(zhí)行約束(DeferredConstraints)。
例如銀行數(shù)據(jù)庫(kù)中“借貸總金額應(yīng)平衡”的約束就應(yīng)該是延遲執(zhí)行的約束。從帳號(hào)A轉(zhuǎn)一筆錢到帳號(hào)B為一個(gè)事務(wù),從帳號(hào)A轉(zhuǎn)出前后帳就不平了,必須等轉(zhuǎn)入B后帳才能重新平衡,這是才能進(jìn)行完整性檢查。如果發(fā)現(xiàn)用戶操作請(qǐng)求違背了完整性約束條件,系統(tǒng)將拒絕該操作,但對(duì)于延遲的約束,系統(tǒng)將拒絕整個(gè)事務(wù),把數(shù)據(jù)庫(kù)恢復(fù)到該事務(wù)執(zhí)行前的狀態(tài)。5.2
完整性控制一條完整性規(guī)則可以用一個(gè)五元組(D,O,A,C,P)來(lái)表示,其中:D(Data)約束作用的數(shù)據(jù)對(duì)象;O(Operation)觸發(fā)完整性檢查的數(shù)據(jù)庫(kù)操作,即當(dāng)用戶發(fā)出什么操作請(qǐng)求時(shí)需要檢查該完整性規(guī)則,是立即檢查還是延遲檢查;A(Assertion)數(shù)據(jù)對(duì)象必須滿足的斷言或語(yǔ)義約束,這是規(guī)則的主體;C(Condition)選擇A作用的數(shù)據(jù)對(duì)象值的謂詞;P(Procedure)違反完整性規(guī)則時(shí)觸發(fā)的過(guò)程。5.2
完整性控制例如,在“學(xué)號(hào)不能為空”的約束中D約束作用的對(duì)象為Sno屬性O(shè)插入或修改Student元組時(shí)ASno不能為空C無(wú)(A可以作用于所有記錄的Sno屬性)P拒絕執(zhí)行該操作又如,在“教授工資不得低于1000元”的約束中D約束作用的對(duì)象為工資Sal屬性O(shè)插入或修改職工元組時(shí)ASal不能少于1000C職稱=“教授”(A僅作用于職稱=“教授”的記錄)P拒絕執(zhí)行該操作5.2
完整性控制
在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)中,最重要的完整性約束是實(shí)體完整性和參照完整性,其它完整性約束條件則可以歸入用戶定義的完整性。目前許多關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)都提供了定義和檢查實(shí)體完整性、參照完整性和用戶定義完整性的功能。對(duì)于違反實(shí)體完整性和用戶定義完整性的操作一般都采用拒絕執(zhí)行的方式進(jìn)行處理。而對(duì)于違反參照完整性的操作,并不都是簡(jiǎn)單地拒絕執(zhí)行,有時(shí)要根據(jù)應(yīng)用語(yǔ)義執(zhí)行一些附加操作,以保證數(shù)據(jù)庫(kù)的正確性。下面我們來(lái)討論一下關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)在實(shí)現(xiàn)參照完整性要考慮的幾個(gè)問(wèn)題:
5.2
完整性控制
1.外碼能否接受空值問(wèn)題例如,職工-部門數(shù)據(jù)庫(kù)包含職工表EMP和部門表DEPT,其中DEPT關(guān)系的主碼為部門號(hào)Deptno,EMP關(guān)系的主碼為職工號(hào)Empno,外碼為部門號(hào)Deptno,稱DEPT為被參照關(guān)系或目標(biāo)關(guān)系,EMP為參照關(guān)系。
EMP中,某一元組的Deptno列若為空值,表示這個(gè)職工尚未分配到任何部門工作。這和應(yīng)用環(huán)境的語(yǔ)義是相符的,因此EMP的Deptno列可以取空值。5.2
完整性控制
1.外碼能否接受空值問(wèn)題
但在學(xué)生-選課數(shù)據(jù)庫(kù)中,Student關(guān)系為被參照關(guān)系,其主碼為Sno。SC為參照關(guān)系,外碼為Sno。若SC的Sno為空值,則表示尚不存在的某個(gè)學(xué)生,或者某個(gè)不知學(xué)號(hào)的學(xué)生,選修了某門課程,其成績(jī)記錄在Grade列中。這與學(xué)校的應(yīng)用環(huán)境是不相符的,因此SC的Sno列不能取空值。因此在實(shí)現(xiàn)參照完整性時(shí),系統(tǒng)除了應(yīng)該提供定義外碼的機(jī)制,還應(yīng)該提供定義外碼列是否允許空值的機(jī)制。5.2
完整性控制2.在被參照關(guān)系中刪除元組的問(wèn)題例如要?jiǎng)h除Student關(guān)系中Sno=95001的元組,而SC關(guān)系中又有4個(gè)元組的Sno都等于95001,一般地,當(dāng)刪除被參照關(guān)系的某個(gè)元組,而參照關(guān)系存在的若干元組,其外碼值與被刪除元組的主碼值相同,這時(shí)可有三種不同策略:5.2
完整性控制級(jí)聯(lián)刪除(CASCADES)
將參照關(guān)系中所有外碼值與被參照關(guān)系中要?jiǎng)h除元組主碼值相同的元組一起刪除。例如將上面Sc關(guān)系中4個(gè)Sno=95001的元組一起刪除。如果參照關(guān)系同時(shí)又是另一個(gè)關(guān)系的被參照關(guān)系,則這種刪除操作會(huì)繼續(xù)級(jí)聯(lián)下去。5.2.2完整性控制受限刪除(RESTRICTED)
僅當(dāng)參照關(guān)系中沒(méi)有任何元組的外碼值與被參照關(guān)系中要?jiǎng)h除元組主碼值相同時(shí),系統(tǒng)才執(zhí)行刪除操作,否則拒絕此操作。例如對(duì)于上面的情況,系統(tǒng)將拒絕刪除Student關(guān)系中Sno=95001的元組。5.2
完整性控制置空值刪除(NULLIFIES)
刪除被參照關(guān)系的元組,并將參照關(guān)系中相應(yīng)元組的外碼值置空。例如。例如將上面Sc關(guān)系中所有Sno=95001的元組的Sno值置為空值。這三種處理方法,哪一種是正確的呢?這要依應(yīng)用環(huán)境的語(yǔ)義來(lái)定。在學(xué)生-選課數(shù)據(jù)庫(kù)中,顯然第1種方法是對(duì)的。因?yàn)楫?dāng)一個(gè)學(xué)生畢業(yè)或退學(xué)后,他的個(gè)人記錄從Student表中刪除了,他的選課記錄也應(yīng)隨之從SC表中刪除。5.2
完整性控制3.在參照關(guān)系中插入元組時(shí)的問(wèn)題例如向SC關(guān)系插入(99001,1,90)元組,而Student關(guān)系中尚沒(méi)有Sno=99001的學(xué)生,一般地,當(dāng)參照關(guān)系插入某個(gè)元組,而被參照關(guān)系不存在相應(yīng)的元組,其主碼值與參照關(guān)系插入元組的外碼值相同,這時(shí)可以有以下策略:5.2
完整性控制受限插入
僅當(dāng)被參照關(guān)系中存在相應(yīng)的元組,其主碼值與參照關(guān)系插入元組的外碼值相同時(shí),系統(tǒng)才執(zhí)行插入操作,否則拒絕此操作。例如對(duì)于上面的情況,系統(tǒng)將拒絕向SC關(guān)系插入(99001,1,90)元組。遞歸插入首先向被參照關(guān)系中插入相應(yīng)的元組,其主碼值等于參照關(guān)系插入元組的外碼值,然后向參照關(guān)系插入元組。例如對(duì)于上面的情況,系統(tǒng)將首先向Student關(guān)系插入Sno=99001的元組,然后向SC關(guān)系插入(99001,1,90)元組。4.修改關(guān)系中主碼的問(wèn)題不允許修改主碼在有些RDBMS中,修改關(guān)系主碼操作是不允許的,例如不能用UPDATE語(yǔ)句將學(xué)號(hào)95001改為95102。如果需要修改主碼值,只能先刪除該元組,然后再把具有新主碼的元組插入到關(guān)系中。5.2
完整性控制允許修改主碼在有些RDBMS中,允許修改關(guān)系主碼,但必須保證主碼的唯一性和非空,否則拒絕修改。當(dāng)修改的關(guān)系是被參照關(guān)系時(shí),還必須檢查參照關(guān)系,是否存在這樣的元組,其外碼值等于被參照關(guān)系要修改的主碼值。例如要將Student關(guān)系中Sno=950001的Sno值改為960123,而SC關(guān)系中有4個(gè)元組的Sno=950001,這時(shí)與在被參照關(guān)系中刪除元組的情況類似,可以有:級(jí)聯(lián)修改、拒絕修改、置空值修改三種策略加以選擇。5.2
完整性控制
當(dāng)修改的關(guān)系是參照關(guān)系時(shí),還必須檢查被參照關(guān)系,是否存在這樣的元組,其主碼值等于被參照關(guān)系要修改的外碼值。例如要把SC關(guān)系中(950001,1,90)的元組修改為Sno值改為(990001,1,90),而Student關(guān)系中尚沒(méi)有Sno=990001的學(xué)生,這時(shí)與在參照關(guān)系中插入元組的情況類似,可以有:受限插入和遞歸插入兩種策略加以選擇。從上面的討論看到DBMS在實(shí)現(xiàn)參照完整性時(shí),除了要提供定義主碼、外碼機(jī)制外,還需要提供不同的策略供用戶選擇。選擇哪種策略,都要根據(jù)應(yīng)用環(huán)境的要求確定。5.2
完整性控制一、FoxPro中的實(shí)體完整性
FoxPro在CREATETABLE語(yǔ)句中提供了PRIMARYKEY子句,供用戶在建表時(shí)指定關(guān)系的主碼列。例如,在學(xué)生-選課數(shù)據(jù)庫(kù)中,要定義Student表的Sno為主碼,可使用如下語(yǔ)句:
CREATETABLEStudent
(SnoNUMBER(8)PRIMARYKEY,
SnameCHAR(8),
SageNUMBER(2))
其中,PRIMARYKEY表示Sno是Student表的主碼。如果用PK_SNO做此主碼的約束名,則用如下語(yǔ)句:
CREATETABLEStudent
(SnoNUMBER(8),
SnameCHAR(8),
SageNUMBER(2),
PRIMARYKEYSnoTagPK_Sno)
5.3
FoxPro完整性
若要在SC表中定義(Sno,Cno)為主碼,則用下面語(yǔ)句建立SC表:
CREATETABLESC
(SnoNUMBER(8),
CnoNUMBER(2),
GradeNUMBER(2),
PRIMARYKEYSno+CnotagSnocno)
用PRIMARYKEY語(yǔ)句定義了關(guān)系的主碼后,每當(dāng)用戶程序?qū)χ鞔a列進(jìn)行更新操作時(shí),系統(tǒng)自動(dòng)進(jìn)行完整性檢查,凡操作使主碼值為空或使主碼值在表中不唯一,系統(tǒng)拒絕此操作,從而保證了實(shí)體完整性。5.3FoxPro完整性二、
FoxPro中的參照完整性
FoxPro的CREATETABLE語(yǔ)句也可以定義參照完整性規(guī)則,即用FOREINGKEY子句定義那些列為外碼列,用REFERENCES子句指明這些外碼相應(yīng)于那個(gè)表的主碼。參照完整性規(guī)則,由用戶在參照完整性編輯中自己定義(分為級(jí)聯(lián)、限制和忽略)。
5.3FoxPro完整性例如,使用如下SQL語(yǔ)句建立SC表
CREATETABLESC
(SnoNUMBER(8)REFERENCESstudentTAGSno,
CnoNUMBER(2)REFERENCESCourseTAGCno,
GradeNUMBER(2),
PRIMARYKEYSno+CnotagSnocno)
CREATETABLESC
(SnoNUMBER(8),
CnoNUMBER(2),
GradeNUMBER(2),
PRIMARYKEYSno+CnotagSnocno,
FOREIGNKEYsnotagSnoREFERENCESstudentTAGSno,
FOREIGNKEYCnotagCnoREFERENCESCourseTAGCno)
5.3FoxPro完整性表明Sc是參照表,Student為其被參照表,SC表中Sno為外碼,它相應(yīng)于Student表中的主碼Sno。
當(dāng)刪除或修改Student表中某個(gè)元組的主碼時(shí)要檢查Sc中是否有元組的Sno值等于Student中要?jiǎng)h除的元組的Sno值,然后根據(jù)用戶在參照完整性編輯中自己定義的操作進(jìn)行,如果選擇級(jí)聯(lián),則做級(jí)聯(lián)刪除或修改,如果選擇限制,則系統(tǒng)拒絕這一更新或刪除操作,如果用戶選擇忽略,則忽略參照完整性的檢測(cè)。
5.3FoxPro完整性三、
FoxPro中用戶定義的完整性除實(shí)體完整性和參照完整性外,應(yīng)用系統(tǒng)中往往還需要定義與應(yīng)用有關(guān)的完整性限制。例如:要求某一列的值不能取空值,要在表中是唯一的,要在某個(gè)取值范圍中等。
FoxPro允許用戶在建表時(shí)定義下列完整性約束:列值非空(NOTNULL短語(yǔ))列值唯一(UNIQUE短語(yǔ))檢查列值是否滿足一個(gè)布爾表達(dá)式(CHECK短語(yǔ))5.3FoxPro完整性例1建立學(xué)生表Student,要求學(xué)生姓名Sname列取值唯一,學(xué)號(hào)Sno列為主碼。
CREATETABLEStudent
(SnoNUMBER(8)PRIMARYKEY,
SnameCHAR(8)UNIQUE,
SageNUMBER(2))
該約束要求Sname列值唯一。
5.3FoxPro完整性例2建立學(xué)生登記表Student,要求學(xué)號(hào)在90000~99999之間,年齡<29,性別只能是“男”或“女”,姓名非空。CREATETABLEStudent
(SnoNUMBER(5)CHECKSno>90000ANDSno<99999,
SnameCHAR(20)NOTNULL,
SageNUMBER(3)CHECKsage<29ERROR“sage<29”,
SsexCHAR(2)CHECKssex='男'orssex='女')
5.3FoxPro完整性例3建立職工表EMP,要求每個(gè)職工的應(yīng)發(fā)工資不得超過(guò)3000元。應(yīng)發(fā)工資實(shí)際上就是實(shí)發(fā)工資列Sal與扣除項(xiàng)Deduct之和。
CEARTETABLEEMP
(EnoNUMBER(4),
EnameCHAR(10),
JobCHAR(9),
SalNUMBER(7,2),
DeductNUMBER(7,2),
DeptnoNUMBER(2),
CHECKSal+Deduct<=3000)
5.3
FoxPro完整性四、觸發(fā)器(Trigger)
觸發(fā)器(Trigger)是用戶定義在關(guān)系表上的一類靠事件驅(qū)動(dòng)的特殊過(guò)程。一旦定義,任何用戶對(duì)該數(shù)據(jù)表的增、刪、改操作均由服務(wù)器自動(dòng)激活相應(yīng)的觸發(fā)器,在DBMS核心層進(jìn)行集中的完整性控制。
5.3
FoxPro完整性在FoxPro中,除列值非空、列值唯一、檢查列值是否滿足一個(gè)布爾表達(dá)式外,用戶還可以通過(guò)觸發(fā)器(Trigger)來(lái)實(shí)現(xiàn)其它完整性規(guī)則。
FoxPro定義數(shù)據(jù)庫(kù)觸發(fā)器的語(yǔ)句是CREATETRIGGER。
其格式為:
CREATETRIGGERONTableNameFORDELETE|INSERT|UPDATEASlExpression
5.3FoxPro完整性例為學(xué)生表定義完整性規(guī)則“學(xué)生的年齡不大于30歲”。
CREATETRIGGEROnstudentForUPDATEAssage<30
5.3
FoxPro完整性
綜上所述,
FoxPro提供了CREATETABLE語(yǔ)句和CREATETRIGGER語(yǔ)句定義完整性約束條件,其中用CREATETRIGGER語(yǔ)句可以定義很復(fù)雜的完整性約束條件。完整性約束條件一旦定義好,
FoxPro會(huì)自動(dòng)執(zhí)行相應(yīng)的完整性檢查,對(duì)違反完整性約束條件的操作或拒絕執(zhí)行或執(zhí)行事先定義的操作。5.3
FoxPro完整性5.3FoxPro的完整性CREATETABLE|DBFTableName1[FREE] (FieldName1FieldType[(nFieldWidth[,nPrecision])] [NULL|NOTNULL] [CHECKlExpression1[ERRORcMessageText1]] [DEFAULTeExpression1] [PRIMARYKEY|UNIQUE] [REFERENCESTableName2[TAGTagName1]] [NOCPTRANS] [,FieldName2...] [,PRIMARYKEYeExpression2TAGTagName2|,UNIQUEeExpression3TAGTagName3] [,FOREIGNKEYeExpression4TAGTagName4[NODUP] REFERENCESTableName3[TAGTagName5]] [,CHECKlExpression2[ERRORcMessageText2]])5.3FoxPro的完整性NULLAllowsnullvaluesinthefield.Ifoneormorefieldscancontainnullvalues,themaximumnumberoffieldsthetablecancontainisreducedbyone,from255to254.NOTNULLPreventsnullvaluesinthefield.
IfyouomitNULLandNOTNULL,thecurrentsettingofSETNULLdeterminesifnullvaluesareallowedinthefield.However,ifyouomitNULLandNOTNULLandincludethePRIMARYKEYorUNIQUEclause,thecurrentsettingofSETNULLisignoredandthefielddefaultstoNOTNULL.5.3FoxPro的完整性CHECKlExpression1Specifiesavalidationruleforthefield.lExpression1canbeauser-definedfunction.Notethatwhenablankrecordisappended,thevalidationruleischecked.Anerrorisgeneratedifthevalidationruledoesnallowforablankfieldvalueinanappendedrecord.ERRORcMessageText1SpecifiestheerrormessageVisualFoxProdisplayswhenthevalidationrulespecifiedwithCHECKgeneratesanerror.ThemessageisdisplayedonlywhendataischangedwithinaBrowsewindoworEditwindow.
DEFAULTeExpression1Specifiesadefaultvalueforthefield.ThedatatypeofeExpression1mustbethesameasthefielddatatype.
5.3FoxPro的完整性PRIMARYKEYCreatesaprimaryindexforthefield.Theprimaryindextaghasthesamenameasthefield.UNIQUECreatesacandidateindexforthefield.Thecandidateindextaghasthesamenameasthefield.FOREIGNKEYeExpression4TAGTagName4[NODUP]Createsaforeign(non-primary)index,andestablishesarelationshiptoaparenttable.eExpression4specifiestheforeignindexkeyexpressionandTagName4specifiesthenameoftheforeignindexkeytagthatiscreated.Indextagnamescancontainupto10characters.IncludeNODUPtocreateacandidateforeignindex.REFERENCESTableName3[TAGTagName5]Specifiestheparenttabletowhichapersistentrelationshipisestablished.IncludeTAGTagName5toestablisharelationbasedonanindextagfortheparenttable.Indextagnamescancontainupto10characters.IfyouomitTAGTagName5,therelationshipisestablishedusingtheparenttable抯primaryindexkeybydefault.FoxPro修改基本表的命令格式:ALTERTABLETableName1 ADD|ALTER[COLUMN]FieldName1
FieldType[(nFieldWidth[,nPrecision])] [NULL|NOTNULL] [CHECKlExpression1[ERRORcMessageText1]] [DEFAULT
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年茂名市電白區(qū)電城中學(xué)招聘合同制教師備考題庫(kù)及一套完整答案詳解
- 半年個(gè)人工作總結(jié)10篇
- 2025年浦發(fā)銀行昆明分行公開(kāi)招聘?jìng)淇碱}庫(kù)及一套參考答案詳解
- 2026年興業(yè)銀行廣州分行校園招聘?jìng)淇碱}庫(kù)及1套完整答案詳解
- 十八項(xiàng)核心制度
- 2025國(guó)考銀行結(jié)構(gòu)化面試試題及答案解析
- 2025年關(guān)于為淄博市檢察機(jī)關(guān)公開(kāi)招聘聘用制書記員的備考題庫(kù)含答案詳解
- 2025年中國(guó)科學(xué)院力學(xué)研究所SKZ專項(xiàng)辦公室人員招聘?jìng)淇碱}庫(kù)及一套答案詳解
- 2025年重慶大學(xué)工業(yè)母機(jī)創(chuàng)新研究院勞務(wù)派遣工程師招聘?jìng)淇碱}庫(kù)(長(zhǎng)期有效)完整答案詳解
- 黑龍江公安警官職業(yè)學(xué)院《戰(zhàn)略管理》2025 學(xué)年第二學(xué)期期末試卷
- 2025年大學(xué)物理考試熱力學(xué)第一定律應(yīng)用試題及答案
- JJF(黔) 76-2024 鋼筋彎曲試驗(yàn)機(jī)校準(zhǔn)規(guī)范
- 防觸電及安全用電培訓(xùn)課件
- 鉆機(jī)現(xiàn)場(chǎng)安全管理制度
- 2022安全閥在線校驗(yàn)規(guī)程
- 精準(zhǔn)分析分離與鑒定技術(shù)知到智慧樹章節(jié)測(cè)試課后答案2024年秋浙江中醫(yī)藥大學(xué)
- 軟件開(kāi)發(fā)工程師:人工智能算法工程師簡(jiǎn)歷
- 美容營(yíng)銷培訓(xùn)課程
- 外包項(xiàng)目免責(zé)協(xié)議書8篇
- 華為質(zhì)量管理手冊(cè)
- 機(jī)械加工檢驗(yàn)標(biāo)準(zhǔn)及方法
評(píng)論
0/150
提交評(píng)論