SQL第3章管理數(shù)據(jù)表_第1頁(yè)
SQL第3章管理數(shù)據(jù)表_第2頁(yè)
SQL第3章管理數(shù)據(jù)表_第3頁(yè)
SQL第3章管理數(shù)據(jù)表_第4頁(yè)
SQL第3章管理數(shù)據(jù)表_第5頁(yè)
已閱讀5頁(yè),還剩74頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1第3章管理數(shù)據(jù)表及數(shù)據(jù)完整性3.1SQLServer表的概念和數(shù)據(jù)類(lèi)型3.2創(chuàng)建和管理數(shù)據(jù)表3.3完整性的概念和約束類(lèi)型

3.4約束的創(chuàng)建和查看3.5刪除約束、使用規(guī)則和使用默認(rèn)值23.1SQLServer表的概念1.表的概念

在SQLServer數(shù)據(jù)庫(kù)中,表定義為列的集合,與Excel電子表格相似,數(shù)據(jù)在表中是按行和列的格式組織排列的。每行代表唯一的一條記錄,而每列代表記錄中的一個(gè)域。學(xué)號(hào)姓名性別出生日期系部入學(xué)時(shí)間000101張三男1980計(jì)算機(jī)2000000201李偉男1981經(jīng)濟(jì)管理2000010101王麗女1982數(shù)學(xué)2001關(guān)系名(表名)屬性(列或字段)關(guān)系模式學(xué)生表

屬性名記錄或元組主鍵(碼)33.1SQLServer表的概念2.表的設(shè)計(jì)在SQLServer創(chuàng)建表有如下限制:每個(gè)數(shù)據(jù)庫(kù)里最多有20億個(gè)表。每個(gè)表上最多可以創(chuàng)建一個(gè)聚集索引和249個(gè)非聚集索引。每個(gè)表最多可以配置1024個(gè)字段。每條記錄最多可以占8060B,但不包括text字段和image字段。

4第3章管理數(shù)據(jù)表3.1SQLServer表的概念3.2SQLServer中的數(shù)據(jù)類(lèi)型3.3創(chuàng)建數(shù)據(jù)表3.4管理數(shù)據(jù)表53.2SQLServer2005數(shù)據(jù)類(lèi)型1.二進(jìn)制數(shù)據(jù)2.字符型數(shù)據(jù)類(lèi)型3.Unicode字符數(shù)據(jù)4.日期時(shí)間型數(shù)據(jù)5.整數(shù)型數(shù)據(jù)6.精確數(shù)值型數(shù)據(jù)7.近似數(shù)值類(lèi)型8.貨幣數(shù)據(jù)9.位類(lèi)型數(shù)據(jù)

63.2SQLServer2005數(shù)據(jù)類(lèi)型1.二進(jìn)制數(shù)據(jù)功能:常用于存儲(chǔ)圖像等數(shù)據(jù),包括長(zhǎng)二進(jìn)制數(shù)據(jù)binary、變長(zhǎng)二進(jìn)制數(shù)據(jù)varbinary和image三種。類(lèi)型存儲(chǔ)空間大小

(字節(jié))最大取值說(shuō)明Binary(n)N+4存儲(chǔ)空間固定N∈[1,8000]默認(rèn)為1輸入不足n+4字節(jié),補(bǔ)足后存儲(chǔ);超過(guò)則截?cái)嗪蟠鎯?chǔ).Varbinary(n)變長(zhǎng)存儲(chǔ)數(shù)據(jù)N∈[1,8000]默認(rèn)為1輸入不足n+4字節(jié),按實(shí)際長(zhǎng)度存儲(chǔ);超過(guò)則截?cái)嗪蟠鎯?chǔ).image231-173.2SQLServer2005數(shù)據(jù)類(lèi)型2.字符型數(shù)據(jù)類(lèi)型功能:用于存儲(chǔ)漢字、英文字母、數(shù)字、標(biāo)點(diǎn)和各種符號(hào),必須由英文單引號(hào)括起來(lái)。類(lèi)型存儲(chǔ)空間大小(字節(jié))最大取值說(shuō)明char(n)固定長(zhǎng)度存儲(chǔ)字符串N∈[1,8000]默認(rèn)為1輸入不足n個(gè)字節(jié),補(bǔ)足后存儲(chǔ);超過(guò)則截?cái)嗪蟠鎯?chǔ).varchar(n)按變長(zhǎng)存儲(chǔ)字符串N∈[1,8000]默認(rèn)為1輸入不足n字節(jié),按實(shí)際長(zhǎng)度存儲(chǔ);超過(guò)則截?cái)嗪蟠鎯?chǔ).text231-1個(gè)字節(jié)83.2SQLServer2005數(shù)據(jù)類(lèi)型3.Unicode字符數(shù)據(jù)功能:存放Unicode字符數(shù)據(jù).支持的字符范圍更大,存儲(chǔ)所需要的空間也更大。類(lèi)型存儲(chǔ)空間大小(字節(jié))最大取值說(shuō)明nchar(n)固定長(zhǎng)度存儲(chǔ)字符串N∈[1,4000]默認(rèn)為1輸入不足n個(gè)字節(jié),補(bǔ)足后存儲(chǔ);超過(guò)則截?cái)嗪蟠鎯?chǔ).nvarchar(n)按變長(zhǎng)存儲(chǔ)字符串N∈[1,4000]默認(rèn)為1輸入不足n字節(jié),按實(shí)際長(zhǎng)度存儲(chǔ);超過(guò)則截?cái)嗪蟠鎯?chǔ).ntext230-1個(gè)字節(jié)93.2SQLServer2005數(shù)據(jù)類(lèi)型4.日期時(shí)間型數(shù)據(jù)功能:用于存儲(chǔ)日期和時(shí)間數(shù)據(jù)。類(lèi)型存儲(chǔ)范圍datetime存儲(chǔ)從1753年1月1日到9999年12月31日的日期和時(shí)間數(shù)據(jù),精確度為3%秒。smalldatetime存儲(chǔ)從1900年1月1日到2079年6月6日的日期和時(shí)間數(shù)據(jù),精確度為分.注意:當(dāng)使用日期格式數(shù)據(jù)時(shí),在字符串中可以使用斜杠’/’,連字符’-’或句號(hào).作為分隔符。在SQLSERVER2008中增加了date、time、datetime2、datetimeoffset類(lèi)型103.2SQLServer2005數(shù)據(jù)類(lèi)型5.整數(shù)型數(shù)據(jù)功能:用于存儲(chǔ)整型數(shù)據(jù)。類(lèi)型存儲(chǔ)大小(字節(jié))數(shù)據(jù)范圍bigint8-263~263-1int4-231~231-1smallint2-215~215-1tinyint10~255113.2SQLServer2005數(shù)據(jù)類(lèi)型6.精確數(shù)值型數(shù)據(jù)

功能:用于存儲(chǔ)帶有小數(shù)點(diǎn)且小數(shù)點(diǎn)后位數(shù)確定的實(shí)數(shù)。類(lèi)型說(shuō)明數(shù)據(jù)范圍decimal(p,[s])p指定存儲(chǔ)數(shù)據(jù)的最大位數(shù),不含小數(shù)點(diǎn),p∈[1,38];s指定存儲(chǔ)的小數(shù)的最大位數(shù),s∈[0,p].默認(rèn)小數(shù)位是0。-1038+1~1038-1numeric(p,[s])123.2SQLServer2005數(shù)據(jù)類(lèi)型7.近似數(shù)值類(lèi)型功能:用于存儲(chǔ)浮點(diǎn)數(shù)。

類(lèi)型說(shuō)明數(shù)據(jù)范圍float(n)n為精度,n∈[1,53]存放-1.79E+308~1.79E+308數(shù)值范圍內(nèi)的浮點(diǎn)數(shù)real存儲(chǔ)大小為4個(gè)字節(jié)從-3.40E+38到3.40E+38之間的浮點(diǎn)數(shù)字?jǐn)?shù)據(jù)133.2SQLServer2005數(shù)據(jù)類(lèi)型8.貨幣數(shù)據(jù)類(lèi)型存儲(chǔ)大小數(shù)據(jù)范圍money8個(gè)字節(jié)貨幣數(shù)據(jù)值介于-263與263-1之間,精確到貨幣單位的千分之十smallmoney4個(gè)字節(jié)貨幣數(shù)值介于-214,748.3648~+214.748,3647之間,精確到貨幣單位的千分之十143.2SQLServer2005數(shù)據(jù)類(lèi)型9.位類(lèi)型數(shù)據(jù)功能:位類(lèi)型數(shù)據(jù)用于存儲(chǔ)整數(shù),只能取

1、0

或NULL,常用于邏輯數(shù)據(jù)的存取。說(shuō)明:在位類(lèi)型的字段中輸入0和1之外的任何值,系統(tǒng)都會(huì)作為1來(lái)處理。如果一個(gè)表中有8個(gè)以下的位類(lèi)型數(shù)據(jù)字段,則系統(tǒng)會(huì)用一個(gè)字節(jié)存儲(chǔ)這些字段;如果表中有9個(gè)以上16個(gè)以下位類(lèi)型數(shù)據(jù)字段,則系統(tǒng)會(huì)用兩個(gè)字節(jié)來(lái)存儲(chǔ)這些字段。

15第3章管理數(shù)據(jù)表3.1SQLServer表的概念3.2SQLServer中的數(shù)據(jù)類(lèi)型3.3創(chuàng)建數(shù)據(jù)表3.4管理數(shù)據(jù)表163.3創(chuàng)建數(shù)據(jù)表1.使用SSMS創(chuàng)建表

創(chuàng)建表的步驟:1)定義表結(jié)構(gòu):給表的每一列取字段名,并確定每一列的數(shù)據(jù)類(lèi)型、數(shù)據(jù)長(zhǎng)度、列數(shù)據(jù)是否可以為空等。

2)設(shè)置約束:設(shè)置約束是為了限制該列輸入值的取值范圍,以保證輸入數(shù)據(jù)的正確性和一致性。

3)添加數(shù)據(jù):表結(jié)構(gòu)建立完成之后,就可以向表中輸入數(shù)據(jù)。

173.3創(chuàng)建數(shù)據(jù)表1.使用SSMS創(chuàng)建表

例1:請(qǐng)?jiān)趕tudent數(shù)據(jù)庫(kù)中建立“學(xué)生基本信息”表的結(jié)構(gòu)。注:主鍵的字段值不能為空,且字段值在表中必須唯一字段名字段數(shù)據(jù)類(lèi)型長(zhǎng)度是否為空約束學(xué)號(hào)char8否主鍵姓名char10否

性別char2是

默認(rèn)值‘男’出生年月datetime8是

籍貫varchar20是

家庭住址varchar60是電話char15是

所屬班級(jí)char8是

183.3創(chuàng)建數(shù)據(jù)表2.使用T-SQL語(yǔ)句創(chuàng)建表

1)語(yǔ)法:CREATETABLE[database_name.[owner].|owner.]table_name({column_definition>}|[{PRIMARYKEY|UNIQUE}[,…N]])<column_definttion>::={column_name

data_type}[[DEFAULT

constraint_expression]|[IDENTITY[(seed,increment)]]][<column_constraint>][,…n]193.3創(chuàng)建數(shù)據(jù)表語(yǔ)法注釋?zhuān)骸馾atabase_name:指定創(chuàng)建的表所在的數(shù)據(jù)庫(kù),在當(dāng)前數(shù)據(jù)庫(kù)創(chuàng)建表時(shí)該項(xiàng)可以省略。●

owner:指定表的擁有者,如果表的擁有者為當(dāng)前用戶(hù),該項(xiàng)可以省略?!?/p>

table_name:指定新建表的名稱(chēng)?!?/p>

column_definttion:為表中字段的定義表達(dá)式?!?/p>

column_name:為表中的字段名?!?/p>

data_type:為字段的數(shù)據(jù)類(lèi)型?!?/p>

PRIMARYKEY:為主鍵約束關(guān)鍵字?!?/p>

UNIQUE:為唯一約束關(guān)鍵字?!?/p>

DEFAULT:為默認(rèn)約束關(guān)鍵字?!?/p>

IDENTITY:為自動(dòng)編號(hào)標(biāo)識(shí)?!?/p>

Seed:為自動(dòng)標(biāo)識(shí)的開(kāi)始值,默認(rèn)為1?!?/p>

Increment:為自動(dòng)編號(hào)的步長(zhǎng)或增量,默認(rèn)為1。203.3創(chuàng)建數(shù)據(jù)表

例2:創(chuàng)建帶有參照約束的學(xué)生表stud_info,學(xué)生表的表結(jié)構(gòu)定義如下表所示?!皩W(xué)號(hào)”字段為學(xué)生表的主鍵。字段名字段數(shù)據(jù)類(lèi)型長(zhǎng)度是否為空約束學(xué)號(hào)char8否主鍵姓名char10否

性別char2是

默認(rèn)值‘男’出生年月datetime8是

籍貫varchar20是

家庭住址varchar60是電話char15是

所屬班級(jí)char8是

213.3創(chuàng)建數(shù)據(jù)表創(chuàng)建“學(xué)生”表的代碼如下:USEStudentGO

CREATETABLEstud_info(學(xué)號(hào)char(8)PRIMARYKEY,姓名char(10)NOTNULL,性別char(2)DEFAULT‘男’,出生年月datetime,籍貫varchar(20),家庭住址varchar(60),電話char(15),所屬班級(jí)char(8))GO223.3創(chuàng)建數(shù)據(jù)表例3:在學(xué)生管理數(shù)據(jù)庫(kù)中用T-SQL語(yǔ)句創(chuàng)建一個(gè)學(xué)生成績(jī)表

stud_score

,表結(jié)構(gòu)如下,其中包含標(biāo)識(shí)列和計(jì)算列。233.3創(chuàng)建數(shù)據(jù)表實(shí)現(xiàn)的T-SQL語(yǔ)句:CREATETABLEstud_score(

Scoreid

intIDENTITY(1,1)PRIMARYKEY,

Stud_nochar(8)NOTNULL,MathintDEFAULT0,ChineseintDEFAULT0,ComputerintDEFAULT0,

total_scoreASMath+Chinese+computer)GO243.3創(chuàng)建數(shù)據(jù)表設(shè)置列的標(biāo)識(shí)屬性時(shí),應(yīng)注意:該列的數(shù)據(jù)類(lèi)型必須是decimal,int,numeric,smallint,bigint,tinyint中的一種,才可以設(shè)置標(biāo)識(shí)屬性。標(biāo)識(shí)列不允許為空值,也不能包含默認(rèn)屬性。每個(gè)表中只允許有一個(gè)標(biāo)識(shí)列,并且不可以修改。設(shè)置計(jì)算列時(shí),應(yīng)注意:在計(jì)算列中不能添加如primarykey、unique、foreignkey、default等約束條件。不能對(duì)計(jì)算列進(jìn)行賦值。25第3章管理數(shù)據(jù)表3.1SQLServer表的概念3.2SQLServer中的數(shù)據(jù)類(lèi)型3.3創(chuàng)建數(shù)據(jù)表3.4管理數(shù)據(jù)表

263.4管理數(shù)據(jù)表

3.4.1修改表結(jié)構(gòu)

3.4.2刪除數(shù)據(jù)表

3.4.3查看數(shù)據(jù)表273.4.1修改表結(jié)構(gòu)1使用SSMS修改表結(jié)構(gòu)例4:修改“student”庫(kù)中“學(xué)生基本信息表”表結(jié)構(gòu)。283.4.1修改表結(jié)構(gòu)2使用T-SQL語(yǔ)言修改表1)語(yǔ)法:ALTERTABLE

table_name

{[ALTERCOLUMN

column_name

{new_data_type[(precision[,scale])][NULL|NOTNULL]}]|ADD{[<column_definition>]}[,...n]|DROP{[CONSTRAINT]constraint_name

|COLUMN

column}[,...n]}[[DEFAULT

constant_expression][WITHVALUES]|[IDENTITY[(seed,increment)]]

293.4.1修改表結(jié)構(gòu)2)語(yǔ)法注釋?zhuān)?/p>

ALTERCOLUMN:修改表列屬性的子句

ADD:增加列或約束的子句

DROPCOLUMN:刪除表列的子句

table_name:需要修改表的表格名稱(chēng)

column_name:希望增加的字段名

data_type:需要增加的字段的數(shù)據(jù)類(lèi)型名

collation_name:排序規(guī)則名

303.4.1修改表結(jié)構(gòu)例5:使用T-SQL代碼修改學(xué)生基本信息表stud_info結(jié)構(gòu),增加字段“QQ號(hào)碼”,數(shù)據(jù)類(lèi)型為varchar,長(zhǎng)度為15,可為空;增加入學(xué)時(shí)間字段,時(shí)間/日期類(lèi)型,默認(rèn)時(shí)間為‘2006-9-1’。USEstudentGOALTERTABLEstud_infoADDQQ號(hào)碼varchar(15)GOALTERTABLEstud_infoADD入學(xué)時(shí)間datetimeDEFAULT‘2006-9-1’GO313.4.1修改表結(jié)構(gòu)例6:使用T-SQL代碼修改學(xué)生基本信息表stud_info結(jié)構(gòu),修改字段“家庭住址”的長(zhǎng)度為100。實(shí)現(xiàn)的T-SQL語(yǔ)句USEstudentGOALTERTABLEstud_infoALTERCOLUMN家庭住址varchar(100)GO323.4.1修改表結(jié)構(gòu)例7:使用T-SQL語(yǔ)句刪除學(xué)生基本信息表stud_info的QQ號(hào)碼字段。實(shí)現(xiàn)的T-SQL語(yǔ)句USEstudentGOALTERTABLEstud_infoDROPCOLUMNQQ號(hào)碼GO

333.4管理數(shù)據(jù)表

3.4.1修改表結(jié)構(gòu)

3.4.2刪除數(shù)據(jù)表

3.4.3查看數(shù)據(jù)表343.4.2刪除數(shù)據(jù)表1使用SSMS刪除數(shù)據(jù)表2使用T-SQL語(yǔ)句刪除數(shù)據(jù)表語(yǔ)法格式為:

DROPTABLEtable_name例8:使用T-SQL語(yǔ)句刪除學(xué)生基本信息表。實(shí)現(xiàn)的T-SQL語(yǔ)句

USEstudentGODROPTABLE學(xué)生基本信息表

GO353.4管理數(shù)據(jù)表

3.4.1修改表結(jié)構(gòu)

3.4.2刪除數(shù)據(jù)表

3.4.3查看數(shù)據(jù)表363.4.3

查看數(shù)據(jù)表1使用SSMS對(duì)象資源管理器查看表屬性信息。在對(duì)象資源管理器中,右鍵單擊“student”數(shù)據(jù)庫(kù)的學(xué)生基本信息表stud_info,從彈出的快捷菜單中選擇“屬性”命令。

373.4.3

查看數(shù)據(jù)表2使用T-SQL語(yǔ)句查看數(shù)據(jù)表

Execsp_help

table_name

例9:查看學(xué)生基本信息表stud_info

屬性信息。

ExecSp_help

stud_info383.5完整性的概念完整性的概念

數(shù)據(jù)完整性指存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)正確無(wú)誤并且相關(guān)數(shù)據(jù)具有一致性。數(shù)據(jù)完整性可分為以下四種:1、實(shí)體完整性:要求在表中不能存在兩條完全相同的記錄。實(shí)現(xiàn)實(shí)體完整性的方法有:主鍵約束、唯一約束、指定IDENTITY屬性。393.5完整性的概念2、域完整性:要求向表中指定列輸入的數(shù)據(jù)必須具有正確的數(shù)據(jù)類(lèi)型、格式及有效的數(shù)據(jù)范圍。

實(shí)現(xiàn)域完整性的方法有:檢查約束、外鍵約束、非空約束、規(guī)則及在建表時(shí)設(shè)置的數(shù)據(jù)類(lèi)型。3、參照完整性:指作用于有關(guān)聯(lián)的表通過(guò)主鍵和外鍵或主鍵和惟一鍵間的關(guān)系,使表中的鍵值在相關(guān)表中保持一致。

實(shí)現(xiàn)參照完整性的方法有:外鍵約束.4、用戶(hù)定義的完整性:指應(yīng)用領(lǐng)域需要遵守的約束條件。實(shí)現(xiàn)用戶(hù)定義完整性的方法包括規(guī)則、觸發(fā)器和存儲(chǔ)過(guò)程等403.6約束的類(lèi)型

1.NOTNULL(非空)約束

2.

PRIMARYKEY(主鍵)約束3.

UNIQUE(惟一)約束4.

CHECK(檢查)約束

5.FOREIGNKEY(外?。┘s束

6.DEFAULT(默認(rèn))約束

413.6約束的創(chuàng)建使用CREATETABLE

或者ALTERTABLECREATETABLE

是在創(chuàng)建表時(shí)創(chuàng)建約束ALTERTABLE

是在一個(gè)已有的表上添加約束可添加單列或多列約束若約束應(yīng)用于單列,稱(chēng)為列級(jí)約束若約束引用了多列,稱(chēng)為表級(jí)約束,一般此類(lèi)約束都是在表創(chuàng)建完成后再進(jìn)行添加約束.423.6約束的創(chuàng)建CREATETABLE

table_name

({column_name

data_type}[...n]}

[[DEFAULT

constant_expression]

]

<[CONSTRAINTconstraint_name

]

{

|[{PRIMARYKEY|UNIQUE}

[CLUSTERED|NONCLUSTERED]

|[[FOREIGNKEY]

REFERENCESref_table[(ref_column

)]

|CHECK]

(logical_expression

)}>

433.6.1

創(chuàng)建主鍵約束1.創(chuàng)建主鍵可以在建表時(shí)使用CREATETABLE

命令完成。

[示范案例1]

在student庫(kù)中,建立一個(gè)民族表(民族代碼,民族名稱(chēng)),將民族代碼指定為主鍵。其程序清單如下:CREATETABLEnative(native_id

char(2)CONSTRAINT

pk_mzdm

PRIMARYKEY,

Native_name

varchar(30)NOTNULL)

GO443.6.1

創(chuàng)建主鍵約束2.

為已存在的表創(chuàng)建主鍵約束,其語(yǔ)法格式如下:

ALTERTABLE

table_name

ADDCONSTRAINT

constraint_name

PRIMARYKEY[CLUSTERED|NONCLUSTERED]

{(column[,…n])}453.6.1

創(chuàng)建主鍵約束[示范案例2]

使用T-SQL語(yǔ)句在學(xué)生信息管理數(shù)據(jù)庫(kù)“班級(jí)”表class中,指定字段“班級(jí)代號(hào)”class_id為表的主鍵。

程序清單如下:

ALTERTABLEclass

ADDCONSTRAINT

pk_bjbh

PRIMARYKEY(class_id)463.6.1

創(chuàng)建主鍵約束每張表只能有一個(gè)

PRIMARYKEY約束輸入的值必須是惟一的不允許空值將在指定列上創(chuàng)建惟一索引473.6.2創(chuàng)建惟一約束

為存在的表創(chuàng)建惟一約束,其語(yǔ)法格式如下:

ALTERTABLE

table_name

ADDCONSTRAINT

constraint_name

UNIQUE

[CLUSTERED|NONCLUSTERED]

{(column[,…n])}483.6.2創(chuàng)建惟一約束[示范案例3]

使用T-SQL語(yǔ)句在學(xué)生信息管理數(shù)據(jù)庫(kù)student中,為民族表native中的“民族名稱(chēng)”native_name字段創(chuàng)建一個(gè)惟一約束。程序清單如下:

ALTERTABLE

native

ADDCONSTRAINT

uk_mzmz

UNIQUE(native_name)GO493.6.2創(chuàng)建惟一約束允許一個(gè)空值在一個(gè)表上允許多個(gè)UNIQUE

約束可在一個(gè)或者多個(gè)列上定義是通過(guò)一個(gè)惟一索引強(qiáng)制約束的503.6.3創(chuàng)建檢查約束

使用SQL語(yǔ)句為已存在的表創(chuàng)建檢查約束,其語(yǔ)法格式如下:

ALTERTABLE

table_name

ADDCONSTRAINT

constraint_name

CHECK

(logical_expression)

513.6.3創(chuàng)建檢查約束

[示范案例4]

使用T-SQL語(yǔ)句在學(xué)生信息管理數(shù)據(jù)庫(kù)student中,為學(xué)生成績(jī)表score中的成績(jī)“Sscore”字段創(chuàng)建一個(gè)檢查約束,以保證輸入的數(shù)據(jù)大于等于0而小于等于100。程序清單如下:

ALTERTABLE

score

ADDCONSTRAINT

ck_chengji

CHECK

(Sscore>=0andSscore<=100)

523.6.3創(chuàng)建檢查約束在每次執(zhí)行

INSERT

或者

UPDATE

語(yǔ)句的時(shí)候校驗(yàn)數(shù)據(jù)值。可以引用同表中的其他列,但不能引用其他表中的列。不能包含子查詢(xún)。列級(jí)CHECK約束可省略名字,讓系統(tǒng)自動(dòng)生成。表達(dá)式可以用AND以及OR連接以表示復(fù)雜邏輯。CHECK約束中可使用系統(tǒng)函數(shù)。533.6.4

創(chuàng)建默認(rèn)約束

使用SQL語(yǔ)句為已存在的表創(chuàng)建默認(rèn)約束,其語(yǔ)法格式如下:

ALTERTABLE

table_name

ADDCONSTRAINT

constraint_name

DEFAULT

constant_expression

[FOR

column_name]

543.6.4

創(chuàng)建默認(rèn)約束

[示范案例5]

使用T-SQL語(yǔ)句在學(xué)生信息管理數(shù)據(jù)庫(kù)student中,為教師表teachers中的學(xué)歷tdegree字段創(chuàng)建一個(gè)默認(rèn)約束,其默認(rèn)值為‘本科’

。程序清單如下:

ALTERTABLE

teachers

ADDCONSTRAINT

df_xueli

DEFAULT‘本科’

FOR

tdegree

553.6.4

創(chuàng)建默認(rèn)約束DEFAULT約束創(chuàng)建時(shí)將檢查表中的現(xiàn)存數(shù)據(jù)。DEFAULT約束只對(duì)INSERT語(yǔ)句有效。每列只能定義一個(gè)DEFAULT約束。不能和“標(biāo)識(shí)”屬性共同使用。為具有PRIMARYKEY或UNIQUE約束的列指定默認(rèn)值是沒(méi)有意義的。常量值外面可以加或者不加括號(hào),字符或者日期常量必須加上單引號(hào)或雙引號(hào)。563.6.5創(chuàng)建外鍵約束

使用SQL語(yǔ)句創(chuàng)建外鍵約束的語(yǔ)法格式為:

ALTERTABLE

table_name

ADDCONSTRAINT

constraint_name

FOREIGNKEY

(column_name[,…])

REFERENCES

ref_table[(ref_column_name[,…])

]573.6.5創(chuàng)建外鍵約束[示范案例6]

使用T-SQL語(yǔ)句在學(xué)生信息管理數(shù)據(jù)庫(kù)student中,為學(xué)生基本信息表stud_info中的“所屬班級(jí)”字段創(chuàng)建一個(gè)外鍵約束,引用班級(jí)表class的班級(jí)代碼class_id字段,從而保證輸入有效的班級(jí)代碼

。程序清單如下:

ALTERTABLE

stud_info

ADDCONSTRAINT

fk_bjdm

FOREIGNKEY(所屬班級(jí)

)

REFERENCES

class(class_id)

583.6.5創(chuàng)建外鍵約束提供了單列或多列的引用完整性。FOREIGNKEY子句中指定的列的個(gè)數(shù)和數(shù)據(jù)類(lèi)型必須和REFERENCES子句中指定的列的個(gè)數(shù)和數(shù)據(jù)類(lèi)型匹配。修改數(shù)據(jù)的時(shí)候,用戶(hù)必須在被FOREIGNKEY約束引用的表上具有SELECT或REFERENCES權(quán)限。若引用的是同表中的列,那么可只用REFERENCES子句而省略FOREIGNKEY子句。59總結(jié):使用約束的注意事項(xiàng)SQLServer

里的約束只是“最后防線”當(dāng)給一個(gè)表添加約束的時(shí)候,SQLServer

將檢查現(xiàn)有數(shù)據(jù)是否違反約束。建議創(chuàng)建約束的時(shí)候指定名稱(chēng),否則系統(tǒng)將為約束自動(dòng)產(chǎn)生一個(gè)復(fù)雜的名稱(chēng)。名稱(chēng)必須惟一,且符合SQLServer

標(biāo)識(shí)符的規(guī)則。603.7查看約束的定義

1.使用系統(tǒng)存儲(chǔ)過(guò)程查看約束信息2.使用SSMS查看約束信息

611.使用系統(tǒng)存儲(chǔ)過(guò)程查看約束信息

1)系統(tǒng)存儲(chǔ)過(guò)程sp_help用來(lái)查看約束的名稱(chēng)、創(chuàng)建者、類(lèi)型和創(chuàng)建時(shí)間,其語(yǔ)法格式為:

EXECsp_help

約束名稱(chēng)

2)如果約束存在文本信息,可以使用sp_helptext來(lái)查看,其語(yǔ)法格式為:

EXECsp_helptext

約束名稱(chēng)

例:使用系統(tǒng)存儲(chǔ)過(guò)程查看學(xué)生表上的約束ck_csrq的文本信息。其程序清單如下:

EXECsp_helptext

ck_csrq

3.7查看約束的定義

622.使用SSMS查看約束信息的步驟為:

1)在SSMS中,選擇要查看約束的表(如學(xué)生表),打開(kāi)表設(shè)計(jì)器。

2)在表設(shè)計(jì)器中可以查看主鍵約束、空值約束和默認(rèn)值約束。

3)在表設(shè)計(jì)器中,右擊鼠標(biāo),從彈出的快捷菜單中選擇“屬性”命令。彈出“屬性”對(duì)話框

4)在“屬性”對(duì)話框中通過(guò)切換選項(xiàng)卡,可以查看主鍵約束、外鍵約束與CHECK約束信息。

3.7查看約束的定義

633.8刪除約束

1.使用SSMS刪除表約束

2.使用DROP命令刪除表約束

643.8刪除約束1.使用SSMS刪除表約束在表設(shè)計(jì)器的窗口中,可以刪除主鍵,去掉默認(rèn)值。在表設(shè)計(jì)器的“屬性”窗口中,可以通過(guò)切換選項(xiàng)卡,選擇約束名稱(chēng),單擊“刪除”按鈕,分別刪除主鍵約束、外鍵約束和CHECK約束。

653.8刪除約束662.使用DROP命令刪除表約束在T-SQL語(yǔ)言中,也可以方便的刪除一個(gè)或多個(gè)約束,其語(yǔ)法格式為:

ALTERTABLE

table_name

DROPCONSTRAINT

constraint_name[,…n]3.8刪除約束67[示范案例7]

使用T-SQL語(yǔ)句刪除Northwind數(shù)據(jù)庫(kù)中CK_Quantity約束。程序清單如下:

ALTERTABLE[orderdetails]

DROPCONSTRAINT

ck_quantity3.8刪除約束68決定使用何種約束完整性類(lèi)型約束類(lèi)型描述域DEFAULT如果在INSERT語(yǔ)句中未顯式提供值,則指定為列提供的值CHECK指定列中可接受的數(shù)據(jù)值REFERENCES基于其他表中的列的值,指定可接受的用于更新的數(shù)據(jù)值實(shí)體PRIMARYKEY惟一標(biāo)識(shí)每一列,確保用戶(hù)沒(méi)有輸入重復(fù)的值。同時(shí)創(chuàng)建一個(gè)索引以增強(qiáng)性能。不允許空值UNIQUE確保在非主鍵列中不輸入重復(fù)值,并創(chuàng)建一個(gè)索引以增強(qiáng)性能。允許空值引用FOREIGNKEY定義一列或多列的值與同表或其他表中主鍵的值匹配CHECK基于同表中其他列的值,指定列中可接受的數(shù)據(jù)值69規(guī)則與CHECK約束的比較1、check約束比規(guī)則更簡(jiǎn)明,它可以在建表時(shí)由createtable語(yǔ)句將其作為表的一部分進(jìn)行指定。2、規(guī)則需要單獨(dú)創(chuàng)建,然后綁定到列上。3、在一個(gè)列上只能應(yīng)用一個(gè)規(guī)則,但是卻可以應(yīng)用到多個(gè)check約束。4、規(guī)則的優(yōu)點(diǎn)是:一個(gè)規(guī)則只需要定義一次就已可以多次應(yīng)用,可以應(yīng)用到多個(gè)表或多個(gè)列,還可以應(yīng)用到用戶(hù)定義的數(shù)據(jù)類(lèi)型上。

3.9使用規(guī)則703.9使用規(guī)則1.創(chuàng)建規(guī)則的命令是CREATERULE,語(yǔ)法格式為:

CREATERULE

rule_name

AS

condition_expression

2.綁定規(guī)則其語(yǔ)法格式為:

[EXECUTE]sp_bindrule

‘規(guī)則名稱(chēng)’,’表名.字段名’|’

自定義數(shù)據(jù)類(lèi)型名’713.9使用規(guī)則[示范案例8]

在Northwind數(shù)據(jù)庫(kù)中創(chuàng)建規(guī)則,名稱(chēng)為region_

溫馨提示

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

評(píng)論

0/150

提交評(píng)論