最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

MSSQL之七數(shù)據(jù)完整性

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 16:31:00
文檔

MSSQL之七數(shù)據(jù)完整性

MSSQL之七數(shù)據(jù)完整性:無論是產(chǎn)品,還是信息,質(zhì)量都是非常重要的。信息的質(zhì)量是指信息的準(zhǔn)確性、完整性、一致性等。在許多數(shù)據(jù)庫應(yīng)用系統(tǒng)中,數(shù)據(jù)質(zhì)量的高低往往是導(dǎo)致系統(tǒng)成功與否的重要因素。數(shù)據(jù)完整性是保證數(shù)據(jù)質(zhì)量的一種重要方法,是現(xiàn)代數(shù)據(jù)庫系統(tǒng)的一個(gè)重要特征。 Micro
推薦度:
導(dǎo)讀MSSQL之七數(shù)據(jù)完整性:無論是產(chǎn)品,還是信息,質(zhì)量都是非常重要的。信息的質(zhì)量是指信息的準(zhǔn)確性、完整性、一致性等。在許多數(shù)據(jù)庫應(yīng)用系統(tǒng)中,數(shù)據(jù)質(zhì)量的高低往往是導(dǎo)致系統(tǒng)成功與否的重要因素。數(shù)據(jù)完整性是保證數(shù)據(jù)質(zhì)量的一種重要方法,是現(xiàn)代數(shù)據(jù)庫系統(tǒng)的一個(gè)重要特征。 Micro

無論是產(chǎn)品,還是信息,質(zhì)量都是非常重要的。信息的質(zhì)量是指信息的準(zhǔn)確性、完整性、一致性等。在許多數(shù)據(jù)庫應(yīng)用系統(tǒng)中,數(shù)據(jù)質(zhì)量的高低往往是導(dǎo)致系統(tǒng)成功與否的重要因素。數(shù)據(jù)完整性是保證數(shù)據(jù)質(zhì)量的一種重要方法,是現(xiàn)代數(shù)據(jù)庫系統(tǒng)的一個(gè)重要特征。 Micros

無論是產(chǎn)品,還是信息,質(zhì)量都是非常重要的。信息的質(zhì)量是指信息的準(zhǔn)確性、完整性、一致性等。在許多數(shù)據(jù)庫應(yīng)用系統(tǒng)中,數(shù)據(jù)質(zhì)量的高低往往是導(dǎo)致系統(tǒng)成功與否的重要因素。數(shù)據(jù)完整性是保證數(shù)據(jù)質(zhì)量的一種重要方法,是現(xiàn)代數(shù)據(jù)庫系統(tǒng)的一個(gè)重要特征。

Microsoft SQL Server 2008系統(tǒng)提供了一系列的數(shù)據(jù)完整性方法和機(jī)制,例如約束、觸發(fā)器等。其中,約束技術(shù)是應(yīng)用最為廣泛的數(shù)據(jù)完整性方法。

重點(diǎn)

? 約束概念和類型

? DEFAULT約束

? CHECK約束

? 主鍵約束

? UNIQUE約束

? 外鍵約束

預(yù)習(xí)功課

? 約束的概念和類型

? 管理約束

數(shù)據(jù)完整性簡介

數(shù)據(jù)庫系統(tǒng)實(shí)際上就是計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)的一個(gè)倉庫,系統(tǒng)用戶可以對(duì)這些存儲(chǔ)起來的數(shù)據(jù)進(jìn)行一系列的操作。數(shù)據(jù)完整性就是指存儲(chǔ)在數(shù)據(jù)庫中的數(shù)據(jù)的一致性和準(zhǔn)確性。在評(píng)價(jià)數(shù)據(jù)庫的設(shè)計(jì)時(shí),數(shù)據(jù)完整性的設(shè)計(jì)是數(shù)據(jù)庫設(shè)計(jì)好壞的一項(xiàng)重要指標(biāo)。在Microsoft SQLServer 2008系統(tǒng)中,有3種數(shù)據(jù)完整性類型,即:域完整性、實(shí)體完整性和引用完整性。

域完整性,也可以稱為列完整性,指定一個(gè)數(shù)據(jù)集對(duì)某一個(gè)列是否有效和確定是否允許空值。域完整性通常是經(jīng)過使用有效性檢查來實(shí)現(xiàn)的,還可以通過限制數(shù)據(jù)類型、格式或者可能的取值范圍來實(shí)現(xiàn)。例如,設(shè)置員工進(jìn)入公司的日期大于員工的出生日期,

實(shí)體完整性,也可以稱為行完整性,要求表中的所有行有一個(gè)唯一的標(biāo)識(shí)符,這種標(biāo)識(shí)符一般稱為主鍵值。

引用完整性,引用完整性保證主鍵和外鍵之間的關(guān)系總是得到維護(hù)。如果被參考表中的一行被一個(gè)外鍵所參考,那么這一行數(shù)據(jù)便不能直接被刪除,用戶也不能直接修改主鍵值。

在Microsoft SQL Server 2008系統(tǒng)中,可以使用兩種方式實(shí)現(xiàn)數(shù)據(jù)完整性,即聲明數(shù)據(jù)完整性和過程數(shù)據(jù)完整性。

聲明數(shù)據(jù)完整性就是通過在對(duì)象定義中定義的數(shù)據(jù)標(biāo)準(zhǔn)來實(shí)現(xiàn)數(shù)據(jù)完整性,是由系統(tǒng)本身自動(dòng)強(qiáng)制實(shí)現(xiàn)的。聲明數(shù)據(jù)完整性的方式包括使用各種約束、缺省和規(guī)則。例如,在某個(gè)表中定義了主鍵約束,那么這種定義就由系統(tǒng)自動(dòng)強(qiáng)制實(shí)現(xiàn)。

過程數(shù)據(jù)完整性是通過在腳本語言中定義的數(shù)據(jù)完整性標(biāo)準(zhǔn)來實(shí)現(xiàn)的。在執(zhí)行這些腳本的過程中,由腳本中定義的強(qiáng)制完整性的實(shí)現(xiàn)。過程數(shù)據(jù)完整性的方式包括使用觸發(fā)器和存儲(chǔ)過程等。

? 約束的概念及類型

約束是通過限制列中數(shù)據(jù)、行中數(shù)據(jù)和表之間數(shù)據(jù)來保證數(shù)據(jù)完整性的非常有效的方法。約束可以確保把有效的數(shù)據(jù)輸入到列中和維護(hù)表和表之間的特定關(guān)系。Microsoft SQLServer 2008系統(tǒng)提供了5種約束類型,即PRIMARY KEY(主鍵)、FOREIGN KEY(外鍵)、UNIQUE、CHECK、DEFAULT約束。

每一種數(shù)據(jù)完整性類型,例如域完整性、實(shí)體完整性和引用完整性,都由不同的約束類型來保障。

創(chuàng)建約束時(shí)可以使用CREATE TABLE語句或ALTER TABLE語句完成。使用CREATE TABLE語句表示在創(chuàng)建表的時(shí)候定義約束,使用ALTER TABLE語句表示在已有的表中添加約束。即使表中已經(jīng)有了數(shù)據(jù),也可以在表中增加約束。

定義約束時(shí),既可以把約束放在一個(gè)列上,也可以把約束放在多個(gè)列上。如果把約束放在一個(gè)列上,該約束稱為列級(jí)約束,因?yàn)樗荒苡杉s束所在的列引用。如果把約束放在多個(gè)列上,該約束稱為表級(jí)約束,這時(shí)可以由多個(gè)列來引用該約束。

? 查看約束

當(dāng)創(chuàng)建約束時(shí),可以指定約束的名稱。否則,Microsoft SQL Server系統(tǒng)將提供一個(gè)復(fù)雜的、系統(tǒng)自動(dòng)生成的名稱。對(duì)于一個(gè)數(shù)據(jù)庫來說,約束名稱必須是唯一的。一般來說,約束的名稱應(yīng)該按照這種格式:約束類型簡稱_表名_列名_代號(hào)。可以使用目錄視圖查看有關(guān)約束的信息,這些目錄視圖包括sys.key_constraints、sys.check_constraints、sys.default_constraints。sys.key_constraints目錄視圖用于查看有關(guān)主鍵和UNIQUE約束的信息,sys.check_constraints目錄視圖用于查看有關(guān)CHECK約束的信息,在sys.default_constraints目錄視圖中可以查看有關(guān)DEFAULT約束的信息。

? 默認(rèn)約束

當(dāng)使用INSERT語句插入數(shù)據(jù)時(shí),如果沒有為某一個(gè)列指定數(shù)據(jù),那么DEFAULT約束就在該列中輸入一個(gè)值。

例如,在記錄了人事信息的person表的性別列中定義了一個(gè)DEFAULT約束為“男”。當(dāng)向該表中輸入數(shù)據(jù)時(shí),如果沒有為性別列提供數(shù)據(jù),那么DEFAULT約束把缺省值“男”自動(dòng)插入到該列中。因此,DEFAULT約束可以實(shí)現(xiàn)保證域完整性。

定義DEFAULT約束的基本語法在CREATE TABLE語句中和在ALTER TABLE語句中的形式不完全相同。 如圖

? CHECK約束

CHECK約束用來限制用戶輸入某一個(gè)列的數(shù)據(jù),即在該列中只能輸入指定范圍的數(shù)據(jù)。CHECK約束的作用非常類似于外鍵約束,兩者都是限制某個(gè)列的取值范圍,但是外鍵是通過其他表來限制列的取值范圍,CHECK約束是通過指定的邏輯表達(dá)式來限制列的取值范圍。

例如,在描述學(xué)生性別的gender列中可以創(chuàng)建一個(gè)CHECK約束,指定其取值范圍是“男”或者“女”。這樣,當(dāng)向gender列輸入數(shù)據(jù)時(shí),要么輸入數(shù)據(jù)“男”,要么輸入數(shù)據(jù)“女”,而不能輸入其他不相關(guān)的數(shù)據(jù)。

使用CHECK約束需要考慮

l 一個(gè)列上不可以定義多個(gè)CHECK約束。

l 當(dāng)執(zhí)行INSERT語句或者UPDATE語句時(shí),該約束驗(yàn)證相應(yīng)的數(shù)據(jù)是否滿足CHECK約束的條件。但是,執(zhí)行DELETE語句時(shí)不檢查CHECK約束。

l CHECK約束可以參考本表中的其他列。例如,在employee表中包含了出生日期(birthdate)列和雇傭日期(hiredate)列,birthdate列可以引用hiredate列,使得birthdate列的數(shù)據(jù)小于hiredate列的數(shù)據(jù)。

l CHECK約束不能放在有IDENTITY屬性的列上或者數(shù)據(jù)類型為timestamp的列上。因?yàn)檫@兩種列都會(huì)自動(dòng)插入數(shù)據(jù)。

l CHECK約束不能包含子查詢語句。

? 主鍵約束

主鍵約束在表中定義一個(gè)主鍵值,這是唯一確定表中每一行數(shù)據(jù)的標(biāo)識(shí)符。在所有的約束類型中,主鍵約束是最重要的一種約束類型,也是使用最廣泛的約束類型。該約束強(qiáng)制實(shí)體完整性。一個(gè)表中最多只能有一個(gè)主鍵,且主鍵列不允許空值。

例如,在students表中,一般將描述學(xué)生學(xué)號(hào)的studentID列作為主鍵值,因?yàn)閟tudentID列中的值是唯一的。主鍵經(jīng)常定義在一個(gè)列上,但是也可以定義在多個(gè)列上。當(dāng)主鍵定義在多個(gè)列上時(shí),雖然某一個(gè)列中的數(shù)據(jù)可能重復(fù),但是這些列的組合值不能重復(fù).

使用主鍵約束考慮

l 每一個(gè)表最多只能定義一個(gè)主鍵約束。

l 主鍵列所輸入的值必須是唯一的。如果主鍵約束由兩個(gè)或兩個(gè)以上的列組成,那么這些列的組合必須是唯一的。

l 主鍵列不允許空值。

l 主鍵約束在指定的列上創(chuàng)建了一個(gè)唯一性索引。該唯一性索引既可以是聚集索引,也可以是非聚集索引。在默認(rèn)情況下創(chuàng)建的是聚集索引。如果表中已經(jīng)有聚集索引,那么在創(chuàng)建主鍵約束之前,要么把已有的聚集索引刪除,要么指定所創(chuàng)建的索引是非聚集索引。

? 惟一約束

UNIQUE約束指定表中某一個(gè)列或多個(gè)列不能有相同的兩行或兩行以上的數(shù)據(jù)存在。這種約束通過實(shí)現(xiàn)唯一性索引來強(qiáng)制實(shí)體完整性。當(dāng)表中已經(jīng)有了一個(gè)主鍵約束時(shí),如果需要在其他列上實(shí)現(xiàn)實(shí)體完整性,又因?yàn)楸碇胁荒苡袃蓚€(gè)或兩個(gè)以上的主鍵約束,所以只能通過創(chuàng)建UNIQUE約束來實(shí)現(xiàn)。一般地,把UNIQUE約束稱為候選的主鍵約束。

例如,在students表中,主鍵約束創(chuàng)建在studentID列上,如果這時(shí)還需要保證該表中的存儲(chǔ)身份證號(hào)的SSL列的數(shù)據(jù)是唯一的,那么可以使用UNIQUE約束。

使用惟一約束需要考慮

l UNIQUE約束所在的列允許空值,但是主鍵約束所在的列不允許空值。

l 一個(gè)表中可以有多個(gè)UNIQUE約束。

l 可以把UNIQUE約束放在一個(gè)或者多個(gè)列上,這些列或列的組合必須有唯一的值。但是,UNIQUE約束所在的列并不是表的主鍵列。

l UNIQUE約束強(qiáng)制在指定的列上創(chuàng)建一個(gè)唯一性索引。在默認(rèn)情況下,是創(chuàng)建唯一性的非聚集索引。但是,在定義UNIQUE約束時(shí)也可以指定所創(chuàng)建的索引是聚集索引。

? 外鍵約束

外鍵約束強(qiáng)制引用完整性。外鍵約束定義一個(gè)或多個(gè)列,這些列可以引用同一個(gè)表或另外一個(gè)表中的主鍵約束列或UNIQUE約束列。實(shí)際上,通過創(chuàng)建外鍵約束可以實(shí)現(xiàn)表和表之間的依賴關(guān)系。

一般情況下,在Microsoft SQL Server關(guān)系型數(shù)據(jù)庫管理系統(tǒng)中,表和表之間經(jīng)常存在著大量的關(guān)系,這些關(guān)系都是通過定義主鍵約束和外鍵約束實(shí)現(xiàn)的。

小結(jié)

1、數(shù)據(jù)完整性被增強(qiáng)以保持?jǐn)?shù)據(jù)庫中數(shù)據(jù)的準(zhǔn)確性、一致性和可靠性。他可以被分成下面的幾種類型:

實(shí)體完整性:確保每行可以被稱為主鍵的屬性唯一確定

域完整性:確保僅有效范圍的值被允許來存儲(chǔ)在列中

引用完整性:確保外鍵的值匹配相應(yīng)的逐漸的值

用戶定義完整性:指用戶指定的一系列規(guī)則,它不屬于實(shí)體、域和參照完整性類型。

2、主鍵約束被定義在一列上或表中唯一確定行的一系列列的值

3、唯一約束被用于增強(qiáng)非主鍵列的唯一性

4、外鍵約束將表中一個(gè)或多個(gè)列與主鍵約束被定義的一個(gè)同一系列列(另一個(gè)表中的主鍵列)相關(guān)聯(lián)

5、檢查約束通過限制列中插入的值增強(qiáng)域完整性。IN ,LIKE 和 BETWEEN 關(guān)鍵字被用于定義檢查約束。

6、默認(rèn)約束可以被用于指定列的約束值,和用戶不需要為這樣的列插入的值。

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

MSSQL之七數(shù)據(jù)完整性

MSSQL之七數(shù)據(jù)完整性:無論是產(chǎn)品,還是信息,質(zhì)量都是非常重要的。信息的質(zhì)量是指信息的準(zhǔn)確性、完整性、一致性等。在許多數(shù)據(jù)庫應(yīng)用系統(tǒng)中,數(shù)據(jù)質(zhì)量的高低往往是導(dǎo)致系統(tǒng)成功與否的重要因素。數(shù)據(jù)完整性是保證數(shù)據(jù)質(zhì)量的一種重要方法,是現(xiàn)代數(shù)據(jù)庫系統(tǒng)的一個(gè)重要特征。 Micro
推薦度:
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top