




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大班冬季交通安全課件
- 行政事業(yè)單位合同
- 項目推進時間表與工作計劃書
- 泥工裝修詳細合同
- 大型體育賽事組織協(xié)議
- 能源互聯(lián)網(wǎng)項目戰(zhàn)略合作協(xié)議
- 農(nóng)業(yè)機械維修技術(shù)作業(yè)指導(dǎo)書
- 季度運營策略及任務(wù)部署會議紀(jì)要
- 設(shè)計行業(yè)設(shè)計方案修改免責(zé)協(xié)議
- 企業(yè)互聯(lián)網(wǎng)應(yīng)用服務(wù)推廣合作協(xié)議
- 1.1區(qū)域及其類型-課件
- 小學(xué)生衛(wèi)生知識健康教育精課件
- 小學(xué)生課程表模板可編輯78
- 政府招商大使合作協(xié)議書
- 營養(yǎng)科專業(yè)知識考核試卷
- AQ/T 9009-2015 生產(chǎn)安全事故應(yīng)急演練評估規(guī)范(正式版)
- 個人租房合同范本-房屋租賃合同范本
- NB-T47044-2014電站閥門-標(biāo)準(zhǔn)
- 火鍋店運營管理的問題與解決方案
- 安全技術(shù)管理專業(yè)畢業(yè)實習(xí)報告范文
- CJJ2-2008城市橋梁工程施工與質(zhì)量驗收規(guī)范
評論
0/150
提交評論