計算機第8章實現(xiàn)數(shù)據(jù)的完整性_第1頁
計算機第8章實現(xiàn)數(shù)據(jù)的完整性_第2頁
計算機第8章實現(xiàn)數(shù)據(jù)的完整性_第3頁
計算機第8章實現(xiàn)數(shù)據(jù)的完整性_第4頁
計算機第8章實現(xiàn)數(shù)據(jù)的完整性_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第章實現(xiàn)數(shù)據(jù)的完整性

一8」

學(xué)習(xí)目標(biāo):

通過本章學(xué)習(xí),你能夠?qū)W會:

1.了解SQLServer數(shù)據(jù)的完整性的概念

2.運用企業(yè)管理器和SQL語言建立、修改主鍵約束

PRIMARYKEY、惟一性約束UNIQUE、惟一索引

UNIQUEINDEX,標(biāo)識IDENTITY等

3.使用企業(yè)管理器管理規(guī)則,運用T-SQL語言創(chuàng)建、

綁定、解除和刪除規(guī)則

4.使用企業(yè)管理器管理默認,運用T-SQL語言創(chuàng)建、

綁定、解除和刪除默認

5.運用T-SQL語言創(chuàng)建自動編號的IDENTITY

第章實現(xiàn)數(shù)據(jù)的完整性

一8」

8.1數(shù)據(jù)完整性概述

I數(shù)據(jù)完整性的含義包括以下內(nèi)容:

1.數(shù)值的完整性,指數(shù)據(jù)類型與取值

的正確性。例如取值為整型還是字符型,

取值范圍是否合理,是否允許空值等。

2.表內(nèi)數(shù)據(jù)不相互矛盾。例如指定一

個表中的某些數(shù)據(jù)不得重復(fù)。

3.表間數(shù)據(jù)不相互矛盾,指數(shù)據(jù)的關(guān)

聯(lián)性不被破壞。例如學(xué)生庫中表學(xué)生信息

的學(xué)號應(yīng)與學(xué)生成績表中的學(xué)號一致。

f>

第8章實現(xiàn)數(shù)據(jù)的完整性

8.1.1數(shù)據(jù)完整性的分類

數(shù)據(jù)完整性有不同的分類方法。

(1)按照數(shù)據(jù)完整性的功能可以將其分為四類:

?實體完整性,要求表中每一條記錄(每一行數(shù)據(jù))是惟一

的,即它必須至少擁有一個惟一標(biāo)識以區(qū)分不同的數(shù)據(jù)

行。實現(xiàn)方法有:主鍵約束PRIMARYKEY、惟一性約束

UNIQUE、惟一索引UNIQUEINDEX>標(biāo)識IDENTITY等

?值域完整性,限定表中輸入數(shù)據(jù)的數(shù)據(jù)類型與取值范圍。

實現(xiàn)方法:默認值約束DEFAULT或默認對象、核查約束

CHECK、外鍵約束FOREIGNKEY、規(guī)則RULE、數(shù)據(jù)類型、

非空性約束NOTNULL等。

?引用完整性,指對數(shù)據(jù)庫進行添加、刪除、修改數(shù)據(jù)時,

要維護表間數(shù)據(jù)的一致性。

實現(xiàn)方法:外鍵約束FOREIGNKEY、核查約束CHECK、

觸發(fā)器TRIGGER、存儲過程PROCEDURE。

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

?用戶定義的完整性,用于實現(xiàn)用戶特殊要求的數(shù)據(jù)規(guī)則

或格式,例如在學(xué)生庫中,學(xué)生表的出生日期列數(shù)據(jù)可

以規(guī)定格式為ddd-dd-dddd形式(d表示0—9之間的數(shù)據(jù))。

實現(xiàn)方法:默認值DEFAULT、核查約束CHECK、規(guī)則RULE

等。

(2)按照在數(shù)據(jù)庫中實現(xiàn)數(shù)據(jù)完整性的作用級別,可以將

其分為對象級與總體級。

?對象級:作用范圍是數(shù)據(jù)庫的某個表對象,是在定義表

的同時定義的,刪除表則失法作用,如約束。

?總體級:是作為數(shù)據(jù)庫的對象單獨定義的,因此單獨存

在于數(shù)據(jù)庫中,需要時可以綁定到數(shù)據(jù)庫的表或用戶定

義的數(shù)據(jù)類型中,如默認對象、規(guī)則。

(3)按照數(shù)據(jù)完整性的實施方法包括:約束、默認、規(guī)則、

觸發(fā)器、存儲過程等。

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

8.2執(zhí)行數(shù)據(jù)完整性約束

約束用于實現(xiàn)表內(nèi)數(shù)據(jù)的完整性,屬于對象級。SQL

Server支持的約束有如下幾種:非空約束NOTNULL,主

鍵約束PRIMARYKEY、惟一約束UNIQUE、核查約束CHECK、

外鍵約束FOREIGNKEY、默認值約束DEFAULT。

約束可以在創(chuàng)建表時定義,也可以在修改表時定義

(即向已有的表中添加約束),但同一個數(shù)據(jù)庫中不同約

束的名稱不能相同。

按約束的作用范圍可以分為兩類,在定義列時定義

的約束,僅作用于本列,稱之為列級約束:表中單獨定

義的約束,稱之為表級約束。表級約束的聲明與列的定

義無關(guān),當(dāng)一個約束作用于一個以上的列時,必須使用

表級約束。無論那種約束,其定義都離不開表的定義,

因此刪除表則約束失效。

第8章實現(xiàn)數(shù)據(jù)的完整性

8.2.1主鍵約束PRIMARYKEY

通常在表中將一個列或列組合的數(shù)據(jù)

設(shè)置成具有各不相同的值,以便能惟一地

標(biāo)識表中的每一行。這樣的一列或多列稱

為表的主鍵,通過它可強制實現(xiàn)表的實體

完整性,消除表的冗余數(shù)據(jù),因此為了保

證數(shù)據(jù)庫的實體完整性,建議在大多數(shù)表

中設(shè)置主鍵。

第8章實現(xiàn)數(shù)據(jù)的完整性

1.在企業(yè)管理器管理主鍵約束

[實例8.1]使用企業(yè)管理器查看學(xué)生庫的學(xué)

生信息表的PRIMARYKEY約束。

_________laix

操作步驟:。將I笛la電電T£|陶?胃的IV母

列名數(shù)據(jù)類型長度允許空▲

學(xué)號char7

姓名char8

性別char2

班級nvarchar10

年齡int4

出生日期datetime8y

是否團員bit1V

1il.11*?一?二1

:o

O

%

f

第8章實現(xiàn)數(shù)據(jù)的完整性

2.在T-SQL中創(chuàng)建主鍵約束

[實例8.2]在學(xué)生庫創(chuàng)建一個表名為學(xué)生圖書,定

義圖書編號為列級主鍵,列有:姓名、性別、年

齡、專業(yè)、相片。表層性一學(xué)生圖書兇

常視I

操作步驟:蠢1名稱西:學(xué)生圖書權(quán)限回…

所有者:dbo

創(chuàng)建日期:2006-12-920:11:28

文件蛆:PRIMARY

行廠0

列:

鍵ID名稱數(shù)據(jù)類型I大小…:空

編號char6□

姓名varchar20m

性別bit1

年齡smalldat...4

專業(yè)char4

相片image16

備注text16

確定取消I應(yīng)用⑷I幫助

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

歸納分析:

主鍵具有如下特性:

⑴不重復(fù)性。當(dāng)將一列設(shè)置為主鍵時,則數(shù)據(jù)的取值在該

列或列組合中是惟一的,因此主鍵列(或列組合)可以作

為表中數(shù)據(jù)的標(biāo)識列。

⑵非空性。即主鍵列(或列組合)的每個數(shù)據(jù)不能出現(xiàn)空值。

⑶惟一性。指一個表中最多只有一個主鍵。

創(chuàng)建表時可通過定義PRIMARYKEY約束來創(chuàng)建主鍵。

命令格式:

CREATETABLE表名

(列名數(shù)據(jù)類型CONSTRAINT主鍵約束名PRIMARY

KEY[CLUSTERED|NONCLUSTERED]

第8章實現(xiàn)數(shù)據(jù)的完整性

命令說明:

CONSTRAINT主鍵約束名為可選項,關(guān)鍵字

CONSTRAINT用于指定其后面的約束名稱。如省略

本選項,則系統(tǒng)自動給出一個約束名。建議選擇

約束名以便于識別。PRIMARYKEY表示該列具有

主鍵約束。

CLUSTERED|NONCLUSTERED表示建立聚簇索引

或非聚簇索引,省略此項則系統(tǒng)默認為聚簇索弓I。

如果沒有特別指定本選項,且沒有為其他UNIQUE

惟一約束指定聚簇索引,則默認對該PRIMARY

KEY約束使用CLUSTERED。

第8章實現(xiàn)數(shù)據(jù)的完整性

[實例8.3]創(chuàng)建一個表圖書信息,同時定義姓名和

圖書名稱為列級主鍵“組合”,其他列名為編號,

借書時間、還書時間、借書數(shù)量。

操作步驟:

表鬼性-用書信£1

常規(guī)|

睜名稱時):圖書信息權(quán)限⑻.

"CREATETABLE庵書蓿息所看著:dbo

創(chuàng)建日期2006-12-923:09:19

姓名varchar10).圖書名稱varchar(10).文件組:PRIMARY

借書時間smalldatetime,還書時間smalldatetime.借書數(shù)量int行:0

CONSTRAINT組合PRIMARYKEY,姓名,圖書名稱1)列:

漫ID:名稱數(shù)據(jù)類型大小空□聯(lián)認值

<1________________________________________|J]姓名varchar10□

圖書名稱varchar10

育令已成功龕成。一—二借書時間smalldat...4

區(qū)

還書時間smalldat...4

借書數(shù)量■nt4

確定|取消|定網(wǎng)]幫助

第8章實現(xiàn)數(shù)據(jù)的完整性

歸納分析:

定義表級主鍵。表級主鍵一般位于表定義中所有列定

義之后,與列定義可以用逗號相隔,語法如下。

命令格式:

CREATETABLE表名

(列名1數(shù)據(jù)類型CONSTRAINT主鍵約束名

PRIMARYKEY[CLUSTERED|N0NCLUSTERED],

(聚集索引非聚集索引)

主鍵列名1數(shù)據(jù)類型,主鍵列名2數(shù)據(jù)類型)

命令說明:

(主鍵列名1數(shù)據(jù)類型,主鍵列名2數(shù)據(jù)類型)表示該表級

主鍵可以作用于組合在一起的多列所構(gòu)成的列組合。

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

3.刪除表的主鍵約束

[實例8.4]刪除表圖書信息中的主鍵約束。

操作步驟:

(1)啟動“查詢分析器”,輸入如下SQL語句:

ALTERTABLE圖書信息

DROPCONSTRAINT組合

(2)按“F5”鍵或單擊工具欄“執(zhí)行查詢”圖標(biāo)。

f>

第8章實現(xiàn)數(shù)據(jù)的完整性

一-

歸納分析:

將表的主鍵由當(dāng)前列換到另一列。

一般先刪除主鍵,然后在另一列上添加主鍵。

刪除主鍵約束語法。*

命令格式:

ALTERTABLE表名

DROP[CONSTRAINT]主鍵約束名

第8章實現(xiàn)數(shù)據(jù)的完整性

4.更改表的主鍵約束

[實例8.5]修改表圖書信息,添加編號,將姓名和

圖書名稱為列級主鍵改為編號和姓名。

操作步驟:’

""ALTERTABLE圉考楮息

ADD編號char'6)

GO

ALTERTABLE圖書信息/*修改編號列為非空值*/

ALTERCOLITMN編號char(6'NOTNULL

GO

ALTERTABLE圖書信息/*設(shè)置新的主稷*/

WITHNO^HECK

ADDCONSTRAINT圖書一主牌PRIMARYKEY(編號.姓名)

(所影響的行數(shù)為0行)

第8章實現(xiàn)數(shù)據(jù)的完整性

歸納分析:

更改表的主鍵約束包括在現(xiàn)有表中添加新的

一個主鍵列、使一個表的某現(xiàn)有列成為主鍵、將

現(xiàn)有表的主鍵由當(dāng)前列換到另一列、刪除表的主

鍵等。以下語法對列級與表級主鍵同樣適用。

(1)在現(xiàn)有表中添加一列,同時將其設(shè)置為主鍵,

要求表中原先沒有主鍵,語法如下。

第8章實現(xiàn)數(shù)據(jù)的完整性

命令格式:

ALTERTABLE表名

ADD列名數(shù)據(jù)類型

[DEFAULT默認表達式][IDENTITY[(標(biāo)識,自動標(biāo)號

列)11

[CONSTRAINT主鍵約束名]

PRIMARYKEY[CLUSTERED|NONCLUSTERED]

命令說明:

ALTERTABLE只允許添加可包含空值或指定了

DEFAULT定義的列。因為主鍵不能包含空值,所以需要指

定DEFAULT定義,或指定IDENTITY。其他說明與創(chuàng)建主鍵

約束類同。

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

(2)使表中現(xiàn)有的一列(或列組合)成為主鍵,要求表中原

先沒有主鍵。且備選主鍵列中的已有數(shù)據(jù)不得重復(fù)或為

空,語法如下。

命令格式:

ALTERTABLE表名

[WITHCHECK|WITHNONCHECK]

ADD[CONSTRAINT約束名]

PRIMARYKEY[CLUSTERED|NONCLUSTERED](列名n))

命令說明:

(l)WITHCHECK為默認選項,該選項表示將使用新的主

鍵約束來檢查表中已有數(shù)據(jù)是否符合主鍵條件;如果使

用了WITHNOCHECK選項,則不進行檢查。

(2)ADD指定要添加的約束。

第8章實現(xiàn)數(shù)據(jù)的完整性

8.2.2惟一約束UNIQUE

L在企業(yè)管理器中管理惟一約束

[實例8.6]在企業(yè)管理器的學(xué)生數(shù)據(jù)庫中,選定學(xué)

生圖書建立惟一約束。

操作步驟:

a,鹵通最電句[¥|明焉邙后|力身

H表和索引屬性1—

劉乃數(shù)據(jù)類型:長度1允許空―

char6

姓名varchar20V

性別bit1V

年齡smalldatetin4V

專業(yè)char4V

相片image16V

備注text

?1J

第8章實現(xiàn)數(shù)據(jù)的完整性

2.用SQL語句創(chuàng)建惟一約束

[實例8.7]建立表圖書,其中列圖書編號包含一個

主鍵圖書主鍵

操作步驟:

IFEX巧TKSELECTnameFROMsysobiecrts/*如臬書庫中以有此袤,幅其刪除*.

WHEREname-'囪書'ANDtype二'U')

DROPTABLE圖書

GO

CREATETABLE圖書

初書編號char(4)CONSTRAINT圖書主健PRIMARYKEY

圖書名稱char(20)CONSTRAINT圖書約束UNIQUE

GO

<1I“

I牌已康功完成。

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

歸納分析:

惟一性約束指定一個或多個列的組合的值具有惟一性,

以防止在列中輸入重復(fù)的值。惟一性約束指定的列可以

有空屬性。由于主關(guān)鍵字值是具有惟一性的,因此主關(guān)

鍵字列不能再設(shè)定惟一性約束。惟一性約束最多由16個

列組成。

命令格式:

CREATETABLE表名

(列名數(shù)據(jù)類型CONSTRAINT約束名

UNIQUE)

顯然,惟一約束與主鍵約束的定義十分相似,區(qū)別僅

在于惟一約束采用關(guān)鍵字UNIQUE而主鍵約束采用關(guān)鍵字

PRIMARYKEYo

第8章實現(xiàn)數(shù)據(jù)的完整性

3.更改現(xiàn)有表的惟一約束

[實例8.8]在表圖書中添加一列出版日期,同時對

該列設(shè)置表中第2個惟一約圖書約束2。因為在例

8中已經(jīng)將第1個惟一約束圖書約束設(shè)置為聚自選

項(默認選項),因此第2個惟一約束必須設(shè)置為

非聚簇選項。

操作步驟:

|ALTERTABLE/書

ADD出版編號char(8)CONSTRAINT圖書約束2

UNIQUENONCLUSTERED

1|G0……——

以“已成功完成。

第8章實現(xiàn)數(shù)據(jù)的完整性

8.2.3核查約束CHECK

1.使用企業(yè)管理器管理核查約束

[實例8.9]使用企業(yè)管理器為學(xué)生圖書中設(shè)置年齡

不能小于15歲,創(chuàng)建CHECK約束。

屜性兇

操作步驟:

17創(chuàng)建中檢查現(xiàn)存數(shù)據(jù)也)

F7對復(fù)制強制約束促)

|7對INSERT和UPDATE強制約束盤)

關(guān)閉I幫助

第8章實現(xiàn)數(shù)據(jù)的完整性

2.使用SQL語句創(chuàng)建核查約束

[實例8.10]創(chuàng)建表圖書并插入數(shù)據(jù),其中的列圖書編號的

取值要求為4個字符,第1個字符為字母A—E中的一個,

IFEXISTS'.SELECTnameFROMsysobiects

第2個字符為數(shù)字1?5WHEREname=,圖書'ANLtype='U''

DROPTABLE圖書

GO

之間的整數(shù),第3個和CREATETABLE圖書/*創(chuàng)建圖書表H

圖書編號charMJCONSTRAINT圖書主鍵PRIMARYKEY

圖書名稱char20>CONSTRAINT圖書約束UNIQUE

CONSTRAINT圖書檢查CHECKFORREPLICATION

第4個字符均為0—9之,圖書編號LIKE1[A-E][1-5][0-9][0-9],

GO

間的整數(shù)。INSERT圖書(圖書編號,圖書名稱:,/*用戶插入數(shù)據(jù)*/

VALUES,’A10。,「大學(xué)數(shù)學(xué),'

INSERT圖書,:圖書編號、圖書名稱,

VALUES「E211,'大學(xué)物理’,

操作步驟:INSERT圖書,:圖書編號圖書名稱i

VALUES「C334','大學(xué)英文)

優(yōu))?

圖書編號圖書名稱1

?A100大學(xué)數(shù)學(xué)(所影響的行數(shù)為1行)

大學(xué)物理

B211(所影響的行數(shù)為1行)

C334大學(xué)英文

米(所影響的行數(shù)為1行)

f>

第章實現(xiàn)數(shù)據(jù)的完整性

一8」

注意:利用查詢語句可知結(jié)果插入成功。若將插入

的數(shù)據(jù)改為核查約束范圍以外的數(shù)據(jù),例如1999,

則系統(tǒng)報錯,請讀者自行試一試。

歸納分析:,

核查約束用于檢查輸入數(shù)據(jù)的取值是否正確,

只有符合核查約束條件的數(shù)據(jù)才能輸入。在一個

表中可以建立多個核查約束,在一列上也可以建

立多個核查約束,只要它們不相互矛盾。

創(chuàng)建表時定義核查約束。

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

命令格式:

CREATETABLE表名

(列名數(shù)據(jù)類型

[[CONSTRAINT約束名]

CHECK[NOTFORREPLICATION]

(條件表達式)

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

命令格式:

CREATETABLE表名

(列名數(shù)據(jù)類型

[[CONSTRAINT約束名]

CHECK[NOTFORREPLICATION]

(條件表達式)

f>

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

8.2.4外健約束FOREIGNKEY

1.使用企業(yè)管理器管理外鍵約束

[實例8.12]使用企業(yè)管理器創(chuàng)建學(xué)生成績表和學(xué)

生信息表的FOREIGNKEY約束。

操作步驟:

第8章實現(xiàn)數(shù)據(jù)的完整性

3.更改表的外鍵約束

[實例8.14]在表圖書中增加一列圖書編號,該列具

有外鍵約束圖書—約束1,它引自表學(xué)生圖書中的

主鍵編號。

操作步驟:

I-ALTERTABLE圖書1

ADD圖書編號char(61

CONSTRAINT圖書約束1FOREIGNKEY

REFERENCES學(xué)生圖書(編號)

ONDELETENOACTION

GO

N

k電印蜘完成。

第8章實現(xiàn)數(shù)據(jù)的完整性

歸納分析:

當(dāng)向表中插入一行數(shù)據(jù)時,若沒有指定其中某一列字段

的數(shù)值,則該字段的數(shù)值按如下次序取值:

若該字段定義有默認值,則系統(tǒng)將默認值插入字段。

若該字段定義沒有默認值,但允許空,則插入空值。

若該字段定義沒有默認值,又不允許空,則報錯。

顯然,對于非空字段,默認值極為重要。默認值有

兩種設(shè)置方式,默認值約束與默認對象。默認值約束是

對象級的,其作用范圍僅限于一個表,刪除表則刪除默

認值約束。默認值對象是數(shù)據(jù)庫級的,作為數(shù)據(jù)庫對象

單獨存在于數(shù)據(jù)庫中,需要時可以綁定到任何一個表中。

第8章實現(xiàn)數(shù)據(jù)的完整性

歸納分析:

(1)在現(xiàn)有表中添加新的一列,該列具有默認值約束。

命令格式:

ALTERTABLE表名

ADD[CONSTRAINT默認名]

DEFAULT表達式

(2)為表中現(xiàn)有列添加默認約束

命令格式:

ALTERTABLE表名

ADD[CONSTRAINT默認名]

DEFAULT表達式FOR列名

命令說明:

默認表達式的值用于關(guān)鍵字FOR所指定的列名。

(3)刪除默認值約束的語法同刪除主鍵。

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

命令說明:

規(guī)則表達式,與WHERE子句中的條件表達式

類似,可以使用比較表達式、邏輯表達式、LIKE

子句等,所不同的是需要將WHERE子句中的列名

改為一個以@開頭并符合SQLServer命名規(guī)則的

參數(shù)。將規(guī)則綁定到列上時,該參數(shù)代表INSERT

語句或UPDATE語句所輸入的數(shù)據(jù),因此其參數(shù)名

字可以隨意。

注意:

規(guī)則表達式不能引用表中的列或其他數(shù)據(jù)庫對

f>

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

歸納分析:

當(dāng)表中不再需要規(guī)則時,可以將規(guī)則與列分離,稱

為解除綁定。解除綁定需要使用系統(tǒng)存儲過程

sp_unbindmleo

命令格式:

sp_unbindrule,表名.列名'卜用戶定義的數(shù)據(jù)類型'

命令說明:

解除綁定后規(guī)則仍然存在于數(shù)據(jù)庫系統(tǒng)中,

只不過它與表的聯(lián)系沒有了。

f>

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

歸納分析:

使用默認的過程與使用規(guī)則的過程類似,依次

為創(chuàng)建默認一綁定默認一解除綁定一刪除默認,

其中語法項目的表述及用法也類似。

命令格式:

CREATEDEFAULT默認對象名稱AS默認表達式

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

8.4.5刪除默認

[實例8.26]刪除默認對象。

操作步驟:

(1)啟動“查詢分析器”,輸入如下SQL語句:

DROPDEFAULTdf_圖書

GO

(2)按“F5”鍵或單擊工具欄“執(zhí)行查詢”圖標(biāo)。

歸納分析:

刪除默認之前要先解除默認綁定。

刪除默認的命令格式:

DROPDEFAULT默認對象名稱

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

8.6本章總結(jié)

1.數(shù)據(jù)的完整性指數(shù)據(jù)庫中數(shù)據(jù)的一致性與正確性。在SQL

Server2000中,可以通過約束、默認、規(guī)則、觸發(fā)器等

來達到保證數(shù)據(jù)完整性的目的。

2.SQLServer支持的約束有如下幾種:非空約束NOTNULL,

主鍵約束PRIMARYKEY、惟一約束UNIQUE、核查約束

CHECK、外鍵約束FOREIGNKEY、默認值約束DEFAULT。

3.主鍵具有不重復(fù)性、非空性、惟一性的特性。

4.惟一性約束指定一個或多個列的組合的值具有惟一性,

以防止在列中輸入重復(fù)的值。惟一性約束指定的列可以

有空屬性。

5.核查約束用于檢查輸入數(shù)據(jù)的取值是否正確,只有符合

核查約束條件的數(shù)據(jù)才能輸入。在一個表中或列中可以

建立多個核查約束,只要它們不相互矛盾。

第8章實現(xiàn)數(shù)據(jù)的完整性

7.什么是惟一性約束?在數(shù)據(jù)完整性中使用時應(yīng)

注意的問題是什么?

8.什么是核查約束?在數(shù)據(jù)完整性中使用時應(yīng)注

意的問題是什么?

9.什么是外鍵約束?在數(shù)據(jù)完整性中使用時應(yīng)注

意的問題是什么?

10.什么是默認值約束?在數(shù)據(jù)完整性中使用時應(yīng)

注意的問題是什么?

11.什么是規(guī)則?如何使用規(guī)則?

12.什么是默認?如何使用默認?

13.試說明自動編號的特點?

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

(11)建立表商品,其中型號默認值為1111,然后在該表

中增加一列出廠日期默認值為“2004/1/1”,最后為表中

的列品種添加默認值為60完成插入表。

(12)創(chuàng)建規(guī)則rangel,使數(shù)據(jù)范圍在10-200之間。

(13)創(chuàng)建表商品1字段為商品編號,品種,型號,再將12

題創(chuàng)建的規(guī)則綁定在表中的品種列上。

(14)解除表商品中列品種所綁定的規(guī)則。

(15)建立默認df商品,其默認值為5。再將該默認對象綁定

到表銷售的列包裝數(shù)上,然后插入數(shù)據(jù)。

(16)建立表商品1,字段為商品序號和商品名稱,表中

“商品序號”為自動編號屬性,然后再該表中插入數(shù)據(jù),

注意不能向“商品序號”插入數(shù)據(jù)。

第8章實現(xiàn)數(shù)據(jù)的完整性

命令說明:

(l)NOTFORREPLICATION:該選項表示在復(fù)制表時禁

用核查約束。

(2)CHECK:該關(guān)鍵字表示定義的約束為核查約束。

(3)條件表達式:為核查準(zhǔn)則,一般是條件表達式,

與WHERE子句中的查詢條件表達式類似,可以采用:算術(shù)

表達式,如:數(shù)量>1000,邏輯表達式,如:s數(shù)量

>1000AND數(shù)量〈3000

LIKE子句,如:編號LIKEla-z][0-9][0-9][10-9]9

IN或NOTIN,如:性別(M,F,)

BETWEEN或NOTBETWEEN,如:數(shù)量BETWEEN1000AND

3000

第8章實現(xiàn)數(shù)據(jù)的完整性

3.更改表的核查約束

[實例8.11]在實例8.10所建立的表圖書中插入一

列包裝數(shù),要求該列為1位整數(shù),且取值范圍在

1?6之間,并在該列設(shè)置核查約束圖書檢查約束

2,以實現(xiàn)檢查包裝數(shù)輸入數(shù)據(jù)正確性。

操作步驟:

ADD包裝數(shù)tmymtCONSTRAINT圖書檢查約束2

CHECKN>JTFORREPLICAT工ON:包裝數(shù)>0ANL>包裝數(shù)47)

GO……?…'

41

I■命令己成功完成。

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

歸納分析:

在現(xiàn)有表中添加新的一列,該列具有核查約

束。

命令格式:

ALTERTABLE表名

ADD列名數(shù)據(jù)類型

[CONSTRAINT檢查約束名]

CHECK[NOTFORREPLICATION]

(檢查約束條件)

4.刪除核查約束

刪除核查約束的語法與刪除主鍵約束相同。

f>

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

8.2.4外健約束FOREIGNKEY

1.使用企業(yè)管理器管理外鍵約束

[實例8.12]使用企業(yè)管理器創(chuàng)建學(xué)生成績表和學(xué)

生信息表的FOREIGNKEY約束。

操作步驟:

7q

第章實現(xiàn)數(shù)據(jù)的完整性

一8」

2.在T-SQL中創(chuàng)建外鍵約束

[實例8.13]建表圖書,其中列編號具有外鍵約束名

為圖書.約束,它引自表學(xué)生圖書的對應(yīng)同名歹限

操作步驟:

IFEXISTS'SELECTnameFROMsysobjects

WHEREname=’圖書'ANDtype='IT

DROPTABLE圖書

GO

CREATETABLE圖書

(編號char(6)CONSTRAINT圖書約束FOREIGNKEY

REFERENCES學(xué)生圖書(編號;,姓名chart6:??

GO

L11______________________________________________________

命令已成功完成O

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

歸納分析:

外鍵是最能體現(xiàn)關(guān)系型數(shù)據(jù)庫引用完整性特點的約束。

將一個表的一列(或列組合)定義為引用其他表的主鍵或

惟一約束列,則引用表中的這個列(或列組合)就稱為外

鍵。被引用的表稱為主鍵約束(或惟一約束)表;引用表

稱為外鍵約束表。外鍵的這種引用關(guān)系如圖&11所示。

命令格式:

CREATETABLE表名

(列名數(shù)據(jù)類型

[CONSTRAINT約束名]

FOREIGNKEYREFERENCES外鍵表名(對應(yīng)列名)

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

命令說明:

外鍵表名(對應(yīng)列名):必須是主鍵或惟一約束列。

關(guān)于外鍵有如下幾點需要注意:

(1)由外鍵所引用的列(或列組合)必須是主鍵或具有惟一

約束的列,其數(shù)據(jù)值不能重復(fù)。

(2)外鍵列中的數(shù)據(jù)介許重復(fù)。

(3)外鍵也可以引用其自身所在表中的主鍵或惟一約束列,

這種引用稱為自引用。

(4)外鍵僅能引用同一數(shù)據(jù)庫下的某個表。

(5)一個表可以有多個外鍵約束。

(6)具有外鍵約束的列(或列組合),其數(shù)據(jù)類型及其列組

合中的列數(shù)必須與它所引用的主鍵或惟一約束列(或列組

合)相同,但列有不必一定和同。

第8章實現(xiàn)數(shù)據(jù)的完整性

3.更改表的外鍵約束

[實例8.14]在表圖書中增加一列圖書編號,該列具

有外鍵約束圖書—約束1,它引自表學(xué)生圖書中的

主鍵編號。

操作步驟:

I-ALTERTABLE圖書1

ADD圖書編號char(61

CONSTRAINT圖書約束1FOREIGNKEY

REFERENCES學(xué)生圖書(編號)

ONDELETENOACTION

GO

N

k電印蜘完成。

第8章實現(xiàn)數(shù)據(jù)的完整性

歸納分析:

修改或刪除外鍵所對應(yīng)的主鍵時,都將受到外鍵約束關(guān)

系的限制而使該操作不可實現(xiàn)。

例如,假設(shè)學(xué)生圖書表與圖書表具有外鍵關(guān)系,如

果在學(xué)生圖書表中刪除一條記錄,而由于這條記錄的主

鍵學(xué)生圖書在圖書表中被使用,則將導(dǎo)致這兩個表之間

關(guān)聯(lián)的完整性被破壞,圖書表中該姓名等記錄因為與學(xué)

生圖書表中的數(shù)據(jù)沒有鏈接而變得孤立了。

外鍵約束防止了這種情況的發(fā)生。如果主鍵表中數(shù)

據(jù)的更改使之與外鍵表中數(shù)據(jù)的鏈接失效,則這種更改

是不能實現(xiàn)的,從而確保了引用完整性。若要成功地更

改或刪除外鍵約束所對應(yīng)的主鍵行記錄,則可以先在外

鍵表中刪除或更改外鍵數(shù)據(jù),然后將外鍵鏈接到另一個

不同的主鍵數(shù)據(jù)上去。同樣,刪除主鍵所在表時,必須

首先刪除該主鍵所對應(yīng)的外鍵所在表,或刪除外鍵關(guān)

系。

第8章實現(xiàn)數(shù)據(jù)的完整性

命令格式:

ALTERTABLE表名

(ADD列名數(shù)據(jù)類型

[[CONSTRAINT約束名]

FOREIGNKEYREFERENCES外鍵表名(對應(yīng)列名)

第8章實現(xiàn)數(shù)據(jù)的完整性

8.2.5默認值約束

1.使用企業(yè)管理器管理默認值約束

[實例8.15]在企業(yè)管理器中將學(xué)生庫中的圖書信

息表中借書時間,設(shè)置默認值為‘2007年01月01

日'。

操作步驟:

;m2:表"圖書信且PflMMK,位置基學(xué)生沖'FHISHI;%3:設(shè)計苦圖書僖旦一?,1□!x

明至亶跡圜例!?物I卻累市(?=

姓名1圖書名稱1借書時間還書時間1惜書數(shù)量1編號列名數(shù)據(jù)類型長度允許空

張曉明雪山飛弧2006-12-1<NULL>100115?姓名varchar10

紅色之旅2007-1-1<NULL>10012一圖書名稱varchar10

紅樓夢2007-1-1<WJLL>20013

1借書時間datetime8V

2007-1-1<HULL>10014,Ll

_(還書時間datetime8

描述

默認值C2007-1-1')

第8章實現(xiàn)數(shù)據(jù)的完整性

歸納分析:

當(dāng)向表中插入一行數(shù)據(jù)時,若沒有指定其中某一列字段

的數(shù)值,則該字段的數(shù)值按如下次序取值:

若該字段定義有默認值,則系統(tǒng)將默認值插入字段。

若該字段定義沒有默認值,但允許空,則插入空值。

若該字段定義沒有默認值,又不允許空,則報錯。

顯然,對于非空字段,默認值極為重要。默認值有

兩種設(shè)置方式,默認值約束與默認對象。默認值約束是

對象級的,其作用范圍僅限于一個表,刪除表則刪除默

認值約束。默認值對象是數(shù)據(jù)庫級的,作為數(shù)據(jù)庫對象

單獨存在于數(shù)據(jù)庫中,需要時可以綁定到任何一個表中。

f>

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

創(chuàng)建表時定義默認值約束。

命令格式:

CREATETABLE表名

(列名數(shù)據(jù)類型‘

[CONSTRAINT默認名]

DEFAULT表達式)

第8章實現(xiàn)數(shù)據(jù)的完整性

一」

命令說明:

(l)DEFAULT關(guān)鍵字用以指明其后的常數(shù)表達式,為該列

的默認值,常數(shù)表達式中除了允許使用常數(shù)、NULL值和

表達式作為默認值外,還可以使用SQLServer系統(tǒng)少數(shù)

如current_user、system_user、user、getdate()等的

值作為默認值。默認值的數(shù)據(jù)類型必須與列定義的數(shù)據(jù)

類型一致,且不能與CHECK約束矛盾。

(2)DEFAULT約束定義的默認值僅在執(zhí)行INSERT操作插

入數(shù)據(jù)時生效。

(3)一列至多有一個默認值,其中包括NULL值。

(4)具有IDENTITY屬性或TIMESTAMP數(shù)據(jù)類型屬性的列

不能使用默認值,text與image類型的列只能以NULL為默

認值。

第8章實現(xiàn)數(shù)據(jù)的完整性

2.更改表的默認約束

[實例8.16]創(chuàng)建圖書登記表,列名有圖書編號、

圖書名稱、借閱次數(shù)和圖書類別。借閱次數(shù)設(shè)置

默認值為1。然后在圖書登記中添加借閱日期列,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論