強(qiáng)制數(shù)據(jù)完整性_第1頁
強(qiáng)制數(shù)據(jù)完整性_第2頁
強(qiáng)制數(shù)據(jù)完整性_第3頁
強(qiáng)制數(shù)據(jù)完整性_第4頁
強(qiáng)制數(shù)據(jù)完整性_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、強(qiáng)制數(shù)據(jù)完整性使用數(shù)據(jù)表約束數(shù)據(jù)完整性強(qiáng)制數(shù)據(jù)完整性可保證數(shù)據(jù)庫中數(shù)據(jù)的質(zhì)量。數(shù)據(jù)完整性分為下列類別:實(shí)體完整性實(shí)體完整性將行定義為特定表的唯一實(shí)體。實(shí)體完整性通過索引、UNIQUE 約束、PRIMARY KEY 約束或 IDENTITY 屬性強(qiáng)制表的標(biāo)識(shí)符列或主鍵的完整性。域完整性域完整性指特定列的項(xiàng)的有效性。您可以強(qiáng)制域完整性限制類型(通過使用數(shù)據(jù)類型)、限制格式(通過使用 CHECK 約束和規(guī)則)或限制可能值的范圍(通過使用 FOREIGN KEY 約束、CHECK 約束、DEFAULT 定義、NOT NULL 定義和規(guī)則)。引用完整性在輸入或刪除記錄時(shí),引用完整性保持表之間已定義的關(guān)系

2、。在 SQL Server 2005 中,引用完整性通過 FOREIGN KEY 和 CHECK 約束,以外鍵與主鍵之間或外鍵與唯一鍵之間的關(guān)系為基礎(chǔ)。引用完整性確保鍵值在所有表中一致。這類一致性要求不引用不存在的值,如果一個(gè)鍵值發(fā)生更改,則整個(gè)數(shù)據(jù)庫中,對(duì)該鍵值的所有引用要進(jìn)行一致的更改。強(qiáng)制引用完整性時(shí),SQL Server 將防止用戶執(zhí)行下列操作: <!-if !supportLists->·         <!-endif->在主表中沒有關(guān)聯(lián)的記錄時(shí),將記錄添加或更改到相

3、關(guān)表中。<!-if !supportLists->·         <!-endif->更改主表中的值,這會(huì)導(dǎo)致相關(guān)表中生成孤立記錄。<!-if !supportLists->·         <!-endif->從主表中刪除記錄,但仍存在與該記錄匹配的相關(guān)記錄。用戶定義完整性用戶定義完整性使您可以定義不屬于其他任何完整性類別的特定業(yè)務(wù)規(guī)則。所有完整性類別都支持用戶

4、定義完整性。這包括 CREATE TABLE 中所有列級(jí)約束和表級(jí)約束、存儲(chǔ)過程以及觸發(fā)器。 數(shù)據(jù)約束SQL Server 2005 提供了下列機(jī)制來強(qiáng)制列中數(shù)據(jù)的完整性:PRIMARY KEY 約束 表通常具有包含唯一標(biāo)識(shí)表中每一行的值的一列或一組列。這樣的一列或多列稱為表的主鍵 (PK),用于強(qiáng)制表的實(shí)體完整性。在創(chuàng)建或修改表時(shí),您可以通過定義 PRIMARY KEY 約束來創(chuàng)建主鍵。一個(gè)表只能有一個(gè) PRIMARY KEY 約束,并且 PRIMARY KEY 約束中的列不能接受空值。由于 PRIMARY KEY 約束可保證數(shù)據(jù)的唯一性,因此經(jīng)常對(duì)標(biāo)識(shí)列定義這種約束 &

5、#160;       創(chuàng)建:ALTER TABLE TableName ADD CONSTRAINT TableName _pk PRIMARY KEY (Id)         刪除:ALTER TABLE TableName DROP CONSTRAINT TableName _pkFOREIGN KEY 約束 外鍵 (FK) 是用于建立和加強(qiáng)兩個(gè)表數(shù)據(jù)之間的鏈接的一列或多列。當(dāng)創(chuàng)建或修改表時(shí)可通過定義 FOREIGN KEY 約束來創(chuàng)建外鍵。在外鍵

6、引用中,當(dāng)一個(gè)表的列被引用作為另一個(gè)表的主鍵值的列時(shí),就在兩表之間創(chuàng)建了鏈接。這個(gè)列就成為第二個(gè)表的外鍵。FOREIGN KEY 約束并不僅僅可以與另一表的 PRIMARY KEY 約束相鏈接,它還可以定義為引用另一表的 UNIQUE 約束。FOREIGN KEY 約束可以包含空值,但是,如果任何組合 FOREIGN KEY 約束的列包含空值,則將跳過組成 FOREIGN KEY 約束的所有值的驗(yàn)證。若要確保驗(yàn)證了組合 FOREIGN KEY 約束的所有值,請(qǐng)將所有參與列指定為 NOT NULL。        

7、創(chuàng)建:ALTER TABLE TableName ADD CONSTRAINT TableName _fk1FOREIGN KEY (FKId)REFERENCES PrimarKeyTable (Id)         刪除:ALTER TABLE TableName DROP CONSTRAINT TableName _fk1UNIQUE 約束 可以使用 UNIQUE 約束確保在非主鍵列中不輸入重復(fù)的值。盡管 UNIQUE 約束和 PRIMARY KEY 約束都強(qiáng)制唯一性,但想要強(qiáng)制一列或多列組合(不是主鍵)的

8、唯一性時(shí)應(yīng)使用 UNIQUE 約束而不是 PRIMARY KEY 約束。 可以對(duì)一個(gè)表定義多個(gè) UNIQUE 約束,但只能定義一個(gè) PRIMARY KEY 約束。而且,UNIQUE 約束允許 NULL 值,這一點(diǎn)與 PRIMARY KEY 約束不同。不過,當(dāng)與參與 UNIQUE 約束的任何值一起使用時(shí),每列只允許一個(gè)空值。 FOREIGN KEY 約束可以引用 UNIQUE 約束。         創(chuàng)建:ALTER TABLE TablenName ADD CONSTRAINT ConstraintName UNI

9、QUE (Column2,Column3)         刪除:ALTER TABLE TablenName DROP CONSTRAINT ConstraintName CHECK 約束 通過限制列可接受的值,CHECK 約束可以強(qiáng)制域的完整性。此類約束類似于 FOREIGN KEY 約束,因?yàn)榭梢钥刂品湃肓兄械闹?。但是,它們?cè)诖_定有效值的方式上有所不同:FOREIGN KEY 約束從其他表獲得有效值列表,而 CHECK 約束通過不基于其他列中的數(shù)據(jù)的邏輯表達(dá)式確定有效值。例如,可以通過創(chuàng)建 CHEC

10、K 約束將 salary 列中值的范圍限制為從 $15,000 到 $100,000 之間的數(shù)據(jù)。這將防止輸入的薪金值超出正常的薪金范圍。CHECK 約束不接受計(jì)算結(jié)果為 FALSE 的值。因?yàn)榭罩档挠?jì)算結(jié)果為 UNKNOWN,所以表達(dá)式中存在這些值可能會(huì)覆蓋約束。例如,假設(shè)對(duì) int 列 MyColumn 應(yīng)用一個(gè)約束,指定 MyColumn 只能包含值 10(即 MyColumn = 10)。如果將值 NULL 插入到 MyColumn,SQL Server 2005 Database Engine 將插入 NULL 且不返回錯(cuò)誤。如果 CHECK 約束檢查的條件對(duì)于表中的任何行

11、都不是 FALSE,它將返回 TRUE。如果剛創(chuàng)建的表沒有任何行,則此表的任何 CHECK 約束都視為有效。這種情況可能會(huì)產(chǎn)生意外結(jié)果,如下面的示例所示。         創(chuàng)建:ALTER TABLE TablenName ADD CONSTRAINT ConstraintName CHECK (Column2>Column3)         刪除:ALTER TABLE TablenName DROP CONSTRAINT C

12、onstraintNameDEFAULT 定義 記錄中的每列均必須有值,即使該值是 NULL??赡軙?huì)有這種情況:必須向表中加載一行數(shù)據(jù)但不知道某一列的值,或該值尚不存在。如果列允許空值,就可以為行加載空值。由于可能不希望有可為空的列,因此最好是為列定義 DEFAULT 定義(如果合適)。例如,通常為數(shù)值列指定零作為默認(rèn)值,為字符串列指定 N/A 作為默認(rèn)值。將某行加載到某列具有 DEFAULT 定義的表中時(shí),即隱式指示 SQL Server 2005 Database Engine 將默認(rèn)值插入到?jīng)]有指定值的列中      

13、   創(chuàng)建:ALTER TABLE doc_exz ADD CONSTRAINT col_b_def DEFAULT 50 FOR column_b           刪除:ALTER TABLE doc_exz DROP CONSTRAINT col_b_def 允許空值 列的為空性決定表中的行是否可為該列包含空值。空值(或 NULL)不同于零 (0)、空白或長度為零的字符串(如 "")。NULL 的意思是沒有輸入。出現(xiàn) NULL 通常表示值未知或未定義。  

溫馨提示

  • 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論