版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第6章 數(shù)據(jù)完整性為了維護數(shù)據(jù)庫中的數(shù)據(jù)和現(xiàn)實世界的一致性,SQL Server提供了確保數(shù)據(jù)庫的完整性技術(shù)。數(shù)據(jù)完整性是指存儲在數(shù)據(jù)庫中的數(shù)據(jù)的一致性和準確性。強制數(shù)據(jù)完整性可以確保數(shù)據(jù)庫中的數(shù)據(jù)質(zhì)量,防止數(shù)據(jù)庫中存在不符合語義規(guī)定的數(shù)據(jù)和防止因錯誤信息的輸入輸出造成無效操作或錯誤信息。數(shù)據(jù)完整性有4種類型:實體完整性、域完整性、參照完整性和用戶自定義完整性。關(guān)系數(shù)據(jù)庫的數(shù)據(jù)與更新操作必須滿足這4種完整性規(guī)則。一、實體完整性實體完整性規(guī)定表的每一行在表中是唯一的實體。在SQL Server中,可以通過建立Primary Key約束、Unique約束來實現(xiàn)實體完整性。二、域完整性域完整性是指數(shù)
2、據(jù)庫表中的列必須滿足某種特定的數(shù)據(jù)類型或約束。在SQL Server中,可以通過建立check約束、foreign key約束和default、not null來定義域完整性。三、參照完整性 參照完整性是指兩個表的主關(guān)鍵字和外關(guān)鍵字的數(shù)據(jù)應對應一致。它確保有主關(guān)鍵字的表中對應其他表的外關(guān)鍵字的行存在,即不能引用不存在的實體。SQL Server中,可以通過建立Primary Key約束和foreign key約束來實現(xiàn)參照完整性。四、用戶自定義完整性用戶自定義完整性是針對某個特定關(guān)系數(shù)據(jù)庫的約束條件,它反映某一具體應用所涉及的數(shù)據(jù)必須滿足的語義要求。在SQL Server中,可以建立check
3、約束和default約束來實現(xiàn)用戶自定義完整性約束。6.2 創(chuàng)建和使用規(guī)則規(guī)則:對字段值進行限制的方法。6.3 創(chuàng)建約束約束就是限制的意思,跟規(guī)則用途差不多。在SQL Server2000中,約束用來限制列值,確保列的有效性,以實現(xiàn)數(shù)據(jù)完整性。一、約束類型: 主鍵約束(Primary Key):確保沒有輸入 重復值,不能為空,不能重復。可以是 一個或多字段的組合,但一個表只能有 保證數(shù)據(jù)惟一性 一個主鍵。 (實體完整性) 惟一約束(Unique):防止每一行的相關(guān) 列(非主鍵)出現(xiàn)重復值。一個表可以有 多個惟一約束。 默認值約束(Default):當INSERT語句 沒有明確提供某列的值時,指
4、定為該列 保證數(shù)據(jù)有效性 提供缺省值 。 (用戶自定義完整性) 檢查約束(Check):指定某列可接受的 值的范圍。 外鍵約束(Foreign Key):定義一列或者多 保證數(shù)據(jù)關(guān)聯(lián)性 列,其值與其他表的主鍵值匹配。 (參照完整性)約束是限制用戶輸入到表中的數(shù)據(jù)的值的范圍,一般分為列級約束與表級約束。列級約束有六種:主鍵Primary key、外鍵foreign key 、唯一 unique、檢查 checck 、默認default 、非空/空值 not null/ null表級約束有四種:主鍵、外鍵、唯一、檢查列級約束與表級約束的區(qū)別:如果完整性約束涉及到該表的多個屬性列,必須定義在表級上,
5、否則既可以定義在列級也可以定義在表級。簡而言之:列級約束:是對某一個特定列的約束,只能應用于一列上。表級約束:是獨立于列的定義,可以應用在一個表中的多列上。二、主鍵約束(primary key)primary key約束用于定義基本表的主鍵,它惟一確定表中每一條記錄,其值不能為NULL,也不能重復,以此來保證實體的完整性。具有以下特點:一個表只能建一個主鍵約束。主鍵約束可以定義在多個字段上。主鍵所在列不為空。主鍵所在列值不能重復。如果主鍵定義在多個列上,則一列中的值可以重復,但是所有列組合值必須唯一。1、創(chuàng)建primary key約束格式:constraint 約束名 primary key
6、(列,.n)形式一:創(chuàng)建列級約束Create table 學生(學號 char(6) primary key, /*列約束是對某一個特定列的約束,包含在列 姓名 char(8) not null, 定義中,直接跟在該列的其他定義之后,用空 性別 char(2), 格分隔,不必指定列名*/年齡 tinyint,身份證號 char(18)形式二:創(chuàng)建表級約束Create table 成績(學號 char(6) not null, /*表約束與列定義相互獨立,不包括在列定義中,通常課程號 char(4) not null, 用于對多個列一起進行約束,與列定義用, 分隔,成績 tinyint, 定義表
7、約束時必須指出要約束的那些列的名稱。*/Constraint pk_成績 primary key(學號,課程號)2、添加primary key約束格式: alter table 表名 Add constraint 約束名 primary key(列,,n)create table 課程(課程號 char(4) not null,課程名 varchar(18) not null,學時 tinyint,學分 real)alter table 課程add constraint pk_課程 primary key (課程號)3、刪除primary key約束格式: alter table 表名drop
8、 constraint 約束名alter table 課程drop constraint pk_課程4、用企業(yè)管理器創(chuàng)建主鍵約束數(shù)據(jù)庫數(shù)據(jù)表(右鍵)設(shè)計表選中字段(右鍵)“設(shè)置主鍵”三、惟一性約束(確保在非主鍵列中不輸入重復值)惟一性約束用于指定一個或者多個列的組合的值具有惟一性,以防止在列中輸入重復的值。unique約束是用來確保不受主鍵約束列上的數(shù)據(jù)的惟一性.當使用唯一性約束時,需要考慮以下幾個因素: 使用唯一性約束的字段允許為空值。一個表中可以允許有多個唯一性約束??梢园盐ㄒ恍约s束定義在多個字段上。注:惟一性約束允許為空,但系統(tǒng)為保證其唯一性最多只能出現(xiàn)一個NULL值。unique與pr
9、imary key的區(qū)別在于:unique約束主要用于非主鍵的一列或多列上要求數(shù)據(jù)唯一。unique約束允許該列上存在NULL值,而主鍵決不允許出現(xiàn)。可以在一個表創(chuàng)建多個unique約束,而在一個表上只能創(chuàng)建一個主鍵。1、創(chuàng)建unique約束格式:constraint 約束名 unique (列)形式一:create table 學生表(學號 char(8) primary key,姓名 char(8) not null,性別 char(2),年齡 tinyint,身份證號 char(18) unique)形式二:create table 學生表(學號 char(8) primary key,
10、姓名 char(8) not null,性別 char(2),專業(yè)名 varchar(20),年齡 tinyint,身份證號 char(18),constraint uk_cardid unique (身份證號)2、添加unique約束格式: alter table 表名 Add constraint 約束名 unique(列,,n)create table 學生表(學號 char(8) primary key, 姓名 char(8) not null,性別 char(2),年齡 tinyint,身份證號 char(18)alter table 學生表add constraint uk_nam
11、e unique (姓名)3、刪除唯一性約束格式: alter table 表名drop constraint 約束名alter table 學生表drop constraint uk_name4、用企業(yè)管理器創(chuàng)建唯一性約束數(shù)據(jù)表(右鍵)設(shè)計表選中字段(右鍵)“索引/鍵”新建選擇字段名稱,選擇復選框“創(chuàng)建unique”和“約束”關(guān)閉保存編輯框四、檢查約束(check)檢查約束對輸入列或者整個表中的值設(shè)置檢查條件,以限制輸入值,保證數(shù)據(jù)庫中數(shù)據(jù)的完整性。如,一個字段只能輸入整數(shù),而且限定在0-100的整數(shù),以此來保證域的完整性。一個表中可以定義多個檢查約束。每個create table語句中每個
12、字段只能定義一個檢查約束。在多個字段上定義檢查約束,則必須將檢查約束定義為表級約束。當執(zhí)行insert語句或者update語句時,檢查約束將驗證數(shù)據(jù)。1、創(chuàng)建check 檢查約束格式:constraint 約束名 check (條件)形式一:create table 成績表(學號 char(8) not null,課程號 char(4) not null,成績 tinyint check (成績>= 0 and 成績 <=100),constraint pk_chj primary key(學號,課程號)形式二:create table 成績表(學號 char(8) not nul
13、l,課程號 char(4) not null,成績 tinyint,constraint pk_chj primary key(學號,課程號),constraint chk_score check (成績>= 0 and 成績 <=100)2、添加check檢查約束格式:alter table 表名 Add constraint 約束名 check (條件)create table 學生表(學號 char(8) primary key,姓名 char(8) not null,性別 char(2),年齡 int,身份證號 char(18)alter table 學生表add cons
14、traint chk_sex check(性別 in ('男','女')3、刪除check檢查約束格式: alter table 表名drop constraint 約束名alter table 學生表drop constraint chk_sex4、用企業(yè)管理器創(chuàng)建檢查約束數(shù)據(jù)表(右鍵)設(shè)計表選中字段(右鍵)“check約束”新建輸入約束表達式關(guān)閉保存五、默認約束(default)默認約束指定在插入操作中如果沒有提供輸入值時,則系統(tǒng)自動指定值。使用缺省約束時,應該注意以下幾點:每個字段只能定義一個缺省約束。如果定義的缺省值長于其對應字段的允許長度,那么輸入到表
15、中的缺省值將被截斷。不能加入到帶有identity屬性或者數(shù)據(jù)類型為timestamp的字段上。1、創(chuàng)建 default 默認約束格式:constraint 約束名 default 表達式 for 字段名create table 學生表(學號 char(8) not null primary key,姓名 char(8),性別 char(2) default'女')2、添加默認約束alter table 表名Add constraint 約束名 default 表達式 for 字段名create table 學生表(學號 char(8) not null primary key
16、,姓名 char(8),性別 char(2)alter table 學生表add constraint de_sex default '女' for 性別3、刪除默認約束格式: alter table 表名drop constraint 約束名alter table 學生表drop constraint de_sex 4、用企業(yè)管理器創(chuàng)建默認約束數(shù)據(jù)表(右鍵)設(shè)計表選中字段在默認列輸入默認值六、外鍵約束(foreign key)外鍵約束用于強制參照完整性,提供單個字段或者多個字段的參照完整性。當使用外鍵約束時,應該考慮以下幾個因素:外鍵約束提供了字段參照完整性。外鍵從句中的字段
17、數(shù)目和每個字段指定的數(shù)據(jù)類型必須和reference從句中的字段相匹配。外鍵約束不能自動創(chuàng)建索引,需要用戶手動創(chuàng)建。在臨時表中,不能使用外鍵約束。主鍵和外鍵的數(shù)據(jù)類型必須嚴格匹配。1、創(chuàng)建外鍵約束語法:constraint 約束名 foreign key (列,n) references 引用表 (引用列 ,n)形式一:create table 成績表(學號 char(8) references 學生表(學號),課程號 char(4) references 課程表(課程號),成績 tinyint,constraint pk_chj primary key(學號,課程號)形式二:create t
18、able 成績表(學號 char(8) not null,課程號 char(4) not null,成績 tinyint,constraint pk_chj primary key(學號,課程號),constraint fk_學號 foreign key (學號) references 學生表(學號),constraint fk_課程號 foreign key(課程號) references課程表(課程號)2、添加外鍵約束格式:alter table 表名 Add constraint 約束名 foreign key (列,n) references引用表 (引用列 ,n)create table 成績表(學號 char(8) not null, 課程號 char(4) not null, 成績 tinyint)alter table 成績表add constraint fk_學號 foreign key (學號) references 學生表(學號)alter table 成績表constraint fk_課程號 foreign key (課程號) references 學生表(課程號)alter table 成績表a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國中間法蘭總成數(shù)據(jù)監(jiān)測研究報告
- 2025年中國高級萬用手冊市場調(diào)查研究報告
- 2025年中國五金手表配件市場調(diào)查研究報告
- 二零二五年度企業(yè)項目融資托管合作協(xié)議
- 二零二五年度足療店技師保底協(xié)議性質(zhì)與員工績效獎金發(fā)放
- 二零二五年度車貸擔保與車主俱樂部合作協(xié)議
- 二零二五年度道路交通事故賠償協(xié)議書(交通事故賠償方案及執(zhí)行)
- 二零二五年度酒店與智能酒店管理系統(tǒng)供應商合作協(xié)議
- 二零二五年度重型貨車交通事故責任認定及賠償協(xié)議
- 二零二五年度陪護病人醫(yī)療陪護與生活照料服務協(xié)議
- 無人化農(nóng)場項目可行性研究報告
- 《如何存款最合算》課件
- 社區(qū)團支部工作計劃
- 拖欠工程款上訪信范文
- 2024屆上海市金山區(qū)高三下學期二模英語試題(原卷版)
- 學生春節(jié)安全教育
- 《wifi協(xié)議文庫》課件
- 《好東西》:女作者電影的話語建構(gòu)與烏托邦想象
- 教培行業(yè)研究系列(七):出國考培的再研究供需變化的新趨勢
- GB/T 44895-2024市場和社會調(diào)查調(diào)查問卷編制指南
- 高三日語一輪復習助詞「で」的用法課件
評論
0/150
提交評論