




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2023/2/3MicrosoftSQLServer20051數據完整性在SQLServer2005中,根據數據完整措施所作用的數據庫對象和范圍不同,可以將數據完整性分為以下幾種:1、實體完整性(主鍵、唯一性約束)2、參照完整性(外鍵約束)3、域完整性(check、默認值約束)4、用戶定義的完整性2023/2/3MicrosoftSQLServer20052主鍵(PRIMARYKEY)約束
主鍵約束使用數據表中的一列數據或者多列數據來唯一的標識一行數據。也就是說,在數據表中不能存在主鍵相同的兩行數據,而且主鍵約束下的列不能為空(NULL),在創建表時,最好每個數據表都擁有自己唯一的主鍵,主鍵也可以由幾個列組合成。每個表只能有一個主鍵。不能定義TEXT或IMAGE數據類型的字段列為主鍵。2023/2/3MicrosoftSQLServer20053SSMS創建主鍵的步驟①在創建表結構的時候,選定列名或列名組合(shift鍵),在所選列上右擊彈出相應菜單,如右圖所示。②單擊有鑰匙圖標的菜單項。③創建成功后該列名前出現一個小鑰匙形狀的圖標如右圖所示。2023/2/3MicrosoftSQLServer20054創建表時定義主鍵CREATETABLETb_Class(ClassIdchar(8)PRIMARYKEY,ClassNamevarchar(30)NOTNULL,DeptIdchar(2)NOTNULL,ClassStuNumberint)------------------------------------------------------------------------CREATETABLETb_Class(ClassIdchar(8)NOTNULL,ClassNamevarchar(30)NOTNULL,DeptIdchar(2)NOTNULL,ClassStuNumberint,CONSTRAINTPK_ClassIdPRIMARYKEY(ClassId,ClassName))2023/2/3MicrosoftSQLServer20055向已有表中添加主鍵
先創建一個無主鍵的表CREATETABLETb_Class(ClassIdchar(8)NOTNULL,ClassNamevarchar(30)NOTNULL,DeptIdchar(2)NOTNULL,ClassStuNumberint)
再給相應的列(ClassId)添加主鍵約束ALTERTABLETb_ClassADDCONSTRAINTPK_ClassIdPRIMARYKEY(ClassId)--------------------------------------------------------------------------------
刪除主鍵約束ALTERTABLETb_ClassDROPCONSTRAINTPK_ClassIdPRIMARYKEY(ClassId)2023/2/3MicrosoftSQLServer20056外鍵(ForeignKey)約束
外鍵約束定義了表之間的關系,主要用來維護兩個表之間的一致性。出于某種關聯的需要,當一個表需要引用另一個表的主鍵作為自己的一個字段時,我們稱這個引用來的字段為外鍵。這樣,當主鍵更新或刪除時,其它所有表中與這個主鍵關聯的外鍵也將被相應的更新或刪除。當向外鍵所在的表插入或更新數據(外鍵字段)時,如果與外鍵表相關聯的主鍵表的主鍵中無與插入或更新的外鍵有相同的值時,系統會報錯并拒絕插入或更新數據。不能定義TEXT或IMAGE數據類型的列為外鍵。2023/2/3MicrosoftSQLServer20057外鍵約束2023/2/3MicrosoftSQLServer20058外鍵約束2023/2/3MicrosoftSQLServer20059在創建表時定義外鍵約束CREATETABLETb_Dept(DeptIdchar(2)PRIMARYKEY,DeptNamevarchar(16)NOTNULL)------------------------------------------------------------------------CREATETABLETb_Student(StuIdchar(10)PRIMARYKEY,StuNamechar(8)NOTNULL,DeptIdchar(2)NOTNULL,
CONSTRAINTFK_DeptIdFOREIGNKEY(DeptId)REFERENCESTb_Dept(DeptId))2023/2/3MicrosoftSQLServer200510上述創建外鍵約束的語句可以簡化為如下形式:------------------------------------------------------------------------CREATETABLETb_Student(StuIdchar(10)PRIMARYKEY,StuNamechar(8)NOTNULL,DeptIdchar(2)
NOTNULL
REFERENCESTb_Dept)------------------------------------------------------------------------從添加外鍵約束時只需添加REFERENCES關鍵字和被引用的表名。這里需要注意的是,外鍵列和被引用表中的主鍵列應該名稱相同,且具有相同的列數據類型。在創建表時定義外鍵約束2023/2/3MicrosoftSQLServer200511級聯更新、刪除CREATETABLETb_Student(StuIdchar(10)PRIMARYKEY,StuNamechar(8)NOTNULL,DeptIdchar(2)NOTNULL
REFERENCESTb_DeptONUPDATECASCADEONDELETECASCADE)------------------------------------------------------------------------CREATETABLETb_Student(StuIdchar(10)PRIMARYKEY,StuNamechar(8)NOTNULL,DeptIdchar(2)NOTNULL,
CONSTRAINTFK_DeptIdFOREIGNKEY(DeptId)REFERENCESTb_Dept(DeptId)ONUPDATECASCADEONDELETECASCADE)2023/2/3MicrosoftSQLServer200512添加和刪除外鍵約束
先創建一個無外鍵的表CREATETABLETb_Student(StuIdchar(10)PRIMARYKEY,StuNamechar(8)NOTNULL,DeptIdchar(2)NOTNULL)
再給相應的列(DeptId)添加外鍵約束ALTERTABLETb_StudentADDCONSTRAINTFK_DeptIdFOREIGNKEY(DeptId)REFERENCESTb_Dept(DeptId)--------------------------------------------------------------------------------
刪除外鍵約束ALTERTABLETb_StudentDROPCONSTRAINTFK_DeptId2023/2/3MicrosoftSQLServer200513SSMS設置外鍵約束2023/2/3MicrosoftSQLServer200514SSMS設置外鍵約束2023/2/3MicrosoftSQLServer200515SSMS設置外鍵約束2023/2/3MicrosoftSQLServer200516外鍵約束的作用修改父表主鍵時檢查刪除父表記錄時檢查在子表中插入數據時檢查(外鍵)2023/2/3MicrosoftSQLServer200517參照完整性(外鍵約束)參照完整性是指兩個表的主關鍵字(PRIMARYKEY)和外關鍵字(FOREIGNKEY)的數據要對應一致。它確保了有主關鍵字的表中對應其它表的外關鍵字的行存在,即保證了表之間的數據的一致性,防止了數據丟失或無意義的數據在數據庫中擴散。參照完整性是建立在外關鍵字和主關鍵字之上的。這樣的一致性要求不能引用不存在的值,如果鍵值更改了,那么在整個數據庫中,對該鍵值的所有引用要進行一致的更改。在被參照表(主表)中,當其主鍵值被其他表所參照時,該行不能被刪除也不允許改變。在參照表(從表)中,不允許參照不存在的主鍵值。2023/2/3MicrosoftSQLServer200518唯一性(UNIQUE)約束可以使用UNIQUE約束確保在非主鍵列中不輸入重復的值。盡管UNIQUE約束和PRIMARYKEY約束都強制唯一性,但想要強制一列或多列組合(不是主鍵)的唯一性時應使用UNIQUE約束而不是PRIMARYKEY約束。可以對一個表定義多個UNIQUE約束,但只能定義一個PRIMARYKEY約束。而且,UNIQUE約束允許NULL值,這一點與PRIMARYKEY約束不同。不過,當與參與UNIQUE約束的任何值一起使用時,每列只允許一個空值。FOREIGNKEY約束可以引用UNIQUE約束。2023/2/3MicrosoftSQLServer200519創建表時,可以創建UNIQUE約束作為表定義的一部分。如果表已經存在,可以添加UNIQUE約束(假設組成UNIQUE約束的列或列組合僅包含唯一的值)。一個表可含有多個UNIQUE約束。若要修改UNIQUE約束,必須首先刪除現有的UNIQUE約束,然后用新定義重新創建。默認情況下,向表中的現有列添加UNIQUE約束后,SQLServer2005DatabaseEngine
將檢查列中的現有數據,以確保所有值都是唯一的。如果向含有重復值的列添加UNIQUE約束,數據庫引擎
將返回錯誤消息,并且不添加約束。除非顯式指定了聚集索引,否則,默認情況下將創建唯一的非聚集索引以強制執行UNIQUE約束。唯一性約束2023/2/3MicrosoftSQLServer200520創建表時創建UNIQUE約束CREATETABLETb_Student(StuIdchar(10)PRIMARYKEY,StuNamechar(8)NOTNULLUNIQUENONCLUSTERED,DeptIdchar(2)NOTNULL
REFERENCESTb_Dept)--------------------------------------------------------------------------------CREATETABLETb_Student(StuIdchar(10)PRIMARYKEY,StuNamechar(8)NOTNULL,DeptIdchar(2)NOTNULLREFERENCESTb_Dept,
CONSTRAINTUK_StuNameUNIQUE(StuName))2023/2/3MicrosoftSQLServer200521創建表結束后添加、刪除UNIQUE約束CREATETABLETb_Student(StuIdchar(10)PRIMARYKEY,StuNamechar(8)NOTNULL,DeptIdchar(2)NOTNULL
REFERENCESTb_Dept)------------------------------------------------------------------------添加UNIQUE約束ALTERTABLETb_StudentADDCONSTRAINTUK_DepNameUNIQUE(DeptName)------------------------------------------------------------------------刪除UNIQUE約束ALTERTABLETb_StudentDROPCONSTRAINTUK_DepName2023/2/3MicrosoftSQLServer200522SSMS創建惟一約束右擊表名稱,選擇快捷菜單中的“設計”,進入表結構修改狀態。單擊工具欄處“管理索引和鍵”按鈕,進入惟一約束設置界面,單擊添加按鈕,定義類型為“唯一鍵”選定惟一約束的列,為惟一約束定義標識名,完成后關閉窗體。2023/2/3MicrosoftSQLServer200523默認值約束如果插入行時沒有為列指定值,默認值則指定列中使用什么值。默認值可以是計算結果為常量的任何值,例如常量、內置函數或數學表達式。若要應用默認值,可以通過在CREATETABLE中使用DEFAULT關鍵字來創建默認值定義。這將為每一列分配一個常量表達式作為默認值。默認值必須與要應用DEFAULT定義的列的數據類型相配。例如,int列的默認值必須是整數,而不能是字符串。后續版本的MicrosoftSQLServer將刪除該功能。請避免在新的開發工作中使用該功能,并應著手修改當前還在使用該功能的應用程序。2023/2/3MicrosoftSQLServer200524CREATETABLETb_Student(StuIdchar(10)PRIMARYKEY,StuNamechar(8)NOTNULL,DeptIdchar(2)NOTNULL
REFERENCESTb_Dept,Sexchar(2)NOTNULL
DEFAULT‘M’,BIRTHDAYSMALLDATETIME
NOTNULL
DEFAULT
getdate())添加和刪除默認值約束----------------------------------------------------ALTERTABLETb_StudentADDCONSTRAINTDEF_SexDEFAULT‘M’FORSex----------------------------------------------------------------------------------ALTERTABLETb_StudentDROPCONSTRAINTDEF_Sex默認值約束2023/2/3MicrosoftSQLServer200525SSMS中設置默認值約束2023/2/3MicrosoftSQLServer200526CHECK約束通過限制列可接受的值,CHECK約束可以強制域的完整性。此類約束類似于FOREIGNKEY約束,因為可以控制放入列中的值。但是,它們在確定有效值的方式上有所不同:FOREIGNKEY約束從其他表獲得有效值列表,而CHECK約束通過不基于其他列中的數據的邏輯表達式確定有效值。例如,可以通過創建CHECK約束將成績列中值的范圍限制為從0到100之間的數據。這將防止輸入的成績值超出正常的成績范圍。可以通過任何基于邏輯運算符返回TRUE或FALSE的邏輯(布爾)表達式創建CHECK約束。對于上面的示例,邏輯表達式為:grade>=0ANDgrade<=100。可以將多個CHECK約束應用于單個列。還可以通過在表級創建CHECK約束,將一個CHECK約束應用于多個列。2023/2/3MicrosoftSQLServer200527創建表時,可以創建CHECK約束作為表定義的一部分。如果表已經存在,則可以添加CHECK約束。表和列可以包含多個CHECK約束。如果CHECK約束已經存在,則可以修改或刪除該約束。例如,可能需要修改表中某列的CHECK約束使用的表達式。
注意:必須首先刪除現有的CHECK約束,然后使用新定義重新創建,才能修改CHECK約束。向現有表中添加CHECK約束后,CHECK約束可以僅應用于新數據,也可以應用于現有數據。默認情況下,CHECK約束同時應用于現有數據和所有新數據。使用ALTERTABLE語句的WITHNOCHECK選項可以將新約束僅應用于新添加的數據。如果現有數據已符合新的CHECK約束時,或業務規則要求僅從此開始強制約束時,則可以使用此選項。CHECK約束2023/2/3MicrosoftSQLServer200528CREATETABLETb_Student(StuIdchar(10)PRIMARYKEY,StuNamechar(8)NOTNULL,DeptIdchar(2)NOTNULL
REFERENCESTb_Dept,Sexchar(2)NOTNULL
DEFAULT‘M’CHECK(SexIN(‘M’,’F’)),ZipCodechar(6)NOTNULL
CHECK(ZipCodelike‘[0-9][0-9][0-9][0-9][0-9][0-9]’),CONSTRAINTCK_StuIdCHECK(StuIdlike‘S[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’))創建表時創建CHECK約束
2023/2/3MicrosoftSQLServer200529其它例子CHECK(CourseScore>=0andCourseScore<=100)CHECK(EmpIdLIKE'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]'OREmpIdLIKE'[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]')CHECK(TelNoIN('86022679','86022235','86022879','86022886','86028225')ORTelNoLIKE'860221[0-9][0-9]')CHECK(SalaryBETWEEN3000AND10000)CHECK(IS_MANAGER=1ANDSex='F')CHECK(CASEWHENIs_Manager<>1ANDSex='F'THEN1ELSE0END=0)
2023/2/3MicrosoftSQLServer200530添加和刪除CHECK約束
添加CHECK約束ALTERTABLETb_StudentWITHNOCHECK
ADDCONSTRAINTCK_SexCHECK(SexIN('M','F'));
刪除CHECK約束ALTERTABLETb_StudentDROP
CONSTRAINTCK_Sex
2023/2/3Micr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年福建省醫學科學研究院招聘筆試真題
- 校長個人在家長會的發言稿(8篇)
- 理解數據庫共享與隔離特性試題及答案
- 門供貨安裝合同范本(10篇)
- 網絡信息安全防護解決服務合同
- 采購年度工作總結個人簡短(9篇)
- 軟件測試人員在項目中的責任與角色定位分析試題及答案
- 行政組織的數字技術應用及試題答案
- 心理學壓力管理策略知識要點
- 連人帶車合同協議書
- 五臟排毒課件
- 2024年系統分析師各章節重要考點及試題及答案
- 2025年航空知識競賽必考題庫及答案(共60題)
- 金融專業畢業論文范文
- 2020-2025年中國果蔬保鮮行業投資潛力分析及行業發展趨勢報告
- TSG21-2025固定式壓力容器安全技術(送審稿)
- DB2107-T 0011-2023 多旋翼無人機道路巡查疏導作業規范
- LY/T 3398-2024草原等級評定技術規程
- 廣西河池市(2024年-2025年小學六年級語文)部編版期中考試(下學期)試卷及答案
- 2025年日歷(日程安排-可直接打印)
- 【MOOC】心理學-華南師范大學 中國大學慕課MOOC答案
評論
0/150
提交評論