第5章表的創(chuàng)建與管理及其索引_第1頁(yè)
第5章表的創(chuàng)建與管理及其索引_第2頁(yè)
第5章表的創(chuàng)建與管理及其索引_第3頁(yè)
第5章表的創(chuàng)建與管理及其索引_第4頁(yè)
第5章表的創(chuàng)建與管理及其索引_第5頁(yè)
已閱讀5頁(yè),還剩73頁(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)介

第5章表的創(chuàng)建與管理及其索引本章導(dǎo)讀:在SQLServer環(huán)境中,表是存儲(chǔ)數(shù)據(jù)和操作數(shù)據(jù)的邏輯結(jié)構(gòu),是數(shù)據(jù)庫(kù)中存儲(chǔ)的基本對(duì)象,對(duì)數(shù)據(jù)庫(kù)的操作大多數(shù)依賴(lài)于某個(gè)或某些特定的表進(jìn)行的,因而對(duì)數(shù)據(jù)庫(kù)的管理和操作,實(shí)質(zhì)是對(duì)表的管理和操作。知識(shí)要點(diǎn):數(shù)據(jù)表概述數(shù)據(jù)類(lèi)型創(chuàng)建表修改表刪除表數(shù)據(jù)操作索引5.1數(shù)據(jù)庫(kù)表概述SQLServer的每個(gè)數(shù)據(jù)庫(kù)最多提供20億個(gè)表,表是數(shù)據(jù)庫(kù)中具體組織和存儲(chǔ)數(shù)據(jù)的對(duì)象,每個(gè)表都代表著一個(gè)實(shí)體集或者實(shí)體集之間的聯(lián)系。表由行和列組成,最多可以有1024列,每行對(duì)應(yīng)實(shí)體集的一個(gè)個(gè)體,稱(chēng)為記錄,每列代表一個(gè)屬性,稱(chēng)為字段。5.1.1數(shù)據(jù)表概述5.1.2建表步驟5.1.3完整性約束類(lèi)型5.1.1表類(lèi)型在SQLserver中,表分為系統(tǒng)表和用戶(hù)表。1.系統(tǒng)表系統(tǒng)表是SQLServer系統(tǒng)的數(shù)據(jù)字典,記錄了服務(wù)器所有活動(dòng)信息,一般以sys開(kāi)頭。任何用戶(hù)都不應(yīng)直接修改系統(tǒng)表,也不允許直接訪問(wèn)表中的信息,如要訪問(wèn)其內(nèi)容,最好通過(guò)系統(tǒng)存儲(chǔ)過(guò)程或系統(tǒng)函數(shù)。2.用戶(hù)表用戶(hù)表是由用戶(hù)自行建立的數(shù)據(jù)表,用于存儲(chǔ)用戶(hù)數(shù)據(jù),又分為永久表和臨時(shí)表兩種。其中,永久表通常存儲(chǔ)在用戶(hù)數(shù)據(jù)庫(kù)中,除非刪除永久表,否則永久表及其數(shù)據(jù)將永久存在。臨時(shí)表存儲(chǔ)在tempdb數(shù)據(jù)庫(kù)中,當(dāng)不再使用時(shí),會(huì)被系統(tǒng)自動(dòng)刪除。臨時(shí)表又分為本地臨時(shí)表和全局臨時(shí)表。本地臨時(shí)表名以#開(kāi)頭,僅對(duì)當(dāng)前數(shù)據(jù)庫(kù)用戶(hù)有效,一旦斷開(kāi)連接,就自動(dòng)刪除。全局臨時(shí)表名以##開(kāi)頭,對(duì)所有數(shù)據(jù)庫(kù)用戶(hù)有效,所有用戶(hù)斷開(kāi)連接后才自動(dòng)刪除。5.1.2建表步驟設(shè)計(jì)表時(shí),要事先確定需要什么樣的表,各表有哪些數(shù)據(jù),表中各字段的數(shù)據(jù)類(lèi)型及其屬性。建表一般經(jīng)過(guò)定義表結(jié)構(gòu)、設(shè)置完整性約束、輸入數(shù)據(jù)記錄等步驟,其中設(shè)置完整性約束既可以在定義表結(jié)構(gòu)時(shí)進(jìn)行,也可以在表結(jié)構(gòu)定義完成之后進(jìn)行。(1)定義表結(jié)構(gòu):確定表名和各列名及列屬性(數(shù)據(jù)類(lèi)型、數(shù)據(jù)長(zhǎng)度、是否允許空等);(2)設(shè)置完整性約束:限制列數(shù)據(jù)值輸入的范圍,保證數(shù)據(jù)的完整性;(3)輸入數(shù)據(jù)記錄:表結(jié)構(gòu)完成之后,就可以向表中輸入數(shù)據(jù)了。5.1.3完整性約束類(lèi)型為了維護(hù)數(shù)據(jù)的正確性、有效性和相容性,防止錯(cuò)誤信息的輸入和輸出,SQLServer提供了實(shí)體完整性、參照完整性和用戶(hù)自定義完整性等實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)的完整性約束。1.實(shí)體完整性實(shí)體完整性:又稱(chēng)行完整性,要求表中有一個(gè)主鍵,其值不能取空值且能唯一地標(biāo)識(shí)每一行。主要包括PrimaryKey約束、Unique約束、列Identity屬性、唯一索引等。(1)主鍵約束(PrimaryKey):限制主鍵約束列中不能輸入重復(fù)的列值,組成PrimaryKey約束的各列值都不能為空值(Null)。一個(gè)表中只允許定義一個(gè)主鍵約束,且image和text類(lèi)型的字段不能指定為主關(guān)鍵字,主鍵約束自動(dòng)建立主鍵聚集索引。主鍵約束的語(yǔ)法格式如下:[constraint<約束名>]primarykey[clustered|nonclustered][(<列名>[,…16])](2)惟一約束(Unique):限制非主鍵約束列中不能輸入重復(fù)的列值,組成Unique約束的各列值可以為空。一個(gè)表允許定義多個(gè)唯一約束,唯一約束自動(dòng)建立唯一非聚集索引,因?yàn)閁nique約束優(yōu)先唯一索引。唯一約束的語(yǔ)法格式如下:[constraint<約束名>]unique[nonclustered|clustered][(<列名>[,…16])](3)標(biāo)識(shí)列(Identity):標(biāo)識(shí)列自動(dòng)生成能唯一標(biāo)識(shí)表中每一行數(shù)據(jù)的序列值(默認(rèn)初始值為1,增量值為1),每個(gè)表都允許有一個(gè)標(biāo)識(shí)列,該列的數(shù)據(jù)類(lèi)型必須是decimal、numeric、int、smallint或tinyint,且不允許為空值,也不能修改和人為輸入值,也不能有默認(rèn)值。標(biāo)識(shí)列的語(yǔ)法格式如下:Identity[(初始值,增量值)]5.1.3完整性約束類(lèi)型2.參照完整性參照完整性:又稱(chēng)引用完整性,用于保證兩個(gè)相關(guān)表的數(shù)據(jù)一致性,主要通過(guò)定義主表(被參照表)PrimaryKey或Unique約束和從表(參照表)ForeignKey約束來(lái)實(shí)現(xiàn)。(1)外鍵約束(ForeignKey):根據(jù)主表主鍵的數(shù)據(jù)集合來(lái)限制從表外鍵的數(shù)據(jù)相容性,作為外鍵的值要么是空值,要么是主表主鍵存在的值。相應(yīng)地,包含外鍵的表也稱(chēng)為外鍵表,主表也稱(chēng)主鍵表或引用表,常用外鍵和主鍵來(lái)強(qiáng)制參照完整性,以維護(hù)兩個(gè)表之間的關(guān)系。外鍵約束的語(yǔ)法格式如下:[constraint<約束名>]foreignkey[(<列名>[,…16])]references<主表名>(<列名>[,…16])當(dāng)創(chuàng)建外鍵約束時(shí),必須遵循以下原則:主表中(引用)列名必須是主表中的候選鍵(通常為主鍵)。外鍵約束分為表級(jí)約束或列級(jí)約束。創(chuàng)建為列級(jí)約束時(shí),只能包括一列;創(chuàng)建為表級(jí)約束時(shí),可以包括一列或多列。從表外鍵的列數(shù)和主表主鍵的列數(shù)必須相同,并且對(duì)應(yīng)列的數(shù)據(jù)類(lèi)型也必須相同,但是外鍵(被引用)列名與主鍵(引用)列名不必相同。創(chuàng)建外鍵約束時(shí),如果沒(méi)有指定外鍵(被引用)列名,那么默認(rèn)為外鍵(被引用)列名與主鍵定義的(引用)列名同名。5.1.3完整性約束類(lèi)型3.用戶(hù)自定義的完整性在SQLServer2000中,用戶(hù)自定義的完整性是指域完整性(也稱(chēng)列完整性),用于保證列數(shù)據(jù)輸入的有效性和合理性。其主要包括Default約束、Check約束、NotNull約束等。(1)默認(rèn)值約束(Default):當(dāng)輸入數(shù)據(jù)時(shí)若沒(méi)有為某列提供值,則將所定義的默認(rèn)值提供給該列。默認(rèn)值可以是常量,也可以是表達(dá)式,如getdate()返回系統(tǒng)日期。默認(rèn)約束的語(yǔ)法格式如下:[constraint<約束名>]default<默認(rèn)值>[for<列名>](2)檢查約束(Check):通過(guò)限制列的取值范圍來(lái)強(qiáng)制域的完整性,這與外鍵約束中的數(shù)據(jù)相容性規(guī)則相似,不過(guò)外鍵約束是依據(jù)主表主鍵的數(shù)據(jù)集合,而檢查約束則是利用邏輯表達(dá)式來(lái)限制列上可接受的數(shù)據(jù)范圍,而非基于其它表的數(shù)據(jù)集合。不能在text、ntext、image列上定義check約束。檢查約束的語(yǔ)法格式如下:[constraint<約束名>]check(<列名條件表達(dá)式>)(3)非空值約束(NotNull):限制字段不接受Null值,即當(dāng)對(duì)表進(jìn)行插入(Insert)操作時(shí),必須給出確定的值??罩凳侵肝刺顚?xiě)、未知、不可用或?qū)⒃谝院筇砑拥臄?shù)據(jù),并不等價(jià)于空白(空字符串)或數(shù)值0。列默認(rèn)屬性為空(Null)。非空值約束的語(yǔ)法格式如下:<列名>NotNull5.2數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型用來(lái)表現(xiàn)數(shù)據(jù)的特征,它決定了數(shù)據(jù)存儲(chǔ)格式、存儲(chǔ)長(zhǎng)度、取值范圍(含數(shù)據(jù)精度和小數(shù)位數(shù)),以及可參與的運(yùn)算法則。在SQLServer系統(tǒng)中,數(shù)據(jù)類(lèi)型分為系統(tǒng)數(shù)據(jù)類(lèi)型和用戶(hù)自定義數(shù)據(jù)類(lèi)型。5.2.1系統(tǒng)數(shù)據(jù)類(lèi)型5.2.2用戶(hù)自定義數(shù)據(jù)類(lèi)型5.2.1系統(tǒng)數(shù)據(jù)類(lèi)型在SQLServer2000中,系統(tǒng)數(shù)據(jù)類(lèi)型包括字符類(lèi)型、數(shù)值類(lèi)型、二進(jìn)制類(lèi)型、貨幣類(lèi)型和日期/時(shí)間數(shù)據(jù)類(lèi)型等。而數(shù)值類(lèi)型又分為整數(shù)類(lèi)型、精確小數(shù)類(lèi)型和

浮點(diǎn)類(lèi)型。1.字符串?dāng)?shù)據(jù)類(lèi)型字符串?dāng)?shù)據(jù)類(lèi)型是用單引號(hào)定界的字符串,包括char、varchar和text數(shù)據(jù)類(lèi)型,如表5-1所示。char字符串若小于定義長(zhǎng)度,則填入空格字符,其長(zhǎng)度不變。數(shù)據(jù)類(lèi)型長(zhǎng)度取值范圍char(n)長(zhǎng)度不變,最多8000個(gè)字符固定長(zhǎng)度的非unicode字符varchar(n)長(zhǎng)度可變,最多8000個(gè)字符可變長(zhǎng)度的非unicode字符text長(zhǎng)度可變,最多2147483647個(gè)字符可變長(zhǎng)度的非unicode字符表5-1字符串?dāng)?shù)據(jù)類(lèi)型5.2.1系統(tǒng)數(shù)據(jù)類(lèi)型2.Unicode字符串?dāng)?shù)據(jù)類(lèi)型Unicode字符串?dāng)?shù)據(jù)類(lèi)型采用雙字節(jié)存儲(chǔ)每個(gè)字符。Unicode數(shù)據(jù)類(lèi)型包括nchar,nvarchar和ntext類(lèi)型,如表5-2所示。nchar字符串小于定義長(zhǎng)度時(shí),以0x00填入。表5-2Unicode字符串?dāng)?shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型長(zhǎng)度取值范圍nchar(n)長(zhǎng)度不變,最多8000個(gè)字符固定長(zhǎng)度的unicode字符nvarchar(n)長(zhǎng)度可變,最多8000個(gè)字符可變長(zhǎng)度的unicode字符ntext長(zhǎng)度可變,最多107341823個(gè)字符可變長(zhǎng)度的unicode字符5.2.1系統(tǒng)數(shù)據(jù)類(lèi)型3.整型數(shù)據(jù)類(lèi)型整型數(shù)據(jù)類(lèi)型是指不含小數(shù)的數(shù)值數(shù)據(jù),包括bit,tinyint,smallint,int,bigint類(lèi)型,他們之間的區(qū)別主要在于存儲(chǔ)的數(shù)值范圍不同,如表5-3所示。表5-3整型數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型長(zhǎng)度取值范圍bit1位1或0tinyint1字節(jié)0~255smallint2字節(jié)-32768~32767(-215~215-1)int4字節(jié)-2147483648~2147483647(-231~231-1)bigint8字節(jié)-9223372036854775808~9223372036854775807(-263~263-1)5.2.1系統(tǒng)數(shù)據(jù)類(lèi)型4.浮點(diǎn)數(shù)據(jù)類(lèi)型浮點(diǎn)數(shù)據(jù)類(lèi)型是一種近似小數(shù)的數(shù)值數(shù)據(jù),通常采用科學(xué)計(jì)數(shù)法近似存儲(chǔ)十進(jìn)制小數(shù),包括real和float類(lèi)型,如表5-6所示。表5-4浮點(diǎn)數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型長(zhǎng)度取值范圍float8字節(jié)-1.79E+308~-1.79E+308real4字節(jié)-3.40E+38~-3.40E+385.2.1系統(tǒng)數(shù)據(jù)類(lèi)型5.精確小數(shù)數(shù)據(jù)類(lèi)型精確小數(shù)類(lèi)型是指包含小數(shù)的位數(shù)確定的數(shù)值數(shù)據(jù),包括decimal,numeric類(lèi)型,如表5-5所示。數(shù)據(jù)類(lèi)型長(zhǎng)度取值范圍數(shù)據(jù)類(lèi)型長(zhǎng)度取值范圍數(shù)據(jù)類(lèi)型長(zhǎng)度取值范圍Decimal(p,s)精度1~9位時(shí),占5字節(jié)精度10~19位時(shí),占9字節(jié)精度20~28位時(shí),占13字節(jié)精度29~38位時(shí),占17字節(jié)-238+1~238-1p(精度)表示小數(shù)點(diǎn)兩邊的總位數(shù)s(刻度)表示小數(shù)點(diǎn)右邊的位數(shù)1≤p≤38,0≤s≤pnumeric(p,s)同decimal-238+1~238-1同decimal-238+1~238-1表5-5精確小數(shù)數(shù)據(jù)類(lèi)型5.2.1系統(tǒng)數(shù)據(jù)類(lèi)型6.二進(jìn)制數(shù)據(jù)類(lèi)二進(jìn)制數(shù)據(jù)類(lèi)型是指用16進(jìn)制(0x開(kāi)頭)表示的數(shù)據(jù),包括binary,varbinary和image類(lèi)型,如表5-4所示。數(shù)據(jù)類(lèi)型長(zhǎng)度取值范圍binary(n)n+4,長(zhǎng)度不變,最多8000個(gè)字節(jié)固定長(zhǎng)度的二進(jìn)制數(shù)據(jù)varbinary(n)實(shí)際長(zhǎng)度+4,長(zhǎng)度可變,最多8000個(gè)字符可定長(zhǎng)度的二進(jìn)制數(shù)據(jù)image長(zhǎng)度可變,最多107341823個(gè)字符可定長(zhǎng)度的二進(jìn)制數(shù)據(jù)表5-6二進(jìn)制數(shù)據(jù)類(lèi)型一般說(shuō)來(lái),最好使用binary和varbinary存儲(chǔ)二進(jìn)制數(shù)據(jù),除非存儲(chǔ)字節(jié)數(shù)超過(guò)了8K,才使用image類(lèi)型。二進(jìn)制數(shù)據(jù)指Word文檔、Excel電子表格、圖像等文件。5.2.1系統(tǒng)數(shù)據(jù)類(lèi)型7.貨幣數(shù)據(jù)類(lèi)型貨幣數(shù)據(jù)類(lèi)型是用于表示貨幣和現(xiàn)金值的數(shù)值數(shù)據(jù),精確到小數(shù)點(diǎn)后4位。貨幣數(shù)據(jù)類(lèi)型包括money,smallmoney類(lèi)型,如表5-7所示。表5-7貨幣數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型長(zhǎng)度取值范圍money8字節(jié)-922337203685477.5808~922337203685477.5807smallmoney4字節(jié)-214748.3648~214748.36475.2.1系統(tǒng)數(shù)據(jù)類(lèi)型8.日期和時(shí)間數(shù)據(jù)類(lèi)型日期和時(shí)間數(shù)據(jù)類(lèi)型是指表示日期和時(shí)間的數(shù)據(jù)類(lèi)型。日期和時(shí)間數(shù)據(jù)類(lèi)型包括datetime,smalldatetime類(lèi)型,如表5-8所示。數(shù)據(jù)類(lèi)型長(zhǎng)度取值范圍datetime8字節(jié)(精確到百分之三秒)1753-1-100:00:00~9999-12-3123:59:59smalldatetime4字節(jié)(精確到分鐘)1900-1-100:00:00~2079-6-623:59:59表5-8日期和時(shí)間數(shù)據(jù)類(lèi)型注意:在SQLServer中,word文檔、excel電子表格以及.bmp、.gif、.jpg等圖像格式的文件用text、ntext和image數(shù)據(jù)類(lèi)型來(lái)存儲(chǔ)。5.2.1系統(tǒng)數(shù)據(jù)類(lèi)型9.其它數(shù)據(jù)類(lèi)型其它數(shù)據(jù)類(lèi)型用于表示一些特殊的數(shù)據(jù),包括cursor,sql_variant、table、timestamp和uniqueidentifier類(lèi)型,如表5-9所示。數(shù)據(jù)類(lèi)型長(zhǎng)度取值范圍cursor長(zhǎng)度不變,最多8000個(gè)字節(jié)保存查詢(xún)結(jié)果集sql_variant長(zhǎng)度可變,最多8000個(gè)字符存儲(chǔ)非text,ntext,image,timestamp數(shù)據(jù)table長(zhǎng)度可變,最多107341823個(gè)字符存儲(chǔ)對(duì)表和視圖處理后的結(jié)果集timestamp8字節(jié)時(shí)間戳數(shù)據(jù)類(lèi)型,產(chǎn)生的唯一數(shù)據(jù)類(lèi)型uniqueidentifier16字節(jié)存儲(chǔ)計(jì)算機(jī)網(wǎng)絡(luò)和cpu全球唯一標(biāo)識(shí)的數(shù)據(jù)類(lèi)型表5-9其它數(shù)據(jù)類(lèi)型5.2.2用戶(hù)自定義數(shù)據(jù)類(lèi)型SQLserver提供了兩種創(chuàng)建用戶(hù)自定義數(shù)據(jù)類(lèi)型的方法:使用企業(yè)管理器創(chuàng)建用戶(hù)自定義數(shù)據(jù)類(lèi)型和使用系統(tǒng)存儲(chǔ)過(guò)程創(chuàng)建用戶(hù)自定義數(shù)據(jù)類(lèi)型。1.使用企業(yè)管理器創(chuàng)建用戶(hù)自定義數(shù)據(jù)類(lèi)型【例5-1】創(chuàng)建用戶(hù)自定義數(shù)據(jù)類(lèi)型“zipcode”,數(shù)據(jù)類(lèi)型來(lái)源char(6),且允許空值。(1)在企業(yè)管理器中,展開(kāi)要?jiǎng)?chuàng)建用戶(hù)自定義數(shù)據(jù)類(lèi)型的數(shù)據(jù)庫(kù)(jxgl),右擊“用戶(hù)自定義的數(shù)據(jù)類(lèi)型”節(jié)點(diǎn),彈出快捷菜單,選擇“新建用戶(hù)定義數(shù)據(jù)類(lèi)型”命令,如圖5-1所示。(2)單擊,彈出“用戶(hù)定義數(shù)據(jù)類(lèi)型屬性”對(duì)話框,在其中輸入數(shù)據(jù)類(lèi)型的名稱(chēng)“zipcode”,數(shù)據(jù)類(lèi)型和長(zhǎng)度char(6),是否允許空值(允許),規(guī)則和默認(rèn)值等,如圖5-2所示。5.2.2用戶(hù)自定義數(shù)據(jù)類(lèi)型圖5-1“企業(yè)管理”對(duì)話框① 圖5-2“用戶(hù)定義數(shù)據(jù)類(lèi)型屬性”對(duì)話框5.2.2用戶(hù)自定義數(shù)據(jù)類(lèi)型(3)單擊“確定”按鈕返回企業(yè)管理,如圖5-3所示,在此窗口中,選擇剛創(chuàng)建的用戶(hù)自定義數(shù)據(jù)類(lèi)型“zipcode”可以將其刪除。

圖5-3“企業(yè)管理”對(duì)話框② 圖5-4“例5-2”運(yùn)行結(jié)果5.2.2用戶(hù)自定義數(shù)據(jù)類(lèi)型2.使用系統(tǒng)存儲(chǔ)過(guò)程創(chuàng)建用戶(hù)自定義數(shù)據(jù)類(lèi)型(1)使用系統(tǒng)存儲(chǔ)過(guò)程創(chuàng)建用戶(hù)自定義數(shù)據(jù)類(lèi)型的語(yǔ)法格式如下:sp_addtype用戶(hù)自定義數(shù)據(jù)類(lèi)型名稱(chēng),系統(tǒng)數(shù)據(jù)類(lèi)型[,’null’|’notnull’](2)使用系統(tǒng)存儲(chǔ)過(guò)程刪除用戶(hù)自定義數(shù)據(jù)類(lèi)型的語(yǔ)法格式如下:sp_droptype用戶(hù)自定義數(shù)據(jù)類(lèi)型名稱(chēng)【例5-2】在“jxgl”數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)用戶(hù)自定義數(shù)據(jù)類(lèi)型名稱(chēng)為“birthday”,數(shù)據(jù)類(lèi)型來(lái)源于系統(tǒng)數(shù)據(jù)類(lèi)型“smalldatetime”,不允許為空值。usejxglexecsp_addtype'birthday','smalldatetime','notnull'運(yùn)行結(jié)果如圖5-4所示。圖5-4“例5-2”運(yùn)行結(jié)果5.3創(chuàng)建數(shù)據(jù)庫(kù)表SQLserver提供了兩種創(chuàng)建表的方法:使用企業(yè)管理器設(shè)計(jì)數(shù)據(jù)庫(kù)表和使用T-SQL語(yǔ)句設(shè)計(jì)數(shù)據(jù)表。5.3.1數(shù)據(jù)庫(kù)表邏輯結(jié)構(gòu)5.3.2使用企業(yè)管理器設(shè)計(jì)數(shù)據(jù)庫(kù)表5.3.3使用T-SQL語(yǔ)句設(shè)計(jì)數(shù)據(jù)表5.3.1數(shù)據(jù)庫(kù)表邏輯結(jié)構(gòu)數(shù)據(jù)庫(kù)“jxgl”中存在如下幾個(gè)表,各表的邏輯結(jié)構(gòu)分別定義如下:表5-10班級(jí)信息表班級(jí)字段名數(shù)據(jù)類(lèi)型備注班級(jí)號(hào)char(6)主鍵班級(jí)名稱(chēng)varchar(20)唯一約束班級(jí)人數(shù)tinyint學(xué)制char(1)默認(rèn)值為4招生性質(zhì)char(4)5.3.1數(shù)據(jù)庫(kù)表邏輯結(jié)構(gòu)表5-11選修信息表選修 字段名數(shù)據(jù)類(lèi)型備注成績(jī)編碼int標(biāo)識(shí),主鍵學(xué)號(hào)char(8)非空、外鍵課程號(hào)char(2)非空、外鍵成績(jī)numeric(4,1)100≥成績(jī)≥0備注text5.3.1數(shù)據(jù)庫(kù)表邏輯結(jié)構(gòu)表5-12學(xué)生信息表學(xué)生 字段名數(shù)據(jù)類(lèi)型備注學(xué)號(hào)char(8)非空、主鍵姓名char(6)非空性別char(2)默認(rèn)值男出生日期datetime總分int籍貫char(4)默認(rèn)值安徽備注text照片image5.3.1數(shù)據(jù)庫(kù)表邏輯結(jié)構(gòu)表5-13教師信息表教師字段名數(shù)據(jù)類(lèi)型備注工號(hào)char(6)非空、主鍵姓名char(6)非空、性別char(2)默認(rèn)值男出生日期datetime工作日期datetime職稱(chēng)char(6)基本工資int婚否bit默認(rèn)值05.3.1數(shù)據(jù)庫(kù)表邏輯結(jié)構(gòu)表5-14課程信息表課程 字段名數(shù)據(jù)類(lèi)型備注課程號(hào)char(2)主鍵課程名稱(chēng)varchar(20)唯一約束課程類(lèi)型char(4)學(xué)時(shí)smallint學(xué)時(shí)≥0學(xué)分tinyint學(xué)分≥0備注text5.3.1數(shù)據(jù)庫(kù)表邏輯結(jié)構(gòu)字段名數(shù)據(jù)類(lèi)型備注工號(hào)char(6)非空、外鍵課程號(hào)char(2)非空、外鍵班級(jí)號(hào)char(6)非空、外鍵課酬int3000≥課酬≥0學(xué)期char(1)評(píng)價(jià)text表5-15授課信息表授課注意:本書(shū)程序如果特別說(shuō)明均以以上表內(nèi)容作為基本表結(jié)構(gòu),表中數(shù)據(jù)見(jiàn)第6章。5.3.2使用企業(yè)管理器設(shè)計(jì)數(shù)據(jù)庫(kù)表【例5-3】用企業(yè)管理器設(shè)計(jì)表“班級(jí)”,并設(shè)置班級(jí)號(hào)為主鍵,設(shè)置學(xué)制默認(rèn)值為4。操作步驟如下:(1)在企業(yè)管理器中選擇并展開(kāi)要?jiǎng)?chuàng)建表的數(shù)據(jù)庫(kù)(jxgl),選擇“表”節(jié)點(diǎn),右擊之彈出快捷菜單,選擇“新建表”,如圖5-5所示。(2)單擊后釋放,彈出“新建表”對(duì)話框,并在“新建表”對(duì)話框中設(shè)置各列的屬性:列名、數(shù)據(jù)類(lèi)型、長(zhǎng)度、精度、小數(shù)位數(shù)、是否允許空、默認(rèn)值等,如圖5-6所示。5.3.2使用企業(yè)管理器設(shè)計(jì)數(shù)據(jù)庫(kù)表

圖5-5“企業(yè)管理”對(duì)話框 圖5-6“新建表”對(duì)話框5.3.2使用企業(yè)管理器設(shè)計(jì)數(shù)據(jù)庫(kù)表(3)在編輯完各列屬性后,單擊“保存”按鈕,彈出“選擇名稱(chēng)”對(duì)話框,輸入“班級(jí)”名稱(chēng),如圖5-7所示。(4)單擊“確定”按鈕,返回“新建表”對(duì)話框,單擊該對(duì)話框右上角的關(guān)閉按鈕,返回“企業(yè)管理器”對(duì)話框,拖動(dòng)右框格垂直滾動(dòng)條,可看到“班級(jí)”表,如圖5-8所示。

圖5-7“選擇名稱(chēng)”對(duì)話框 圖5-8“企業(yè)管理器”對(duì)話框5.3.2使用企業(yè)管理器設(shè)計(jì)數(shù)據(jù)庫(kù)表注意:①在“表設(shè)計(jì)器”對(duì)話框中,選中列名“班級(jí)號(hào)”后,在該對(duì)話框中任意位置右擊,彈出快捷菜單,選擇“設(shè)置主鍵”即可將“班級(jí)號(hào)”設(shè)置為主鍵?!鞍嗉?jí)號(hào)”左側(cè)有一把鑰匙標(biāo)記即表示已經(jīng)設(shè)置為主鍵。②在“新建表”對(duì)話框中,右擊列名如“班級(jí)號(hào)”所在行的任何位置,彈出快捷菜單,選擇“插入列”可以在當(dāng)前列前位置增加列;選擇“刪除列”可以刪除當(dāng)前列;另外列的上下位置也可以調(diào)整:選擇要移動(dòng)的列,然后拖動(dòng)該列到要釋放的位置。5.3.3使用T-SQL語(yǔ)句設(shè)計(jì)數(shù)據(jù)表在T-SQL語(yǔ)句中,創(chuàng)建表可用createtable語(yǔ)句創(chuàng)建表,其完整語(yǔ)法格式如下:createtable[數(shù)據(jù)庫(kù)名.[所有者].|所有者.]<表名>({<列定義說(shuō)明>|[<列名>as<計(jì)算機(jī)列表達(dá)式>]|[<表約束說(shuō)明>]}|[{primarykey|unique}][,…n])[on{文件組名|default}] /*指定存儲(chǔ)表的文件組*/[textimage_on{文件組名|default}] /*指定存儲(chǔ)text、ntext和image類(lèi)型數(shù)據(jù)的文件組*/功能:在指定的數(shù)據(jù)庫(kù)的指定用戶(hù)上創(chuàng)建一個(gè)表,缺省值為當(dāng)前數(shù)據(jù)庫(kù)的現(xiàn)有用戶(hù)。5.3.3使用T-SQL語(yǔ)句設(shè)計(jì)數(shù)據(jù)表(1)<列定義說(shuō)明>:用來(lái)定義一列,列的定義如下:<列定義說(shuō)明>::={列名列數(shù)據(jù)類(lèi)型} /*指定列名、數(shù)據(jù)類(lèi)型*/|[notnull|null] /*指定列空值非空值約束*/[collate<排序規(guī)則名>] /*指定排序規(guī)則*/[[default常量表達(dá)式] /*指定默認(rèn)值*/|[identity[(初始值,增量)[notforreplication]]]/*指定列為標(biāo)識(shí)列*/][rowguidcol] /*指定列為全局標(biāo)識(shí)符列*/[<列約束說(shuō)明>][,…n] /*指定列的約束*/5.3.3使用T-SQL語(yǔ)句設(shè)計(jì)數(shù)據(jù)表(4)<表約束說(shuō)明>:定義表約束,約束格式如下:<表約束說(shuō)明>::=[constraint<約束名>]{[{primarykey|unique} /*定義主鍵,唯一性約束*/{(列名[asc|desc][,…16])} /*定義索引升序或降序的列名*/[clustered|nonclustered] /*定義聚集索引,非聚集索引*/[withfillfactor=fillfactor] /*唯一性約束為非聚集*/[on{文件組|default}]]|[foreignkey[(列名[,…16])] /*定義外鍵約束*/references參照表名[(參照列名[,…n])] /*外鍵約束引用的表及其列*/[ondelete{cascade|onaction}] /*刪除行是否級(jí)聯(lián)刪除子表相關(guān)行*/[onupdate{cascade|onaction}] /*更新行是否級(jí)聯(lián)更新子表相關(guān)行*/[notforreplication]]|check(邏輯表達(dá)式)[notforreplication]}5.3.3使用T-SQL語(yǔ)句設(shè)計(jì)數(shù)據(jù)表(5)<列約束說(shuō)明>:定義列約束說(shuō)明,約束格式如下:<列約束說(shuō)明>::=[constraint約束名]{[null|notnull]|[{primarykey|unique}[clustered|nonclustered][with

fillfactor=fillfactor][on{文件組名|default}]]|[foreignkeyrefrences

參照表名[(參照列名)][ondelete{cascade|onaction}][onupdate{cascade|onaction}][notforreplication]]|check(邏輯表達(dá)式)[notforreplication]}(6)on{文件組名|default}:用來(lái)指定存儲(chǔ)表的文件組。沒(méi)有指定on參數(shù)值或缺省時(shí)均為默認(rèn)文件組。(7)textimage_on{文件組名|default}:用來(lái)指定存儲(chǔ)text、ntext和image類(lèi)型數(shù)據(jù)的文件組,沒(méi)有指定textimage_on參數(shù)值時(shí)或缺省時(shí)均與表存儲(chǔ)在同一文件組中。5.3.3使用T-SQL語(yǔ)句設(shè)計(jì)數(shù)據(jù)表【例5-4】用T-SQL語(yǔ)句設(shè)計(jì)表“授課”,但不設(shè)置其相關(guān)約束。usejxglcreatetable授課(工號(hào)char(6),課程號(hào)char(6),班級(jí)號(hào)char(6),課酬int,學(xué)期char(1))【例5-5】用T-SQL語(yǔ)句設(shè)計(jì)表“教師”,僅設(shè)置列“工號(hào)”為主鍵,不設(shè)置其它約束。usejxglcreatetable教師(工號(hào)char(6)constraintPk_教師_工號(hào)primarykey,姓名char(6),性別char(2),出生日期datetime,工作日期datetime,職稱(chēng)char(6),基本工資int,婚否bit)注意:代碼中的第三行中的子句constraintPk_教師_工號(hào)可以省略時(shí),省略時(shí)會(huì)產(chǎn)生一個(gè)隨機(jī)分配的約束標(biāo)志名。5.3.3使用T-SQL語(yǔ)句設(shè)計(jì)數(shù)據(jù)表【例5-6】用T-SQL語(yǔ)句設(shè)計(jì)表“學(xué)生”,僅設(shè)置學(xué)號(hào)為非空、主鍵,姓名非空,性別默認(rèn)值為“男”,但不設(shè)置籍貫的默認(rèn)約束。usejxglcreatetable學(xué)生(學(xué)號(hào)char(8)notnullconstraintpk_學(xué)生primarykey,姓名char(6)notnull,性別char(2)constraintdf_學(xué)生_性別default'男',出生日期datetime,總分int,籍貫char(4),備注text,照片image)5.3.3使用T-SQL語(yǔ)句設(shè)計(jì)數(shù)據(jù)表在查詢(xún)分析器左側(cè)的“對(duì)象瀏覽器”窗口中展開(kāi)數(shù)據(jù)庫(kù)“jxgl”用戶(hù)表,可以查看“學(xué)生”表的信息,如圖5-9所示。當(dāng)然在企業(yè)管理器中也能查看該表相關(guān)屬性。

圖5-9“學(xué)生”表信息 圖5-10“選修”表信息5.3.3使用T-SQL語(yǔ)句設(shè)計(jì)數(shù)據(jù)表【例5-7】用T-SQL語(yǔ)句設(shè)計(jì)表“選修”,并設(shè)置成績(jī)編碼為標(biāo)識(shí)列,學(xué)號(hào)為非空、外鍵約束于“學(xué)生”表“學(xué)號(hào)”列,學(xué)號(hào)和課程號(hào)共同建立主鍵,成績(jī)檢查約束0~100之間。usejxglcreatetable選修(成績(jī)編碼intidentity(1,1),學(xué)號(hào)char(8)notnullconstraintfk_學(xué)號(hào)references學(xué)生(學(xué)號(hào)),課程號(hào)char(2)notnull,constraintpk_選修primarykey(學(xué)號(hào),課程號(hào)),成績(jī)tinyintcheck(成績(jī)>=0and成績(jī)<=100),備注text)在查詢(xún)分析器左側(cè)的“對(duì)象瀏覽器”窗口中展開(kāi)數(shù)據(jù)庫(kù)“jxgl”用戶(hù)表,可以查看“選修”表的信息,如圖5-10所示。當(dāng)然在企業(yè)管理器中也能查看該表相關(guān)屬性。5.4修改數(shù)據(jù)庫(kù)表修改表不僅能修改表的結(jié)構(gòu),如增加和刪除列,修改現(xiàn)有列的屬性,還能增加、刪除、啟動(dòng)和暫停約束。但是修改表時(shí),不能破壞表原有的數(shù)據(jù)完整性,如不能為有主關(guān)鍵字列的表再增加一個(gè)主關(guān)鍵字列,不能為有空值的列設(shè)置主鍵約束等。修改表,SQLServer同樣提供了兩種的方法:即使用企業(yè)管理器設(shè)計(jì)數(shù)據(jù)庫(kù)表和使用T-SQL語(yǔ)句修改數(shù)據(jù)表。5.4.1利用企業(yè)管理修改表5.4.2利用T-SQL語(yǔ)句修改表5.4.1利用企業(yè)管理修改表在企業(yè)管理器中展開(kāi)控制臺(tái)目錄,選擇要修改的表,如表“班級(jí)”,打開(kāi)“設(shè)計(jì)表”對(duì)話框,即可修改表的結(jié)構(gòu)和列的屬性等,使用方法參照創(chuàng)建表的方法?!纠?-8】用企業(yè)管理修改表“授課”,將其列“班級(jí)號(hào)”設(shè)置為外鍵,對(duì)應(yīng)關(guān)聯(lián)于表“班級(jí)”的列“班級(jí)號(hào)”。(1)打開(kāi)表“授課”的“設(shè)計(jì)表”對(duì)話框,選擇列“班級(jí)號(hào)”,右擊彈出快捷菜單,選擇“關(guān)系”命令,如圖5-11所示。(2)單擊釋放后,彈出“屬性”對(duì)話框的“關(guān)系”界面①,如圖5-12所示。

圖5-11“設(shè)計(jì)表”對(duì)話框 圖5-12“屬性”對(duì)話框的“關(guān)系”界面①5.4.1利用企業(yè)管理修改表(1)單擊“新建”按鈕,彈出“屬性”對(duì)話框的“關(guān)系”界面②,如圖5-13所示。(2)分別選擇主鍵表“班級(jí)”和外鍵表“授課”的列“班級(jí)號(hào)”,如圖5-14所示。

圖5-13“屬性”對(duì)話框的“關(guān)系”界面② 圖5-14“屬性”對(duì)話框的“關(guān)系”界面③5.4.1利用企業(yè)管理修改表注意:①如果勾選“創(chuàng)建中檢查現(xiàn)有數(shù)據(jù)”復(fù)選框,則表示檢查兩表之間現(xiàn)有數(shù)據(jù)是否符合參照完整性,如果符合參照完整性就準(zhǔn)許建立關(guān)系,否則不允許建立;②如果勾選“對(duì)復(fù)制強(qiáng)制關(guān)系”復(fù)選框,則表示復(fù)制兩表時(shí)也要遵循參照完整性;③如果勾選“對(duì)insert和update強(qiáng)制關(guān)系”,則表示插入或更新時(shí)要符合參照完整性,否則拒絕插入或更新操作;④在③基礎(chǔ)上,如果繼續(xù)勾選“級(jí)聯(lián)更新相關(guān)的字段”,則表示更新主鍵表的鍵值時(shí),自動(dòng)更新外鍵表的關(guān)聯(lián)列值;⑤在③基礎(chǔ)上,如果繼續(xù)勾選“級(jí)聯(lián)刪除相關(guān)的記錄”,則表示刪除主鍵表的記錄時(shí),自動(dòng)刪除外鍵表的關(guān)聯(lián)記錄。5.4.1利用企業(yè)管理修改表(5)單擊“關(guān)閉”按鈕,返回“設(shè)計(jì)表”對(duì)話框,單擊“設(shè)計(jì)表”右上角的“關(guān)閉”按鈕,彈出保存提示對(duì)話框,如圖5-15所示。(6)單擊“是”按鈕,彈出保存方式對(duì)話框,如圖5-16所示,單擊“是”按鈕即可。

圖5-15“保存”提示對(duì)話框 圖5-16“保存”對(duì)話框5.4.1利用企業(yè)管理修改表注意:(1)如果要設(shè)置列“課酬”的check約束,參照步驟(1)打開(kāi)“設(shè)計(jì)表”對(duì)話框,選中列“課酬”,右擊彈出快捷菜單,單擊“check約束”命令,彈出“屬性”對(duì)話框的“check約束”界面①,如圖5-17所示。

圖5-17“屬性”對(duì)話框的“check約束”界面①5.4.1利用企業(yè)管理修改表(2)單擊“新建”按鈕,彈出“屬性”對(duì)話框的“check約束”界面②,在約束表達(dá)式文本框中輸入“課酬>=0and課酬<=3000”,如圖5-18所示。圖5-18“屬性”對(duì)話框的“check約束”界面②5.4.1利用企業(yè)管理修改表(3)后續(xù)步驟重復(fù)(5)~(7)。在查詢(xún)分析器的“對(duì)象瀏覽器中”可以查看相關(guān)信息。注意:右擊表名,如“班級(jí)”表,彈出快捷菜單,選擇“重命名”命令還可以更改表名。5.4.2利用T-SQL語(yǔ)句修改表可以使用T-SQL語(yǔ)句altertable來(lái)修改表結(jié)構(gòu),包括添加列及其約束、添加約束、刪除列、刪除約束、修改列屬性等操作。其語(yǔ)法格式如下:altertable<表名>{[[with{check|nocheck}]add{<列定義>|<列名>as<計(jì)算列表達(dá)式>}[,…n]]|[[with{check|nocheck}]add{<列約束>[,…n]}]|[drop{[constraint]<約束名>}[,…n]]|[drop{column<列名>}[,…n]]|[altercolumn<列名>{新數(shù)據(jù)類(lèi)型[(小數(shù)精度[,小數(shù)范圍])][collate<排序規(guī)則>][null|notnull]|{add|drop}rowguidcol}]|[{check|nocheck}constraint{all|約束名[,…n]}]|[{enable|disable}trigger{all|觸發(fā)器名[,..n]}]5.4.2利用T-SQL語(yǔ)句修改表說(shuō)明:(1)add{<列定義>|<列名>as<計(jì)算列定義>}[,…n]:添加一個(gè)新列或計(jì)算列表達(dá)式,其中with{check|nocheck}表示是否檢查表中現(xiàn)有數(shù)據(jù)的約束規(guī)則;(2)add{<列約束>[,…n]}:添加列約束;(3)drop{[constraint]<約束名>}[,…n]:刪除指定的約束;(4)drop{column<列名>}[,…n]:刪除指定的列名;(5)altercolumn<列名>{新數(shù)據(jù)類(lèi)型[(小數(shù)精度[,小數(shù)范圍])]}:更改指定列的數(shù)據(jù)類(lèi)型,小數(shù)精度,小數(shù)范圍,其中collate<排序規(guī)則>用于重新指定列的排序規(guī)則,{add|drop}rowguidcol用于添加或刪除列上rowguidcol屬性;(6){check|nocheck}constraint{all|約束名[,…n]}:?jiǎn)⒂没蚪雇怄I或check約束;(7){enable|disable}trigger{all|觸發(fā)器名[,..n]}:?jiǎn)⒂没蚪怪付ㄓ|發(fā)器。完整的T-SQL看起來(lái)比較復(fù)雜,不容易理解,但正如前文所說(shuō),修改表也就是對(duì)表結(jié)構(gòu)的增、刪、改操作,所以為了講解方便,可以將修改表的T-SQL語(yǔ)句簡(jiǎn)化成以下幾種形式:5.4.2利用T-SQL語(yǔ)句修改表將修改表的T-SQL語(yǔ)句可以簡(jiǎn)化成以下幾種形式:1.增加列增加列同時(shí)還可以附加列約束定義信息,使用altertable命令語(yǔ)句添加列的基本語(yǔ)法格式如下:altertable<表名>add<列名><數(shù)據(jù)類(lèi)型和長(zhǎng)度>[列約束]【例5-9】向“班級(jí)”表中添加一列,列名為“班主任”并具有唯一性約束。usejxglaltertable班級(jí)add班主任varchar(6)constraintUk_班級(jí)_班主任unique【例5-10】向“選修”表中添加一列,列名為“等級(jí)”,數(shù)據(jù)類(lèi)型為varchar(6),默認(rèn)約束是“合格”。usejxglaltertable選修add等級(jí)varchar(6)constraintdf_選修_等級(jí)default'合格'【例5-11】為“學(xué)生”表中增加一列,列名為“郵政編碼”,并附加一個(gè)check約束,限制輸入到列的數(shù)據(jù)范圍為6位0~9之間數(shù)字且以“23”開(kāi)頭。usejxglaltertable學(xué)生add郵政編碼char(6)constraintCk_學(xué)生_郵政編碼check(郵政編碼like'23[0-9][0-9][0-9]')5.4.2利用T-SQL語(yǔ)句修改表2.增加約束增加約束時(shí),如果新增約束與表中原有數(shù)據(jù)有沖突時(shí),將導(dǎo)致異常,終止命令執(zhí)行。如果想忽略新增約束對(duì)原有數(shù)據(jù)的檢查,可以使用使用withnocheck選項(xiàng),使新增約束只對(duì)以后數(shù)據(jù)起作用。使用altertable命令語(yǔ)句添加列約束的基本語(yǔ)法格式如下:altertable<表名>[withnocheck|check]addconstraint<約束名><約束定義>【例5-12】為“教師”表中的列名為“性別”的列設(shè)置默認(rèn)約束,默認(rèn)值是“男”。usejxglaltertable教師

addconstraintdf_教師_性別default'男'for性別【例5-13】為“班級(jí)”表中的列名為“班級(jí)人數(shù)”的列添加一個(gè)check約束,但不檢查表中現(xiàn)有數(shù)據(jù),限制輸入到列的數(shù)據(jù)范圍為40~60之間。usejxglaltertable班級(jí)withnocheckaddconstraintCk_班級(jí)_班級(jí)人數(shù)check(班級(jí)人數(shù)>=40and班級(jí)人數(shù)<=60)【例5-14】為“選修”表中列名為“課程號(hào)”的列添加一個(gè)“外鍵約束”于課程表。usejxglaltertable選修

addconstraintFk_選修_課程號(hào)foreignkey(課程號(hào))references課程(課程號(hào))5.4.2利用T-SQL語(yǔ)句修改表3.修改列使用altertable命令修改列時(shí),只能修改列的數(shù)據(jù)類(lèi)型及其列值是否為空等屬性,使用altertable命令語(yǔ)句修改表中列定義的基本語(yǔ)法格式如下:altertable<表名>altercolumn<列名><新數(shù)據(jù)類(lèi)型和長(zhǎng)度>[(<精度>[,<小數(shù)位數(shù)>])]【例5-15】將“班級(jí)”表中列名為“班級(jí)名稱(chēng)”的列的數(shù)據(jù)類(lèi)型修改為char(20)。usejxglaltertable班級(jí)

altercolumn班級(jí)名稱(chēng)char(20)null注意:如將一個(gè)原來(lái)允許為空的列修改為不允許為空(notnull),必須確保該列中沒(méi)有存放空值且該列上沒(méi)有建立索引。5.4.2利用T-SQL語(yǔ)句修改表4.刪除約束使用altertable命令語(yǔ)句刪除列約束定義的基本語(yǔ)法格式如下:altertable<表名>dropconstraint<約束名>【例5-16】將“選修”表中主鍵約束(pk_選修)刪除。usejxglaltertable選修

dropconstraintpk_選修【例5-17】將“選修”表中默認(rèn)值約束(df_選修_等級(jí))刪除。usejxglaltertable選修dropconstraintdf_選修_等級(jí)5.4.2利用T-SQL語(yǔ)句修改表5.刪除列有約束的列或者與其它列有關(guān)聯(lián)的列不能直接刪除,刪除列之前必須先刪除約束或列關(guān)聯(lián)信息。使用altertable命令語(yǔ)句刪除列定義的基本語(yǔ)法格式如下:altertable<表名>dropcolumn<列名>[,…n]【例5-18】將“選修”表中列名為“等級(jí)”的列刪除。usejxglaltertable選修dropcolumn等級(jí)【例5-19】將“學(xué)生”表中的列“郵政編碼”刪除(“郵政編碼”的約束沒(méi)有刪除)。usejxglaltertable學(xué)生dropcolumn郵政編碼注意:列的附加約束沒(méi)有刪除之前,無(wú)法刪除該列。5.4.2利用T-SQL語(yǔ)句修改表6.啟用和暫停約束使用check和nocheck選項(xiàng)可以啟動(dòng)或暫停SQLServer的某個(gè)或全部約束對(duì)新數(shù)據(jù)的約束檢查,但不適用主鍵約束和唯一約束?!纠?-20】暫停“選修”表中的外鍵約束(Fk_選修_課程號(hào))。usejxglaltertable選修nocheckconstraintFk_選修_課程號(hào)【例5-21】暫?!皩W(xué)生”表中的check約束和默認(rèn)約束。usejxglgoaltertable學(xué)生nocheckconstraintall注意:使用系統(tǒng)存儲(chǔ)過(guò)程sp_rename也可以修改表名或表列名,或使用帶參數(shù)’column’的系統(tǒng)存儲(chǔ)過(guò)程sp_rename修改列名。【例5-22】使用系統(tǒng)存儲(chǔ)過(guò)程修改表名“學(xué)生”為“student”。usejxglexecsp_rename

學(xué)生,student【例5-23】使用系統(tǒng)存儲(chǔ)過(guò)程將學(xué)生的“姓名”列修改為“學(xué)生姓名”。usejxglgoexecsp_rename'學(xué)生.姓名','學(xué)生姓名','column'5.5刪除數(shù)據(jù)表5.5.1使用企業(yè)管理刪除數(shù)據(jù)表5.5.2使用T-SQL語(yǔ)句刪除數(shù)據(jù)表5.5.1使用企業(yè)管理刪除數(shù)據(jù)表在企業(yè)管理器中展開(kāi)控制臺(tái)目錄,直到數(shù)據(jù)庫(kù)“jxgl”的“表”節(jié)點(diǎn),然后選擇要?jiǎng)h除的表,如表“班級(jí)”,如圖5-19所示。然后執(zhí)行“操作”→“刪除”命令后,彈出“除去對(duì)象”對(duì)話框,如圖5-20所示,單擊“全部除去”按鈕,就可以刪除表。

圖5-19選擇“班級(jí)”表對(duì)話框 圖5-20“除去對(duì)象”對(duì)話框5.5.2使用T-SQL語(yǔ)句刪除數(shù)據(jù)表也可以使用T-SQL刪除數(shù)據(jù)表,其語(yǔ)法格式如下:格式:droptable<表名>【例5-24】刪除“班級(jí)”表。usejxgldroptable班級(jí)5.6索引在SQLServer系統(tǒng)中,影響數(shù)據(jù)庫(kù)性能的因素很多,其中,設(shè)計(jì)良好的索引可以顯著提高數(shù)據(jù)庫(kù)的使用性能。索引的作用類(lèi)似于書(shū)的目錄,使得用戶(hù)對(duì)數(shù)據(jù)庫(kù)的查詢(xún)無(wú)需逐行掃描,而是通過(guò)遍歷索引樹(shù)結(jié)構(gòu)的方法查找所需行的存儲(chǔ)位置,并通過(guò)查詢(xún)結(jié)果提取所需的數(shù)據(jù)行。5.6.1索引概述5.6.2索引建立索引的優(yōu)勢(shì)是加快訪問(wèn)速度和實(shí)施行的唯一性。但并非索引越多越好,這是因?yàn)楫?dāng)頻繁地增加、刪除和更新數(shù)據(jù)時(shí),除了對(duì)表中數(shù)據(jù)進(jìn)行處理外,還會(huì)占用額外開(kāi)銷(xiāo)來(lái)維護(hù)索引而引起磁盤(pán)存儲(chǔ)空間不足。通常情況下,只有數(shù)據(jù)量大、更新較少而查詢(xún)較多的數(shù)據(jù)列,才需要在表上創(chuàng)建該列的索引。

1.索引的概念

索引是對(duì)數(shù)據(jù)表中的一列或多列的值進(jìn)行排序而創(chuàng)建的一種結(jié)構(gòu)分散的數(shù)據(jù)庫(kù)對(duì)象。索引中包含索引列的鍵值(搜索碼),以及映射到相應(yīng)數(shù)據(jù)行的指針。索引依據(jù)用戶(hù)指定順序(升序或降序)對(duì)鍵值進(jìn)行排序,從而使程序無(wú)需瀏覽整個(gè)表,就可以快速找到所需的數(shù)據(jù)。索引提供了邏輯順序,可以提高數(shù)據(jù)的查詢(xún)響應(yīng)速度,另外索引也能加快連接和select語(yǔ)句中g(shù)roupby與orderby子句的檢索速度。5.6.1索引概述2.索引的類(lèi)型在SQLServer中,根據(jù)索引的存儲(chǔ)結(jié)構(gòu)來(lái)分,可以將索引分為聚集索引和非聚集索引兩大類(lèi);根據(jù)索引的列值是否允許重復(fù)值的性質(zhì)來(lái)分,可以將索引分為主鍵索引、唯一性索引和普通索引三大類(lèi);根據(jù)索引的引用列數(shù)多少來(lái)分,可以將索引分為單列索引和復(fù)合列索引。5.6.2索引建立創(chuàng)建索引的過(guò)程實(shí)質(zhì)就是確立索引名、索引類(lèi)型及其針對(duì)的表名及其列名。創(chuàng)建索引既可以使用企業(yè)管理器,也可以使用Transact-SQL語(yǔ)句。1.使用企業(yè)管理器創(chuàng)建索引利用企業(yè)管理器建立索引有多種方法,既可以使用表設(shè)計(jì)器建立索引,也可以使用工具向?qū)Ы⑺饕?,還可以使用索引管理器建立索引。這里我們介紹最常用的方法,即利用表設(shè)計(jì)器建立索引。5.6.2索引建立【例5-25】為“班級(jí)”表的列“班級(jí)名稱(chēng)”建立唯一索引。操作步驟如下:(1)打開(kāi)“班級(jí)”表的表設(shè)計(jì)器,右擊“班級(jí)名稱(chēng)”列,彈出快捷菜單,選擇“索引/鍵”命令,如圖5-21所示。5.6.2索引建立(2)單擊“新建”按鈕,自動(dòng)建立一個(gè)名為“IX_班級(jí)”索引,如圖5-24所示,等待用戶(hù)進(jìn)一步修改。

圖5-23“屬性”對(duì)話框② 圖5-24“屬性”對(duì)話框③(3)修改索引名為“Uk_班級(jí)名稱(chēng)”,列名選擇“班級(jí)名稱(chēng)”,如圖5-25所示。表示建立以“班級(jí)名稱(chēng)”唯一約束,同時(shí)自動(dòng)建立相應(yīng)的唯一索引。(4)如果選擇單選“索引”項(xiàng)目,意味著創(chuàng)建“唯一”索引,但不包括唯一約束,如圖5-26所示。5.6.2索引建立5.6.2索引建立【例5-26】創(chuàng)建“課程”表,并建立“課程號(hào)”主鍵,“課程名稱(chēng)”唯一約束。createtable課程(課程號(hào)char(2)constraintpk_課程_課程號(hào)primarykey,課程名稱(chēng)varchar(20)constraintuk_課程_課程名稱(chēng)unique,課程類(lèi)型char(4),學(xué)時(shí)smallint,學(xué)分tinyint,備注text)5.6.2索引建立2.通過(guò)企業(yè)管理器創(chuàng)建索引利用企業(yè)管理器建立索引有多種方法,既可以使用表設(shè)計(jì)器建立索引,也可以使用工具向?qū)Ы⑺饕?,還可以使用索引管理器建立索引。這里我們介紹最常用的方法,即利用表設(shè)計(jì)器建立索引。【例5-31】為“班級(jí)”表的列“班級(jí)名稱(chēng)”建立唯一索引。操作步驟如下:(1)打開(kāi)“班級(jí)”表的表設(shè)計(jì)器,右擊“班級(jí)名稱(chēng)”列,彈出快捷菜單,選擇“索引/鍵”命令,如圖5-44所示。(2)單擊“索引/鍵”命令后,彈出“屬性”對(duì)話框,如圖5-45所示,顯示由主鍵約束(“例5-3”建表時(shí)創(chuàng)建)自動(dòng)建立的“pk_班級(jí)”主鍵索引信息。運(yùn)行程序后,用戶(hù)可以在企業(yè)管理器中通過(guò)表設(shè)計(jì)器查看索引信息。操作步驟如下:(1)展開(kāi)“企業(yè)管理器”控制臺(tái)目錄,右擊“課程”表,彈出快捷菜單,選擇“設(shè)計(jì)表”命令,如圖5-27所示。(2)單擊“設(shè)計(jì)表”命令,彈出“設(shè)計(jì)表”對(duì)話框,右擊列名“課程號(hào)”,彈出快捷菜單,選擇“索引/鍵”命令,如圖5-28所示。(3)單擊“索引/鍵”命令后,彈出“屬性”對(duì)話框①,如圖5-29所示,顯示系統(tǒng)自動(dòng)建立的“pk_課程_課程號(hào)”主鍵索引信息。單擊“選擇的索引”下拉列表框選擇“uk_課程_課程名稱(chēng)”后,彈出“屬性”對(duì)話框②,如圖5-30所示,顯示系統(tǒng)自動(dòng)建立的“uk_課

溫馨提示

  • 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)論