數據約束與參照完整性課件_第1頁
數據約束與參照完整性課件_第2頁
數據約束與參照完整性課件_第3頁
數據約束與參照完整性課件_第4頁
數據約束與參照完整性課件_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數據約束與參照完整性數據約束和參照完整性在一張表中,通常存在某個字段或字段的組合唯一地表示一條記錄的現象。例如,一個學生有唯一的學號,一門課程只能有一個課程號,這就是主鍵約束。在一張表中,有時要求某些列值不能重復。例如,在課程表中,通常是不允許課程同名的,即要求課程名唯一。但由于一張表只能有一個主鍵,而且已設置了課程號為主鍵,這時可以將課程名設置為UNIQUE鍵進行約束。在關系數據庫中,表與表之間的數據是有關聯的。例如,成績表中的課程號要參照課程表的課程號,成績表的學號要參照學生表中的學號。該怎樣進行約束,使表與表之間的數據保持一致呢?任務背景數據約束和參照完整性任務要求本任務要求學習者理解主鍵(PRIMARYKEY)約束、唯一性(UNIQUE)約束、外鍵(FOREIGNKEY)參照完整性約束和CHECK約束的含義,學習創建和修改約束的方法,掌握數據約束的實際應用。PRIMARYKEY約束

PRIMARYKEY也叫主鍵??芍付?個字段作為表主鍵,也可以指定2個及2個以上字段作為復合主鍵,其值能唯一地標識表中的每一行,而且PRIMARYKEY約束中的列不能取空值。因為PRIMARYKEY約束能確保數據唯一,所以經常用來定義標志列??梢栽趧摻ū頃r創建主鍵,也可以對表中已有主鍵進行修改或者增加新的主鍵。理解PRIMARYKEY約束PRIMARYKEY約束設置主鍵通常有兩種方式:表的完整性約束和列的完整性約束設置主鍵的兩種方式【例1】創建表course1,用表的完整性約束設置主鍵。mysql>CREATETABLEIFNOTEXISTScourse1(cnoCHAR(4)NOTNULL,cnameCHAR(10),tnoCHAR(10),hoursINT,creditINT,typeVARCHAR(10),PRIMARYKEY(cno));mysql>CREATETABLEIFNOTEXISTScourse2(cnoCHAR(4)NOTNULLPRIMARYKEY,cnameCHAR(10,dnoCHAR(10),hours,creditINT,typeVARCHAR(10));【例2】創建表course2,用列的完整性約束設置主鍵。PRIMARYKEY約束復合主鍵【例3】創建表score1,用sno和cno作為復合主鍵。mysql>CREATETABLEIFNOTEXISTSscore1(snoCHAR(8)NOTNULL,cnoCHAR(4)NOTNULL,DegreeFLOAT(4,1),PRIMARYKEY(sno,cno));PRIMARYKEY約束復合主鍵【例3】創建表score1,用sno和cno作為復合主鍵。mysql>CREATETABLEIFNOTEXISTSscore1(snoCHAR(8)NOTNULL,cnoCHAR(4)NOTNULL,degreeFLOAT(4,1)DEFAULTNULL,PRIMARYKEY(sno,cno));PRIMARYKEY約束修改表的主鍵【例4】修改student表的主鍵,刪除原主鍵,設置sname為主鍵Mysql>ALTERTABLEstudentDROPPRIMARYKEYADDPRIMARYKEY(sname);UNIQUE約束理解UNIQUE約束UNIQUE約束(唯一性約束)又稱替代鍵。替代鍵是沒有被選作主鍵的候選鍵。替代鍵像主鍵一樣,是表的一列或一組列,其值在任何時候都是唯一的,可以為主鍵之外的其他字段設置UNIQUE約束。UNIQUE約束創建UNIQUE約束【例5】在TEST數據庫中,創建表employees,只包含employeeid、name、sex和education字段,用列的完整性約束的方式將name設為主鍵,用表的完整性約束的方式將employeeid設為替代鍵。mysql>CREATETABLEemployees(employeeidCHAR(6)NOTNULL,nameCHAR(10)NOTNULLPRIMARYKEY,sexTINYINT,educationCHAR(4),UNIQUE(employeeid));mysql>CREATETABLEemployees(employeeidCHAR(6)NOTNULLUNIQUE,nameCHAR(10)NOTNULLPRIMARYKEY,sexTINYINT,educationCHAR(4));也可以用列的完整性約束的方式直接在字段后面設置唯一性約束UNIQUE約束修改UNIQUE約束【例6】設置course表的cname為UNIQUE約束。Mysql>ALTERTABLEcourseADDUNIQUE(cname);分析與討論嘗試向course表中輸入同名的課程,會出現什么情況?為什么?一張數據表只能創建一個主鍵。但一張表可以有若干個UNIQUE鍵,并且它們甚至是可以重合的主鍵字段的值不允許為NULL,而UNIQUE字段的值可取NULL,但是必須使用NULL或NOTNULL聲明一般在創建PRIMARYKEY約束時,系統會自動產生PRIMARYKEY索引;創建UNIQUE約束時,系統自動產生UNIQUE索引FOREIGNKEY參照完整性約束理解參照完整性約束例如,字段sno是一個表A的屬性,且依賴于表B的主鍵,則稱表B為父表,表A為子表。通常將sno設為表A的外鍵,參照表B的主鍵字段,通過sno字段將父表B和子表A建立關聯關系。這種類型的關系就是參照完整性約束(ReferentialIntegrityConstraint)。參照完整性約束是一種特殊的完整性約束,實現為一個外鍵,外鍵是表的一個特殊字段在gradem數據庫中,存儲在score表中的所有sno必須存在于student表的學號列中,score表中的所有cno也必須出現在course表的課程號列中,因此,應該將score表中的sno列定義外鍵參照student表的學號,cno列定義外鍵參照course表的課程號FOREIGNKEY參照完整性約束外鍵的作用是建立子表與其父表的關聯關系,保證子表與父表關聯的數據的一致性。父表中更新或刪除某條信息時,子表中與之對應的信息也必須有相應的改變可以在創建表或修改表時定義一個外鍵聲明這里僅列出reference_definition的語法格式reference_definition的語法格式如下:REFERENCEStbl_name[(index_col_name,...)][ONDELETE{RESTRICT|CASCADE|SETNULL|NOACTION}][ONUPDATE{RESTRICT|CASCADE|SETNULL|NOACTION}]FOREIGNKEY參照完整性約束在創建表時創建外鍵【例7】在TEST數據庫中創建salary表,包含employeeid、income和outcome字段,其中employeeid作為外鍵,參照【例5】中的employees表的employeeid字段。mysql>CREATETABLEsalary(employeeidCHAR(6)NOTNULLPRIMARYKEY,incomeFLOAT(8)NOTNULL,outcomeFLOAT(8)NOTNULL,FOREIGNKEY(employeeid)referencesemployees(employeeid)ONUPDATECASCADEONDELETECASCADE);FOREIGNKEY參照完整性約束對已有的表添加外鍵【例8】創建一個與salary表結構相同的salary1表,用ALTERTABLE語句向salary1表中的employeeid列添加一個外鍵,要求當employees表中要刪除或修改與employeeid值有關的行時,檢查salary1表中有沒有該employeeid值,如果存在則拒絕更新employees表。mysql>ALTERTABLEsalary1ADDFOREIGNKEY(employeeid)REFERENCESemployees(employeeid)ONUPDATERISTRICTONDELETERISTRICT;CHECK約束理解CHECK約束主鍵、替代鍵和外鍵都是常見的完整性約束的例子。但是,每個數據庫還有一些專用的完整性約束例如,score表中report字段的數值要在0~100,students表中出生日期必須大于1990年1月1日。這樣的規則可以使用CHECK約束來指定。constraintCHECK完整性約束在創建表的時候定義,可以定義為列完整性約束,也可以定義為表完整性約束。語法格式如下:

constraintCHECK(expr)CHECK約束理解CHECK約束【例9】在TEST數據庫中,創建表employees3,包含學號、性別和出生日期字段。其中,出生日期必須大于1980年1月1日,性別只能是“男”或“女”。mysql>CREATETABLEemployees3(e_idCHAR(5)NOTNULLPRIMARYKEY,sexCHAR(2)DEFAULT'男',birthDATENOTNULL,CHECK(sex='男'ORsex='女')CHECK(bir

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論