




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、SQL Server 2012數據庫管理教程第第8章章第8 8章 約束的創建與管理數據完整性概述創建約束禁用約束約束的重命名與刪除8 8.1 .1 數據完整性概述1 1實體完整性實體完整性要求表中的每一行必須是唯一的,可以通過主鍵約束、唯一約束、索引或標識屬性來實現。2 2域完整性域完整性就是保證數據庫中的數據取值的合理性。例如,表的某一列的任何值都是該列域的合法的有效成員。 保證域有效性的方法有:通過數據類型的定義限制數據類型,通過CHECKCHECK約束、規則、默認值和非空屬性的定義來確定數據的格式及取值范圍。3 3參照完整性參照完整性定義了一個關系數據庫的不同的表中列之間的關系(父鍵與外
2、鍵)。要求一個表中(子表)的一列或一組列的值必須與另一個表(父表)中的相關一列或一組列的值相匹配。被引用的列或一組列稱為父鍵,父鍵必須是主鍵或唯一鍵。外鍵表是子表。如果父鍵和外鍵屬于同一個表,則稱為自參照完整性。子表的外鍵必須與主表的主鍵相匹配,只要依賴某一主鍵的外鍵存在,主表中包含該主鍵的行就不能被刪除。8 8.2 .2 創建約束一個表只能有一個PRIMARY KEYPRIMARY KEY約束。包含在PRIMARY KEYPRIMARY KEY約束中的列不能接受NULLNULL值。指定為PRIMARY KEYPRIMARY KEY的列中的值必須是唯一的。如果PRIMARY KEYPRIMAR
3、Y KEY約束包含多列,則一個列中可以出現重復值,但是PRIMARY KEYPRIMARY KEY約束定義中的所有列值的組合必須是唯一的。8.2.1 PRIMARY KEY8.2.1 PRIMARY KEY約束PRIMARY KEYPRIMARY KEY約束定義表中構成主鍵的一列或多列。主鍵唯一標識表中的行,并強制實施表的實體完整性。在實現PRIMARY KEYPRIMARY KEY約束之前,要考慮以下事實:1 1利用SQL Server Management StudioSQL Server Management Studio創建PRIMARY KEYPRIMARY KEY約束1 1)在“對
4、象資源管理器”窗格中,右擊要創建PRIMARY KEYPRIMARY KEY約束的表,從彈出的快捷菜單中選擇“設計”命令,如下圖所示。2 2)接下來,在打開的表設計器中,有兩種方法可以完成主鍵設置。第一種:選擇要設置為PRIMARY KEYPRIMARY KEY約束的列,然后單擊工具欄中的“設置主鍵”按鈕 即可。第二種:右擊選中的列,從彈出的快捷菜單中選擇“設置主鍵”命令,如圖所示,即可成功設置PRIMARY KEYPRIMARY KEY約束。2 2使用Transact-SQLTransact-SQL語句創建PRIMARY KEYPRIMARY KEY結束可以使用CREATE TABLECRE
5、ATE TABLE和ALTER TABLEALTER TABLE語句的表級CONSTRAINTCONSTRAINT子句創建PRIMARY KEYPRIMARY KEY約束。【例8-18-1】為jwjw數據庫的ClassClass表中的ClassNoClassNo列設置PRIMARY KEYPRIMARY KEY約束。USE jwUSE jwGOGOALTER TABLE ClassALTER TABLE Class ADD Constraint PK_classsno PRIMARY KEY CLUSTERED ADD Constraint PK_classsno PRIMARY KEY CL
6、USTERED (ClassNo ASC) (ClassNo ASC)8.2.2 DEFAULT8.2.2 DEFAULT約束DEFAULTDEFAULT約束的作用就是當向表中添加數據時,如果某列沒有指定具體的數值而是指定了DEFAULTDEFAULT關鍵字,則該列值將自動添加為默認值。DEFAULTDEFAULT約束強制實施域完整性,是避免空值的有效方法之一。在實現DEFAULTDEFAULT約束之前,要考慮以下事實:DEFAULTDEFAULT約束僅應用于INSERTINSERT語句。每個列只能有一個DEFAULTDEFAULT約束。具有IDENTITYIDENTITY屬性或數據類型為ro
7、wversionrowversion的列上不可施加DEFAULTDEFAULT約束。DEFAULTDEFAULT約束允許指定某些系統提供的值,如USERUSER,CURRENT_USERCURRENT_USER,SESSION_USERSESSION_USER,SYSTEM_USERSYSTEM_USER或CURRENT_TIMESTAMPCURRENT_TIMESTAMP,而不是用戶定義的值。在SQL Server Management SQL Server Management StudioStudio中可以很容易創建DEFAULTDEFAULT約束。在表設計器中,單擊要創建DEFAULT
8、DEFAULT約束的列;在出現的“列屬性”選項卡中,將“允許NullNull”設置為“否”;在“默認值或綁定”右側文本框中輸入所要設置的默認值,如右圖所示。【例8-28-2】為jwjw數據庫的ScoreScore表中的ScoreScore列設置DEFAULTDEFAULT約束。USE jwUSE jwGOGOALTER TABLE ScoreALTER TABLE Score ADD Constraint DF_score DEFAULT(0.0) ADD Constraint DF_score DEFAULT(0.0) FOR Score FOR Score同樣,DEFAULTDEFAULT
9、約束也可以使用CREATE TABLECREATE TABLE和ALTER TABLEALTER TABLE語句的表級CONSTRAINTCONSTRAINT子句創建。8.2.3 CHECK8.2.3 CHECK約束CHECKCHECK約束通過限制可輸入或修改的一列或多列的值來強制實現域完整性,作用于插入(INSERTINSERT)和修改(UPDATEUPDATE)語句。在默認情況下,CHECKCHECK約束同時作用于新數據和表中已有的數據,可以通過WITH NOCHECKWITH NOCHECK關鍵字禁止CHECKCHECK約束檢查表中已有的數據。實現CHECKCHECK約束之前,要考慮以下
10、事實:CHECKCHECK約束在每次執行INSERTINSERT或UPDATEUPDATE語句時驗證數據。CHECKCHECK約束可以是返回TRUETRUE或FALSEFALSE的任何邏輯(布爾)表達式。CHECKCHECK約束不可包含子查詢。單個列可有多個CHECKCHECK約束。CHECKCHECK約束不可施加于屬于rowversionrowversion,texttext,ntextntext或imageimage數據類型的列。數據庫一致性檢查器(DBCCDBCC)CHECK CONSTRAINTSCHECK CONSTRAINTS語句將返回包含違反CHECKCHECK約束的數據的任何行
11、。可以使用SQL Server SQL Server Management StudioManagement Studio來創建CHECKCHECK約束。1 1)在打開的表設計器中,右擊所要設置的列名,從彈出的菜單中選擇“CHECKCHECK約束”命令,如右圖所示。2 2)在打開的“CHECKCHECK約束”對話框中單擊“添加”按鈕,新建一個CHECKCHECK約束,在右側“表達式”文本框中輸入CHECKCHECK約束表達式,如下圖所示。【例8-38-3】使用Transact-SQLTransact-SQL語句在jwjw數據庫中為ScoreScore表創建CHECKCHECK約束,該約束限制S
12、coreScore列值只允許在0 0100100取值。USE jwUSE jwGOGOALTER TABLE ScoreALTER TABLE Score ADD Constraint CK_Score CHECK (Score=0 AND Score=0 AND Score=100)GOGO8.2.4 UNIQUE8.2.4 UNIQUE約束UNIQUEUNIQUE約束用于確保數據表的實體完整性,它限制指定列的所有值都是唯一的。在創建UNIQUEUNIQUE約束之前,要考慮以下事實:在帶有UNIQUEUNIQUE約束的列中只能出現一個NULLNULL值。一個表可以有多個UNIQUEUNIQU
13、E約束,但是它只能有一個主鍵。UNIQUEUNIQUE約束是通過對指定的一列或多列創建唯一索引來實施的。此索引并不能違反表最多支持249249個非聚集索引的限制。如果對包含重復值數據的列創建UNIQUEUNIQUE約束,則數據庫引擎將返回錯誤。下面介紹如何在SQL Server SQL Server Management StudioManagement Studio中創建UNIQUEUNIQUE約束。1 1)在打開的表設計器中,右擊所要設置的列名,從彈出的菜單中選擇“索引/ /鍵”命令,如右圖所示。2 2)在打開的“索引/ /鍵”對話框中,單擊“添加”按鈕,在右側將“類型”設置為“唯一鍵”,
14、將“列”設置為需要創建的列,如下圖所示。完成后單擊“關閉”按鈕。同樣,UNIQUEUNIQUE約束也可以使用CREATE TABLECREATE TABLE和ALTER TABLEALTER TABLE語句的表級CONSTRAINTCONSTRAINT子句創建。【例8-48-4】使用Transact-SQLTransact-SQL語句在jwjw數據庫中為ClassClass表創建UNIQUEUNIQUE約束,保證ClassNameClassName不會出現重復記錄。USE jwUSE jwGOGOALTER TABLE ClassALTER TABLE Class ADD Constraint
15、 IX_classname UNIQUE (ClassName) ADD Constraint IX_classname UNIQUE (ClassName)GOGO8.2.5 FOREIGN KEY8.2.5 FOREIGN KEY約束FOREIGN KEYFOREIGN KEY約束定義對同一個表或另一個表中具有PRIMARY KEYPRIMARY KEY或UNIQUEUNIQUE約束的列的引用。外鍵列中的值必須出現在主鍵列中。當存在對主鍵值的引用時,不可更改或刪除主鍵值。在創建FOREIGN KEYFOREIGN KEY約束之前,要考慮以下事實:FOREIGN KEYFOREIGN KEY
16、約束提供了單列引用完整性和多列引用完整性,原表和引用表中引用列數及列的數據類型必須一致。FOREIGN KEYFOREIGN KEY約束不會自動創建索引,但如果需要,用戶可手工創建。在定義FOREIGN KEYFOREIGN KEY約束時,可以引用同一個表中的主鍵列。當修改FOREIGN KEYFOREIGN KEY約束所在表的數據時,用戶必須擁有該約束所引用表的SELECTSELECT權限或REFERENCESREFERENCES權限。可以使用SQL Server SQL Server Management StudioManagement Studio來創建FOREIGN KEYFOREI
17、GN KEY約束。1 1)在打開的表設計器中,右擊所要設置的列名,從彈出的快捷菜單中選擇“關系”命令,如右圖所示。2 2)打開“外鍵關系”對話框,如下圖所示,單擊“表和列規范”文本框右側的按鈕,打開“表和列”對話框。3 3)在打開的“表和列”對話框中,選擇主鍵表和主鍵,并設置對應的外鍵,如下圖所示。可以在“關系名”文本框中修改FOREIGN KEYFOREIGN KEY約束的名稱,完成后單擊“確定”按鈕。【例8-58-5】 使用Transact-SQLTransact-SQL語句在jwjw數據庫中為ClassClass表創建FOREIGN KEYFOREIGN KEY約束,該約束限制Depar
18、tNoDepartNo列的數據只能是DepartmentDepartment表的DepartNoDepartNo列中存在的數據。USE jwUSE jwGOGOALTER TABLE ClassALTER TABLE Class ADD Constraint FK_departno ADD Constraint FK_departno FOREIGN KEY (DepartNo) FOREIGN KEY (DepartNo) REFERENCES Department(DepartNo) REFERENCES Department(DepartNo)GOGO使用CREATE TABLECREA
19、TE TABLE和ALTER TABLEALTER TABLE語句的表級CONSTRAINTCONSTRAINT子句也可以創建FOREIGN KEYFOREIGN KEY約束。8 8.3 .3 禁用約束需要運行大型批處理作業或者導入數據,并且希望優化性能。但需要確認數據符合相應的約束,或者運行查詢來確保在恢復啟用約束之前數據是準確的。在已經包含數據的表上定義約束。因此,每行數據只有在下次被修改時才會由約束進行驗證。在以下情況中,應該考慮禁用約束:在向包含現有數據的表添加CHECKCHECK約束或FOREIGN KEYFOREIGN KEY約束時,若要禁用約束檢查,應在ALTER TABLEALTER TABLE語句中包含WITH NOCHECKWITH NOCHECK選項。系統將在以后更新約束列時檢查現有數據。【例8
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化產業管理證書獲取的路徑試題及答案
- 藥劑學考試命題規律及試題及答案
- 藥物罐考試題及答案
- 育嬰師的倫理責任研究試題及答案
- 藥劑學的學術研究考核試題及答案
- 系統架構設計的評估方法考題試題及答案
- 西醫臨床考生復習必讀試題及答案
- 激光加工設備的選型試題及答案
- 藥劑學備考期間需關注的細節試題及答案
- 獲取文化產業管理證書的試題及答案
- 浙江省七彩陽光新高考研究聯盟2023-2024學年高二下學期期中聯考地理試題2
- 全國賽課一等獎人美版美術四年級下冊《植物寫生》課件
- 【《城市文化與城市可持續發展探究:以S市為例》10000字(論文)】
- 包工頭和建筑工人雇傭協議
- 醫學教程 常見肺炎的影像診斷
- 人教版五年級英語單詞
- 建設工程管理畢業實踐報告
- 學校“五項管理”工作方案
- 2025年高中數學學業水平(合格考)知識點
- 大象版科學三年級下冊全冊練習題(含答案)
- GB/T 23863-2024博物館照明設計規范
評論
0/150
提交評論