版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆畢業(yè)生就業(yè)三方合同協(xié)議書(shū)樣本
- 個(gè)人租房合同協(xié)議書(shū)范文
- 不可撤銷(xiāo)合同擔(dān)保書(shū)范本
- 專(zhuān)利實(shí)施許可合同
- 個(gè)人土地交換合同范本
- 三甲醫(yī)院醫(yī)生專(zhuān)業(yè)技能提升合同
- 2025年室內(nèi)設(shè)計(jì)師離職競(jìng)業(yè)禁止協(xié)議
- 2025年倉(cāng)庫(kù)租用協(xié)議
- 三方共贏投資項(xiàng)目合作合同
- 業(yè)主與合同相關(guān)的支付保函解析:版
- 第一屆山東省職業(yè)能力大賽濟(jì)南市選拔賽制造團(tuán)隊(duì)挑戰(zhàn)賽項(xiàng)目技術(shù)工作文件(含樣題)
- 尿毒癥替代治療
- 【課件】2025屆高考英語(yǔ)一輪復(fù)習(xí)小作文講解課件
- 基底節(jié)腦出血護(hù)理查房
- 糧食貯藏課件
- 工程公司總經(jīng)理年終總結(jié)
- 2024年海南省高考地理試卷(含答案)
- 【企業(yè)盈利能力探析的國(guó)內(nèi)外文獻(xiàn)綜述2400字】
- 三年級(jí)上冊(cè)數(shù)學(xué)口算題1000道帶答案
- GB/T 44311-2024適老環(huán)境評(píng)估導(dǎo)則
- 蘇教版(2024新版)一年級(jí)上冊(cè)科學(xué)全冊(cè)教案教學(xué)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論