版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
SQLServer2012數(shù)據(jù)庫(kù)管理教程第8章第8章約束的創(chuàng)建與管理數(shù)據(jù)完整性概述創(chuàng)建約束禁用約束約束的重命名與刪除8.1數(shù)據(jù)完整性概述1.實(shí)體完整性實(shí)體完整性要求表中的每一行必須是唯一的,可以通過主鍵約束、唯一約束、索引或標(biāo)識(shí)屬性來實(shí)現(xiàn)。2.域完整性域完整性就是保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)取值的合理性。例如,表的某一列的任何值都是該列域的合法的有效成員。
保證域有效性的方法有:通過數(shù)據(jù)類型的定義限制數(shù)據(jù)類型,通過CHECK約束、規(guī)則、默認(rèn)值和非空屬性的定義來確定數(shù)據(jù)的格式及取值范圍。3.參照完整性參照完整性定義了一個(gè)關(guān)系數(shù)據(jù)庫(kù)的不同的表中列之間的關(guān)系(父鍵與外鍵)。要求一個(gè)表中(子表)的一列或一組列的值必須與另一個(gè)表(父表)中的相關(guān)一列或一組列的值相匹配。被引用的列或一組列稱為父鍵,父鍵必須是主鍵或唯一鍵。外鍵表是子表。如果父鍵和外鍵屬于同一個(gè)表,則稱為自參照完整性。子表的外鍵必須與主表的主鍵相匹配,只要依賴某一主鍵的外鍵存在,主表中包含該主鍵的行就不能被刪除。8.2創(chuàng)建約束一個(gè)表只能有一個(gè)PRIMARYKEY約束。包含在PRIMARYKEY約束中的列不能接受NULL值。指定為PRIMARYKEY的列中的值必須是唯一的。如果PRIMARYKEY約束包含多列,則一個(gè)列中可以出現(xiàn)重復(fù)值,但是PRIMARYKEY約束定義中的所有列值的組合必須是唯一的。8.2.1PRIMARYKEY約束PRIMARYKEY約束定義表中構(gòu)成主鍵的一列或多列。主鍵唯一標(biāo)識(shí)表中的行,并強(qiáng)制實(shí)施表的實(shí)體完整性。在實(shí)現(xiàn)PRIMARYKEY約束之前,要考慮以下事實(shí):1.利用SQLServerManagementStudio創(chuàng)建PRIMARYKEY約束1)在“對(duì)象資源管理器”窗格中,右擊要?jiǎng)?chuàng)建PRIMARYKEY約束的表,從彈出的快捷菜單中選擇“設(shè)計(jì)”命令,如下圖所示。2)接下來,在打開的表設(shè)計(jì)器中,有兩種方法可以完成主鍵設(shè)置。第一種:選擇要設(shè)置為PRIMARYKEY約束的列,然后單擊工具欄中的“設(shè)置主鍵”按鈕
即可。第二種:右擊選中的列,從彈出的快捷菜單中選擇“設(shè)置主鍵”命令,如圖所示,即可成功設(shè)置PRIMARYKEY約束。2.使用Transact-SQL語句創(chuàng)建PRIMARYKEY結(jié)束可以使用CREATETABLE和ALTERTABLE語句的表級(jí)CONSTRAINT子句創(chuàng)建PRIMARYKEY約束?!纠?-1】為jw數(shù)據(jù)庫(kù)的Class表中的ClassNo列設(shè)置PRIMARYKEY約束。USEjwGOALTERTABLEClassADDConstraint[PK_classsno]PRIMARYKEYCLUSTERED(ClassNoASC)8.2.2DEFAULT約束DEFAULT約束的作用就是當(dāng)向表中添加數(shù)據(jù)時(shí),如果某列沒有指定具體的數(shù)值而是指定了DEFAULT關(guān)鍵字,則該列值將自動(dòng)添加為默認(rèn)值。DEFAULT約束強(qiáng)制實(shí)施域完整性,是避免空值的有效方法之一。在實(shí)現(xiàn)DEFAULT約束之前,要考慮以下事實(shí):DEFAULT約束僅應(yīng)用于INSERT語句。每個(gè)列只能有一個(gè)DEFAULT約束。具有IDENTITY屬性或數(shù)據(jù)類型為rowversion的列上不可施加DEFAULT約束。DEFAULT約束允許指定某些系統(tǒng)提供的值,如USER,CURRENT_USER,SESSION_USER,SYSTEM_USER或CURRENT_TIMESTAMP,而不是用戶定義的值。在SQLServerManagementStudio中可以很容易創(chuàng)建DEFAULT約束。在表設(shè)計(jì)器中,單擊要?jiǎng)?chuàng)建DEFAULT約束的列;在出現(xiàn)的“列屬性”選項(xiàng)卡中,將“允許Null”設(shè)置為“否”;在“默認(rèn)值或綁定”右側(cè)文本框中輸入所要設(shè)置的默認(rèn)值,如右圖所示?!纠?-2】為jw數(shù)據(jù)庫(kù)的Score表中的Score列設(shè)置DEFAULT約束。USEjwGOALTERTABLEScoreADDConstraint[DF_score]DEFAULT(0.0)FORScore同樣,DEFAULT約束也可以使用CREATETABLE和ALTERTABLE語句的表級(jí)CONSTRAINT子句創(chuàng)建。8.2.3CHECK約束CHECK約束通過限制可輸入或修改的一列或多列的值來強(qiáng)制實(shí)現(xiàn)域完整性,作用于插入(INSERT)和修改(UPDATE)語句。在默認(rèn)情況下,CHECK約束同時(shí)作用于新數(shù)據(jù)和表中已有的數(shù)據(jù),可以通過WITHNOCHECK關(guān)鍵字禁止CHECK約束檢查表中已有的數(shù)據(jù)。實(shí)現(xiàn)CHECK約束之前,要考慮以下事實(shí):CHECK約束在每次執(zhí)行INSERT或UPDATE語句時(shí)驗(yàn)證數(shù)據(jù)。CHECK約束可以是返回TRUE或FALSE的任何邏輯(布爾)表達(dá)式。CHECK約束不可包含子查詢。單個(gè)列可有多個(gè)CHECK約束。CHECK約束不可施加于屬于rowversion,text,ntext或image數(shù)據(jù)類型的列。數(shù)據(jù)庫(kù)一致性檢查器(DBCC)CHECKCONSTRAINTS語句將返回包含違反CHECK約束的數(shù)據(jù)的任何行??梢允褂肧QLServerManagementStudio來創(chuàng)建CHECK約束。1)在打開的表設(shè)計(jì)器中,右擊所要設(shè)置的列名,從彈出的菜單中選擇“CHECK約束”命令,如右圖所示。2)在打開的“CHECK約束”對(duì)話框中單擊“添加”按鈕,新建一個(gè)CHECK約束,在右側(cè)“表達(dá)式”文本框中輸入CHECK約束表達(dá)式,如下圖所示?!纠?-3】使用Transact-SQL語句在jw數(shù)據(jù)庫(kù)中為Score表創(chuàng)建CHECK約束,該約束限制Score列值只允許在0~100取值。USEjwGOALTERTABLEScoreADDConstraint[CK_Score]CHECK(Score>=0ANDScore<=100)GO8.2.4UNIQUE約束UNIQUE約束用于確保數(shù)據(jù)表的實(shí)體完整性,它限制指定列的所有值都是唯一的。在創(chuàng)建UNIQUE約束之前,要考慮以下事實(shí):在帶有UNIQUE約束的列中只能出現(xiàn)一個(gè)NULL值。一個(gè)表可以有多個(gè)UNIQUE約束,但是它只能有一個(gè)主鍵。UNIQUE約束是通過對(duì)指定的一列或多列創(chuàng)建唯一索引來實(shí)施的。此索引并不能違反表最多支持249個(gè)非聚集索引的限制。如果對(duì)包含重復(fù)值數(shù)據(jù)的列創(chuàng)建UNIQUE約束,則數(shù)據(jù)庫(kù)引擎將返回錯(cuò)誤。下面介紹如何在SQLServerManagementStudio中創(chuàng)建UNIQUE約束。1)在打開的表設(shè)計(jì)器中,右擊所要設(shè)置的列名,從彈出的菜單中選擇“索引/鍵”命令,如右圖所示。2)在打開的“索引/鍵”對(duì)話框中,單擊“添加”按鈕,在右側(cè)將“類型”設(shè)置為“唯一鍵”,將“列”設(shè)置為需要?jiǎng)?chuàng)建的列,如下圖所示。完成后單擊“關(guān)閉”按鈕。同樣,UNIQUE約束也可以使用CREATETABLE和ALTERTABLE語句的表級(jí)CONSTRAINT子句創(chuàng)建?!纠?-4】使用Transact-SQL語句在jw數(shù)據(jù)庫(kù)中為Class表創(chuàng)建UNIQUE約束,保證ClassName不會(huì)出現(xiàn)重復(fù)記錄。USEjwGOALTERTABLEClassADDConstraint[IX_classname]UNIQUE(ClassName)GO8.2.5FOREIGNKEY約束FOREIGNKEY約束定義對(duì)同一個(gè)表或另一個(gè)表中具有PRIMARYKEY或UNIQUE約束的列的引用。外鍵列中的值必須出現(xiàn)在主鍵列中。當(dāng)存在對(duì)主鍵值的引用時(shí),不可更改或刪除主鍵值。在創(chuàng)建FOREIGNKEY約束之前,要考慮以下事實(shí):FOREIGNKEY約束提供了單列引用完整性和多列引用完整性,原表和引用表中引用列數(shù)及列的數(shù)據(jù)類型必須一致。FOREIGNKEY約束不會(huì)自動(dòng)創(chuàng)建索引,但如果需要,用戶可手工創(chuàng)建。在定義FOREIGNKEY約束時(shí),可以引用同一個(gè)表中的主鍵列。當(dāng)修改FOREIGNKEY約束所在表的數(shù)據(jù)時(shí),用戶必須擁有該約束所引用表的SELECT權(quán)限或REFERENCES權(quán)限??梢允褂肧QLServerManagementStudio來創(chuàng)建FOREIGNKEY約束。1)在打開的表設(shè)計(jì)器中,右擊所要設(shè)置的列名,從彈出的快捷菜單中選擇“關(guān)系”命令,如右圖所示。2)打開“外鍵關(guān)系”對(duì)話框,如下圖所示,單擊“表和列規(guī)范”文本框右側(cè)的按鈕,打開“表和列”對(duì)話框。3)在打開的“表和列”對(duì)話框中,選擇主鍵表和主鍵,并設(shè)置對(duì)應(yīng)的外鍵,如下圖所示??梢栽凇瓣P(guān)系名”文本框中修改FOREIGNKEY約束的名稱,完成后單擊“確定”按鈕?!纠?-5】使用Transact-SQL語句在jw數(shù)據(jù)庫(kù)中為Class表創(chuàng)建FOREIGNKEY約束,該約束限制DepartNo列的數(shù)據(jù)只能是Department表的DepartNo列中存在的數(shù)據(jù)。USEjwGOALTERTABLEClassADDConstraint[FK_departno]FOREIGNKEY(DepartNo)REFERENCESDepartment(DepartNo)GO使用CREATETABLE和ALTERTABLE語句的表級(jí)CONSTRAINT子句也可以創(chuàng)建FOREIGNKEY約束。8.3禁用約束需要運(yùn)行大型批處理作業(yè)或者導(dǎo)入數(shù)據(jù),并且希望優(yōu)化性能。但需要確認(rèn)數(shù)據(jù)符合相應(yīng)的約束,或者運(yùn)行查詢來確保在恢復(fù)啟用約束之前數(shù)據(jù)是準(zhǔn)確的。在已經(jīng)包含數(shù)據(jù)的表上定義約束。因此,每行數(shù)據(jù)只有在下次被修改時(shí)才會(huì)由約束進(jìn)行驗(yàn)證。在以下情況中,應(yīng)該考慮禁用約束:在向包含現(xiàn)有數(shù)據(jù)的表添加CHECK約束或FOREIGNKEY約束時(shí),若要禁用約束檢查,應(yīng)在ALTERTABLE語句中包含WITHNOCHECK選項(xiàng)。系統(tǒng)將在以后更新約束列時(shí)檢查現(xiàn)有數(shù)據(jù)?!纠?-6】禁用jw數(shù)據(jù)庫(kù)中Class表的FK_departno外鍵約束。ALTERTABLEClassNOCHECKCONSTRAINTFK_departno下面的代碼重新啟用了FK_departno約束:ALT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 游戲客服工作計(jì)劃
- 2025初三班主任班級(jí)工作計(jì)劃
- 4年度信息工作計(jì)劃
- 小學(xué)年度工作計(jì)劃范文2025年
- 幼兒園老師工作計(jì)劃報(bào)告例文
- 制定銷售計(jì)劃書范文
- 電力工程設(shè)計(jì)組織計(jì)劃
- 上證聯(lián)合研究計(jì)劃課題
- “新家庭計(jì)劃-家庭發(fā)展能力建設(shè)”工作方案
- 《歐盟與歐元》課件
- 2025屆江蘇省期無錫市天一實(shí)驗(yàn)學(xué)校數(shù)學(xué)七年級(jí)第一學(xué)期期末達(dá)標(biāo)檢測(cè)試題含解析
- 城市軌道交通運(yùn)營(yíng)管理【共30張課件】
- 鋼結(jié)構(gòu)設(shè)計(jì)智慧樹知到期末考試答案章節(jié)答案2024年山東建筑大學(xué)
- DB5334 T 12.5-2024《地理標(biāo)志證明商標(biāo) 香格里拉藏香豬》的第5部分疾病防治
- 化學(xué)機(jī)械漿與半化學(xué)機(jī)械漿
- 睡眠中心宣傳方案
- 2024春期國(guó)開電大??啤督ㄖ茍D基礎(chǔ)》在線形考(形考性考核作業(yè)一至四)試題及答案
- 論《國(guó)際貨物銷售合同公約》的適用問題
- 大型養(yǎng)路機(jī)械國(guó)內(nèi)發(fā)展
- 校服供貨服務(wù)方案
- 水利監(jiān)理工程師培訓(xùn)
評(píng)論
0/150
提交評(píng)論