第3章 表與表數(shù)據(jù)操作_第1頁
第3章 表與表數(shù)據(jù)操作_第2頁
第3章 表與表數(shù)據(jù)操作_第3頁
第3章 表與表數(shù)據(jù)操作_第4頁
第3章 表與表數(shù)據(jù)操作_第5頁
已閱讀5頁,還剩142頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章

表與表數(shù)據(jù)操作3.1表結(jié)構(gòu)和數(shù)據(jù)類型3.2界面方式操作表3.3命令方式操作表3.4界面方式操作表數(shù)據(jù)3.5命令方式操作表數(shù)據(jù)本章要點在關(guān)系數(shù)據(jù)庫中,每個關(guān)系都對應(yīng)為一張表,表是數(shù)據(jù)庫的最主要對象,是信息世界實體或?qū)嶓w間聯(lián)系的數(shù)據(jù)表示,是用來存儲與操作數(shù)據(jù)的邏輯結(jié)構(gòu)。本章圍繞表對象主要介紹如下內(nèi)容:表的概念如何設(shè)計表如何創(chuàng)建和修改表表信息的交互式查詢與維護、刪除表等3.1表結(jié)構(gòu)和數(shù)據(jù)類型3.1.1表和表結(jié)構(gòu)每個數(shù)據(jù)庫包含了若干個表。表是SQLServer中最主要的數(shù)據(jù)庫對象,它是用來存儲數(shù)據(jù)的一種邏輯結(jié)構(gòu)。表由行和列組成,因此也稱之為二維表。學(xué)

號姓

名性

別出生時間專

業(yè)總

學(xué)

分備

注081101王林男計算機50081103王燕女計算機50081108林一帆男計算機52已提前修完一門課081202王林男通信工程40有一門課不及格,待補考081204馬琳琳女通信工程42表3.1“學(xué)生”表3.1.1表和表結(jié)構(gòu)與表有關(guān)的幾個概念:(1)表結(jié)構(gòu)。組成表的各列的名稱及數(shù)據(jù)類型,統(tǒng)稱為表結(jié)構(gòu)。(2)記錄。每個表包含了若干行數(shù)據(jù),它們是表的“值”,表中的一行稱為一個記錄。因此,表是記錄的有限集合。(3)字段。每個記錄由若干個數(shù)據(jù)項構(gòu)成,將構(gòu)成記錄的每個數(shù)據(jù)項稱為字段。例如學(xué)生(學(xué)號,姓名,性別,出生時間,專業(yè),總學(xué)分,備注),包含7個字段,由5個記錄組成。3.1.1表和表結(jié)構(gòu)(4)空值

空值(NULL)通常表示未知、不可用或?qū)⒃谝院筇砑拥臄?shù)據(jù)。若一個列允許為空值,則向表中輸入記錄值時可不為該列給出具體值。而一個列若不允許為空值,則在輸入時必須給出具體值。3.1.1表和表結(jié)構(gòu)(5)關(guān)鍵字若表中記錄的某一字段或字段組合能唯一標(biāo)識記錄,則稱該字段或字段組合為候選關(guān)鍵字(Candidatekey)。若一個表有多個候選關(guān)鍵字,則選定其中一個為主關(guān)鍵字(Primarykey),也稱為主鍵。

當(dāng)一個表僅有唯一的一個候選關(guān)鍵字時,該候選關(guān)鍵字就是主關(guān)鍵字。3.1.2數(shù)據(jù)類型設(shè)計數(shù)據(jù)庫表結(jié)構(gòu),除了表屬性外,主要就是設(shè)計列屬性。在表中創(chuàng)建列時,必須為其指定數(shù)據(jù)類型,列的數(shù)據(jù)類型決定了數(shù)據(jù)的取值、范圍和存儲格式。列的數(shù)據(jù)類型可以是SQLServer提供的系統(tǒng)數(shù)據(jù)類型,也可以是用戶定義的數(shù)據(jù)類型。3.1.2數(shù)據(jù)類型數(shù)據(jù)類型符號標(biāo)識整數(shù)型bigint,int,smallint,tinyint精確數(shù)值型decimal,numeric浮點型float,real貨幣型money,smallmoney位型bit字符型char,varchar、varchar(MAX)Unicode字符型nchar,nvarchar、nvarchar(MAX)文本型text,ntext二進制型binary,varbinary、varbinary(MAX)日期時間類型datetime,smalldatetime,date,time,datetime2,datetimeoffset時間戳型timestamp圖像型image其他cursor,sql_variant,table,uniqueidentifier,xml,hierarchyid3.1.2數(shù)據(jù)類型1.整數(shù)型整數(shù)包括bigint、int、smallint和tinyint,從標(biāo)識符的含義就可以看出,它們的表示數(shù)范圍逐漸縮小。bigint:大整數(shù),數(shù)范圍為-263(-9223372036854775808)~263-1(9223372036854775807),其精度為19,小數(shù)位數(shù)為0,長度為8字節(jié)。int:整數(shù),數(shù)范圍為-231(-2147483648)~231-1(2147483647),其精度為10,小數(shù)位數(shù)為0,長度為4字節(jié)。smallint:短整數(shù),數(shù)范圍為-215(-32768)~215-1(32767),其精度為5,小數(shù)位數(shù)為0,長度為2字節(jié)。tinyint:微短整數(shù),數(shù)范圍為0~255,長度為1字節(jié),其精度為3,小數(shù)位數(shù)為0,長度為1字節(jié)。3.1.2數(shù)據(jù)類型2.精確數(shù)值型decimal和numeric可存儲從-1038+1到1038-1的固定精度和小數(shù)位的數(shù)字數(shù)據(jù),它們的存儲長度隨精度變化而變化,最少為5字節(jié),最多為17字節(jié)。精度為1~9時,存儲字節(jié)長度為5。精度為10~19時,存儲字節(jié)長度為9。精度為20~28時,存儲字節(jié)長度為13。精度為29~38時,存儲字節(jié)長度為17。例如,若有聲明numeric(8,3),則存儲該類型數(shù)據(jù)需5字節(jié);而若有聲明numeric(22,5),則存儲該類型數(shù)據(jù)需13字節(jié)。3.1.2數(shù)據(jù)類型3.浮點型有兩種近似數(shù)值數(shù)據(jù)類型:float[(n)]和real。兩者通常都使用科學(xué)計數(shù)法表示數(shù)據(jù),即形為:尾數(shù)E階數(shù),如5.6432E20、-2.98E10、1.287659E-9等。real:使用4字節(jié)存儲數(shù)據(jù),表數(shù)范圍為-3.40E+38~3.40E+38,數(shù)據(jù)精度為7位有效數(shù)字。float:float型數(shù)據(jù)的數(shù)范圍為-1.79E+308~1.79E+308。定義中的n取值范圍是1~53,用于指示其精度和存儲大小。當(dāng)n在1~24之間時,實際上是定義了一個real型數(shù)據(jù),存儲長度為4字節(jié),精度為7位有效數(shù)字。當(dāng)n在25~53之間時,存儲長度為8字節(jié),精度為15位有效數(shù)字。當(dāng)缺省n時,代表n在25~53之間。3.1.2數(shù)據(jù)類型4.貨幣型SQLServer提供了兩個專門用于處理貨幣的數(shù)據(jù)類型:money和smallmoney,它們用十進制數(shù)表示貨幣值。money:數(shù)據(jù)的數(shù)范圍為-263(-922337203685477.5808)~263-1(922337203685477.5807),其精度為19,小數(shù)位數(shù)為4,長度為8字節(jié)。money的數(shù)的范圍與bigint相同,不同的只是money型有4位小數(shù)。實際上,money就是按照整數(shù)進行運算的,只是將小數(shù)點固定在末4位。smallmoney:數(shù)范圍為-231(-214748.3648)~231-1(214748.3647),其精度為10,小數(shù)位數(shù)為4,長度為4字節(jié)??梢妔mallmoney與int的關(guān)系就如同money與bigint的關(guān)系。3.1.2數(shù)據(jù)類型5.位型SQLServer中的位(bit)型數(shù)據(jù)相當(dāng)于其他語言中的邏輯型數(shù)據(jù),它只存儲0和1,長度為一個字節(jié)。但要注意,SQLServer對表中bit類型列的存儲做了優(yōu)化:如果一個表中有不多于8個的bit列,這些列將作為一個字節(jié)存儲;如果表中有9到16個bit列,這些列將作為兩個字節(jié)存儲;更多列的情況依次類推。當(dāng)為bit類型數(shù)據(jù)賦0時,其值為0,而賦非0(如100)時,其值為1。字符串值TRUE和FALSE可以轉(zhuǎn)換為以下bit值:TRUE轉(zhuǎn)換為1,F(xiàn)ALSE轉(zhuǎn)換為0。3.1.2數(shù)據(jù)類型6.字符型字符型數(shù)據(jù)用于存儲字符串,字符串中可包括字母、數(shù)字和其他特殊符號(如#、@、&等)。在輸入字符串時,需將串中的符號用單引號或雙引號括起來,如'abc'、"Abc<Cde"。SQLServer字符型包括兩類:固定長度(char)或可變長度(varchar)字符數(shù)據(jù)類型。char[(n)]:定長字符數(shù)據(jù)類型,其中n定義字符型數(shù)據(jù)的長度,n在1到8000之間,缺省為1。當(dāng)表中的列定義為char(n)類型時,若實際要存儲的串長度不足n時,則在串的尾部添加空格以達到長度n,所以char(n)的長度為n。若輸入的字符個數(shù)超出了n,則超出的部分被截斷。varchar[(n)]:變長字符數(shù)據(jù)類型,其中n的規(guī)定與定長字符型char中n完全相同,但這里n表示的是字符串可達到的最大長度。3.1.2數(shù)據(jù)類型7.Unicode字符型Unicode是“統(tǒng)一字符編碼標(biāo)準”,用于支持國際上非英語語種的字符數(shù)據(jù)的存儲和處理。SQLServer的Unicode字符型可以存儲Unicode標(biāo)準字符集定義的各種字符。Unicode字符型包括nchar[(n)]和nvarchar[(n)]兩類。nchar是固定長度Unicode數(shù)據(jù)的數(shù)據(jù)類型,nvarchar是可變長度Unicode數(shù)據(jù)的數(shù)據(jù)類型,二者均使用UNICODEUCS-2字符集。nchar[(n)]:nchar[(n)]為包含n個字符的固定長度Unicode字符型數(shù)據(jù),n的值在1與4000之間,缺省為1,長度2n字節(jié)。若輸入的字符串長度不足n,將以空白字符補足。nvarchar[(n)]:nvarchar[(n)]為最多包含n個字符的可變長度Unicode字符型數(shù)據(jù),n的值在1與4000之間,缺省為1。長度是所輸入字符個數(shù)的兩倍。實際上,nchar、nvarchar與char、varchar的使用非常相似,只是字符集不同(前者使用Unicode字符集,后者使用ASCII字符集)。3.1.2數(shù)據(jù)類型8.文本型文本型包括text和ntext兩類,分別對應(yīng)ASCII字符和Unicode字符。text類型可以表示最大長度為231-1(2147483647)個字符,其數(shù)據(jù)的存儲長度為實際字符數(shù)個字節(jié)。ntext類型可表示最大長度為230-1(1073741823)個Unicode字符,其數(shù)據(jù)的存儲長度是實際字符個數(shù)的兩倍(以字節(jié)為單位)。3.1.2數(shù)據(jù)類型9.二進制型二進制數(shù)據(jù)類型表示的是位數(shù)據(jù)流,包括binary(固定長度)和varbinary(可變長度)兩種。binary[(n)]:固定長度的n個字節(jié)二進制數(shù)據(jù)。n取值范圍為1到8000,缺省為1。binary(n)數(shù)據(jù)的存儲長度為n+4字節(jié)。若輸入的數(shù)據(jù)長度小于n,則不足部分用0填充;若輸入的數(shù)據(jù)長度大于n,則多余部分被截斷。varbinary[(n)]:n個字節(jié)變長二進制數(shù)據(jù)。n取值范圍為1到8000,缺省為1。varbinary(n)數(shù)據(jù)的存儲長度為實際輸入數(shù)據(jù)長度+4個字節(jié)。3.1.2數(shù)據(jù)類型10.日期時間類型日期時間類型數(shù)據(jù)用于存儲日期和時間信息,包括datetime和smalldatetime兩類。而在SQLServer2008中新增了4種新的日期時間數(shù)據(jù)類型,分別為date、time、datetime2和datetimeoffset。datetime:datetime類型可表示的日期范圍從1753年1月1日到9999年12月31日的日期和時間數(shù)據(jù),精確度為百分之三秒(3.33毫秒或0.00333秒),例如1到3毫秒的值都表示為0毫秒,4到6毫秒的值都表示為4毫秒。datetime類型數(shù)據(jù)長度為8字節(jié),日期和時間分別使用4個字節(jié)存儲。前4字節(jié)用于存儲datetime類型數(shù)據(jù)中距1900年1月1日的天數(shù)。為正數(shù)表示日期在1900年1月1日之后,為負數(shù)則表示日期在1900年1月1日之前。3.1.2數(shù)據(jù)類型10.日期時間類型日期時間類型數(shù)據(jù)用于存儲日期和時間信息,包括datetime和smalldatetime兩類。用戶給出datetime類型數(shù)據(jù)值時,日期部分和時間部分分別給出。日期部分的表示形式常用的格式如下:年月日2001Jan20、2001Janary20年日月200120Jan月日[,]年Jan202001、Jan20,2001、Jan20,01月年日Jan200120日月[,]年20Jan2001、20Jan,2001日年月202001Jan年(4位數(shù))2001表示年月日20010120、010120月/日/年、1/20/01、01/20/2001、1/20/2001月-日-年、1-20-01、01-20-2001、1-20-2001月.日.年、1.20.01、01.20.2001、1.20.200110.日期時間類型(3)datedate類型數(shù)據(jù)可以表示從公元元年1月1日到9999年12月31日的日期,date類型只存儲日期數(shù)據(jù),不存儲時間數(shù)據(jù),存儲長度為3字節(jié),表示形式與datetime數(shù)據(jù)類型的日期部分相同。3.1.2數(shù)據(jù)類型說明:年可用4位或2位表示,月和日可用1位或2位表示。時間部分常用的表示格式如下:時:分10:20、08:05時:分:秒20:15:18、20:15:18.2時:分:秒:毫秒20:15:18:200時:分AM|PM10:10AM、10:10PM(4)time:time數(shù)據(jù)類型只存儲時間數(shù)據(jù),表示格式為“hh:mm:ss[.nnnnnnn]”。3.1.2數(shù)據(jù)類型Smalldatetime

smalldatetime類型數(shù)據(jù)可表示從1900年1月1日到2079年6月6日的日期和時間,數(shù)據(jù)精確到分鐘。即29.998秒或更低的值向下舍入為最接近的分鐘,29.999秒或更高的值向上舍入為最接近的分鐘。3.1.2數(shù)據(jù)類型11.時間戳型標(biāo)識符是timestamp。若創(chuàng)建表時定義一個列的數(shù)據(jù)類型為時間戳類型,那么每當(dāng)對該表加入新行或修改已有行時,都由系統(tǒng)自動將一個計數(shù)器值加到該列,即將原來的時間戳值加上一個增量。記錄timestamp列的值實際上反映了系統(tǒng)對該記錄修改的相對(相對于其他記錄)順序。一個表只能有一個timestamp列。timestamp類型數(shù)據(jù)的值實際上是二進制格式數(shù)據(jù),其長度為8字節(jié)。3.1.2數(shù)據(jù)類型12.圖像數(shù)據(jù)類型標(biāo)識符是image,它用于存儲圖片、照片等。實際存儲的是可變長度二進制數(shù)據(jù),介于0與231-1(2147483647)字節(jié)之間。在SQLServer2005中該類型是為了向下兼容而保留的數(shù)據(jù)類型。微軟推薦用戶使用varbinary(MAX)數(shù)據(jù)類型來替代image類型。3.1.2數(shù)據(jù)類型13.其他數(shù)據(jù)類型SQLServer2005還提供了其他幾種數(shù)據(jù)類型:cursor、sql_variant、table和uniqueidentifier。cursor

是游標(biāo)數(shù)據(jù)類型,用于創(chuàng)建游標(biāo)變量或定義存儲過程的輸出參數(shù)。sql_variant是一種存儲SQLServer支持的各種數(shù)據(jù)類型(除text、ntext、image、timestamp和sql_variant外)值的數(shù)據(jù)類型。sql_variant的最大長度可達8016字節(jié)。3.1.2數(shù)據(jù)類型13.其他數(shù)據(jù)類型table是用于存儲結(jié)果集的數(shù)據(jù)類型,結(jié)果集可以供后續(xù)處理。Uniqueidentifier

是唯一標(biāo)識符類型。系統(tǒng)將為這種類型的數(shù)據(jù)產(chǎn)生唯一標(biāo)識值,它是一個16字節(jié)長的二進制數(shù)據(jù)。Xml

是用來在數(shù)據(jù)庫中保存xml文檔和片段的一種類型,但是此種類型的文件大小不能超過2GB。3.1.3表結(jié)構(gòu)設(shè)計學(xué)生管理系統(tǒng)的三個表:學(xué)生表(表名為XSB)、課程表(表名為KCB)和成績表(表名為CJB)。例如“性別”列只有“男”、“女”兩種值,所以可以使用bit型數(shù)據(jù),值1表示“男”,值0表示“女”,默認是1;“出生時間”是日期時間類型數(shù)據(jù),列類型定為datetime;“備注”列需要存放學(xué)生的備注信息,備注信息的內(nèi)容在0到500個字之間,所以應(yīng)該使用varchar類型。在XSB表中,只有“學(xué)號”列能唯一標(biāo)識一個學(xué)生,所以將“學(xué)號”列設(shè)為該表的主鍵。3.1.3表結(jié)構(gòu)設(shè)計列

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

度是否可空默

值說

明學(xué)號定長字符型(char)6×無主鍵,前2位年級,中間2位班級號,后2位序號姓名定長字符型(char)8×無性別位型(bit)1√11:男;0:女出生時間日期型(datetime)系統(tǒng)默認√無專業(yè)定長字符型(char)12√無總學(xué)分整數(shù)型(int)4√00≤總學(xué)分<160備注不定長字符型(varchar)500√無表3.3XSB的表結(jié)構(gòu)3.1.3表結(jié)構(gòu)設(shè)計列

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

度可

空默

值說

明課程號定長字符型(char)3×無主鍵課程名定長字符型(char)16×無開課學(xué)期整數(shù)型(tinyint)1√1只能為1~8學(xué)時整數(shù)型(tinyint)1√0學(xué)分整數(shù)型(tinyint)1×0表3.4KCB的表結(jié)構(gòu)列

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

度可

空默

值說

明學(xué)號定長字符型(char)6×無主鍵課程號定長字符型(char)3×無主鍵成績整數(shù)型(int)默認值√0表3.5CJB的表結(jié)構(gòu)3.1.4表的分類

SQLServer2008的表可分為:用戶基本表已分區(qū)表臨時表系統(tǒng)表四類

3.1.4表的分類(1)用戶基本表是存放用戶數(shù)據(jù)的標(biāo)準表,是數(shù)據(jù)庫中最基本、最主要的對象。(2)已分區(qū)表是將數(shù)據(jù)水平劃分為多個單元的表,這些單元可以分布到數(shù)據(jù)庫中的多個文件組中。在維護整個集合的完整性時,使用分區(qū)可以快速而有效地訪問或管理數(shù)據(jù)子集,從而使大型表或索引更易于管理。在分區(qū)方案下,將數(shù)據(jù)從OLTP加載到OLAP系統(tǒng)中這樣的操作只需幾秒鐘,而不是像在早期版本中那樣需要幾分鐘或幾小時。對數(shù)據(jù)子集執(zhí)行的維護操作也將更有效,因為它們的目標(biāo)只是所需的數(shù)據(jù),而不是整個表。(2)已分區(qū)表已分區(qū)表支持所有與設(shè)計和查詢標(biāo)準表關(guān)聯(lián)的屬性和功能,包括約束、默認值、標(biāo)識和時間戳值、觸發(fā)器和索引。分區(qū)表主要用于:表中包含或可能包含以不同方式使用的許多數(shù)據(jù);對表的查詢或更新沒有按照預(yù)期的方式執(zhí)行,或者維護開銷超出了預(yù)定義的維護期。

(3)臨時表

臨時表有兩種類型:本地臨時表和全局臨時表。在與首次創(chuàng)建或引用表時相同的SQLServer實例連接期間,本地臨時表只對于創(chuàng)建者是可見的。當(dāng)用戶與SQLServer實例斷開連接后,將刪除本地臨時表。全局臨時表在創(chuàng)建后對任何用戶和任何連接都是可見的,當(dāng)引用該表的所有用戶都與SQLServer實例斷開連接后,將刪除全局臨時表。(4)系統(tǒng)表SQLServer將定義服務(wù)器配置及其定義所有表的數(shù)據(jù)存儲在一組特殊的表中,這組表稱為系統(tǒng)表。除非通過專用的管理員連接,否則用戶無法直接查詢或更新系統(tǒng)表。也可以通過目錄視圖查看系統(tǒng)表中的信息。3.2界面方式操作表3.2.1創(chuàng)建表第1步:啟動SQLServerManagementStudio,在對象資源管理器中,展開“數(shù)據(jù)庫”,右擊“PXSCJ”數(shù)據(jù)庫菜單下的“表”選項,在彈出的快捷菜單中,選擇“新建表”菜單項,打開如圖3.1所示的“表設(shè)計器”窗口。圖3.1“表設(shè)計器”窗口3.2.1創(chuàng)建表第2步:在“表設(shè)計器”窗口中,根據(jù)已經(jīng)設(shè)計好的XSB的表結(jié)構(gòu),分別輸入或選擇各列的名稱、數(shù)據(jù)類型、是否允許為空等屬性。根據(jù)需要,可以在列屬性選項卡中填入相應(yīng)內(nèi)容。第3步:在“學(xué)號”列上右擊鼠標(biāo),選擇“設(shè)置主鍵”菜單項,選擇“設(shè)置主鍵”選項,如圖3.2所示。圖3.2設(shè)置XSB表的主鍵3.2.1創(chuàng)建表在“列屬性”選項卡中的“默認值和綁定”和“說明”項中分別填寫各列的默認值和說明。學(xué)生情況表結(jié)構(gòu)設(shè)計完成后的結(jié)果如圖3.3所示。圖3.3表屬性編輯完成結(jié)果3.2.1創(chuàng)建表第4步:在表的各列的屬性均編輯完成后,單擊工具欄中的

按鈕(“保存”按鈕),出現(xiàn)“選擇表名”對話框。在“選擇表名”對話框中輸入表名“XSB”,單擊“確定”按鈕即可創(chuàng)建XSB表。在對象資源管理器中可以找到新創(chuàng)建的XSB表,如圖3.4所示。圖3.4新創(chuàng)建的XSB表3.2.1創(chuàng)建表第5步:使用同樣的方法創(chuàng)建課程表,名稱為KCB;創(chuàng)建成績表,名稱為CJB。KCB表創(chuàng)建后的界面如圖3.5所示。圖3.5創(chuàng)建表KCB3.2.1創(chuàng)建表CJB表創(chuàng)建后的界面如圖3.6所示。圖3.6創(chuàng)建表CJB3.2.2修改表結(jié)構(gòu)在SQLServer2008中,當(dāng)用戶使用界面方式修改表的結(jié)構(gòu)(如添加列、修改列的數(shù)據(jù)類型等)時,必須刪除原來的表,再重新創(chuàng)建新表才能完成表的更改。如果強行更改會彈出如圖3.7所示的對話框。圖3.7“不允許保存更改”對話框

說明:每個表至多可定義1024列。表和列的名稱必須遵守標(biāo)識符的規(guī)定,在特定表中必須是唯一的,但同一數(shù)據(jù)庫的不同表中可使用相同的列名盡管對于每一個架構(gòu)在一個數(shù)據(jù)庫內(nèi)表的名稱必須是唯一的,但如果為每張表指定了不同的架構(gòu),則可以創(chuàng)建多個具有相同名稱的表??梢詣?chuàng)建名為employees的兩個表并分別指定Comp1和Comp2作為其架構(gòu)。當(dāng)您必須使用某一employees表時,可以通過指定表的架構(gòu)以及表的名稱來區(qū)分這兩個同名表。3.2.1創(chuàng)建表用戶架構(gòu)分離

SQLServer2008切斷數(shù)據(jù)庫用戶和架構(gòu)之間的隱式連接。

什么是架構(gòu)?架構(gòu)是形成單個命名空間的數(shù)據(jù)庫實體的集合。命名空間是一個集合,其中每個元素的名稱都是唯一的。例如,為了避免名稱沖突,同一架構(gòu)中不能有兩個同名的表。兩個表只有在位于不同的架構(gòu)中時才可以同名。注意:在討論數(shù)據(jù)庫工具時,“架構(gòu)”還指目錄信息,用于說明架構(gòu)或數(shù)據(jù)庫中的對象。在討論AnalysisServices時,“架構(gòu)”指多維對象,如多維數(shù)據(jù)集和維度。用戶架構(gòu)分離(續(xù)1)架構(gòu)是形成單個命名空間的數(shù)據(jù)庫實體的集合。雖然SQLServer2000包含CREATESCHEMA語句,但實際上并不會像上面所定義的那樣創(chuàng)建架構(gòu)。

在SQLServer2000中,數(shù)據(jù)庫用戶和架構(gòu)是隱式連接在一起的。每個數(shù)據(jù)庫用戶都是與該用戶同名的架構(gòu)的所有者。對象的所有者在功能上與包含它的架構(gòu)所有者相同。因而,SQLServer2000中的完全限定名稱的“架構(gòu)”也是數(shù)據(jù)庫中的用戶。在SQLServer中,架構(gòu)獨立于創(chuàng)建它們的數(shù)據(jù)庫用戶而存在。

可以在不更改架構(gòu)名稱的情況下轉(zhuǎn)讓架構(gòu)的所有權(quán)。并且可以在架構(gòu)中創(chuàng)建具有用戶友好名稱的對象,明確指示對象的功能。例如,除了accounting.ap.sandra.balance外,您還可以創(chuàng)建名為accounting.ap.invoice.balance的架構(gòu)。因為“invoice”不是用戶,所以從數(shù)據(jù)庫中刪除用戶后,無需更改此名稱。這就簡化了數(shù)據(jù)庫管理員和開發(fā)人員的工作。用戶架構(gòu)分離(續(xù)2)將架構(gòu)與數(shù)據(jù)庫用戶分離對管理員和開發(fā)人員而言有下列好處:1)多個用戶可以通過角色成員身份或Windows組成員身份擁有一個架構(gòu)。這擴展了允許角色和組擁有對象的用戶熟悉的功能。2)極大地簡化了刪除數(shù)據(jù)庫用戶的操作。3)刪除數(shù)據(jù)庫用戶不需要重命名該用戶架構(gòu)所包含的對象。因而,在刪除創(chuàng)建架構(gòu)所含對象的用戶后,不再需要修改和測試顯式引用這些對象的應(yīng)用程序。4)多個用戶可以共享一個默認架構(gòu)以進行統(tǒng)一名稱解析。5)開發(fā)人員通過共享默認架構(gòu)可以將共享對象存儲在為特定應(yīng)用程序?qū)iT創(chuàng)建的架構(gòu)中,而不是DBO架構(gòu)中。6)可以用比早期版本中的粒度更大的粒度管理架構(gòu)和架構(gòu)包含的對象的權(quán)限。7)完全限定的對象名稱現(xiàn)在包含四部分:server.database.schema.object。用戶架構(gòu)分離(續(xù)3)SQLServer2008還引入了“默認架構(gòu)”的概念,用于解析未使用其完全限定名稱引用的對象的名稱。在SQLServer2008中,首先檢查的是調(diào)用數(shù)據(jù)庫用戶所擁有的架構(gòu),然后是DBO擁有的架構(gòu)。在SQLServer2008中,每個用戶都有一個默認架構(gòu),用于指定服務(wù)器在解析對象的名稱時將要搜索的第一個架構(gòu)??梢允褂肅REATEUSER和ALTERUSER的DEFAULT_SCHEMA選項設(shè)置和更改默認架構(gòu)。如果未定義DEFAULT_SCHEMA,則數(shù)據(jù)庫用戶將把DBO作為其默認架構(gòu)。許多實體的所有權(quán)都可以轉(zhuǎn)讓。用戶架構(gòu)分離(續(xù)4)3.2.2修改表結(jié)構(gòu)如果要在修改表時不出現(xiàn)此對話框,可以進行以下操作:啟動SQLServerManagementStudio,在面板中單擊“工具”主菜單,選擇“選項”子菜單,在出現(xiàn)的“選項”對話框中選擇“Designers”下的“表設(shè)計器和數(shù)據(jù)庫設(shè)計器”選項卡,將“阻止保存要求重新創(chuàng)建表的更改”復(fù)選框前的勾去掉圖3.8解除阻止保存的選項3.2.2修改表結(jié)構(gòu)1.更改表名SQLServer2008中允許改變一個表的名字,但當(dāng)表名改變后,與此相關(guān)的某些對象(如視圖),以及通過表名與表相關(guān)的存儲過程將無效。因此,建議一般不要更改一個已有的表名,特別是當(dāng)在其上定義了視圖或建立了相關(guān)的表時。圖3.9修改表名【例3.1】

將XSB表的表名改為student。

在對象資源管理器中選擇需要更名的表XSB,右擊鼠標(biāo),在彈出的快捷菜單上選擇“重命名”菜單項,如圖3.9所示,輸入新的表名student,按下回車鍵即可更改表名。3.2.2修改表結(jié)構(gòu)2.增加列當(dāng)原來所創(chuàng)建的表中需要增加項目時,就要向表中增加列。例如,若在表XSB中需要登記其籍貫、獲獎情況等,就要用到增加列的操作。同樣,已經(jīng)存在的列可能需要修改或刪除?!纠?.2】向表XSB中添加一個“獎學(xué)金等級”列,“獎學(xué)金等級”列的數(shù)據(jù)類型為tinyint,允許為空值。第1步:啟動SQLServerManagementStudio,在對象資源管理器中展開“數(shù)據(jù)庫”,選擇其中的“PXSCJ”數(shù)據(jù)庫,在“PXSCJ”數(shù)據(jù)庫中選擇表“dbo.XSB”,右擊鼠標(biāo),在彈出的快捷菜單上選擇“設(shè)計”菜單項,打開“表設(shè)計器”窗口。3.2.2修改表結(jié)構(gòu)第2步:在“表設(shè)計器”窗口中選擇第一個空白行,輸入列名“獎學(xué)金等級”,選擇數(shù)據(jù)類型“tinyint”,如圖3.10所示。如果要在某列之前加入新列,則可以右擊該列,選擇“插入列”,在空白行中填寫列信息即可。圖3.10增加新列3.2.2修改表結(jié)構(gòu)第3步:當(dāng)需向表中添加的列均輸入完畢后,關(guān)閉該窗口,此時將彈出一個“保存更改”對話框,單擊“是”按鈕,保存修改后的表(或單擊面板中的

按鈕)。3.刪除列在“表dbo.XSB設(shè)計器”窗口中選擇需刪除的列(如在XSB表中刪除“獎學(xué)金等級”列),右擊鼠標(biāo),在彈出的快捷菜單上選擇“刪除列”菜單項,該列即被刪除。3.2.2修改表結(jié)構(gòu)4.修改列表中尚未有記錄值時,可以修改表結(jié)構(gòu),如更改列名、列的數(shù)據(jù)類型、長度和是否允許空值等屬性;但當(dāng)表中有了記錄后,建議不要輕易改變表結(jié)構(gòu),特別不要改變數(shù)據(jù)類型,以免產(chǎn)生錯誤。3.2.2修改表結(jié)構(gòu)(1)具有以下特性的列不能修改:數(shù)據(jù)類型為timestamp的列;計算列;全局標(biāo)識符列;用于索引的列(但當(dāng)用于索引的列為varchar、nvarchar或varbinary數(shù)據(jù)類型時,可以增加列的長度);用于由CREATESTATISTICS生成統(tǒng)計的列,如需修改這樣的列,則必須先用DROPSTATISTICS語句刪除統(tǒng)計;用于主鍵或外鍵約束的列;用于CHECK或UNIQUE約束的列;關(guān)聯(lián)有默認值的列。3.2.2修改表結(jié)構(gòu)(2)當(dāng)改變列的數(shù)據(jù)類型時,要求滿足下列條件:原數(shù)據(jù)類型必須能夠轉(zhuǎn)換為新數(shù)據(jù)類型。新數(shù)據(jù)類型不能為timestamp類型。如果被修改列屬性中有“標(biāo)識規(guī)范”屬性,則新數(shù)據(jù)類型必須是有效的“標(biāo)識規(guī)范”數(shù)據(jù)類型。3.2.2修改表結(jié)構(gòu)【例3.3】在XSB表中,將“姓名”列名改為“name”,數(shù)據(jù)長度由8改為10,允許為空值。將“出生時間”列名改為“birthday”,數(shù)據(jù)類型由“date”改為“datetime”。因尚未輸入記錄值,所以可以改變XSB表的結(jié)構(gòu),右擊需要修改的XSB表,選擇“設(shè)計”菜單項進入表XSB的設(shè)計窗口,選擇需要修改的列,修改相應(yīng)的屬性。修改完后保存。3.2.3刪除表刪除一個表時,表的定義、表中的所有數(shù)據(jù)以及表的索引、觸發(fā)器、約束等均被刪除。注意,不能刪除系統(tǒng)表和外鍵約束所參照的表

?!纠?.4】使用界面方式刪除表XSB啟動“SQLServerManagementStudio”,在對象資源管理器中展開“數(shù)據(jù)庫→PXSCJ→表”,選擇要刪除的表XSB,右擊鼠標(biāo),在彈出的快捷菜單上選擇“刪除”菜單項。系統(tǒng)彈出“刪除對象”窗口。單擊“確定”按鈕,即可刪除XSB表。

3.3命令方式操作表3.3.1創(chuàng)建表CREATETABLE語句CREATETABLE

[database_name.[schema_name].|schema_name.]table_name

( { <column_definition> /*列的定義*/ |column_nameAScomputed_column_expression[PERSISTED[NOTNULL]]

/*定義計算列*/

}

[<table_constraint>][,...n]

/*指定表的約束*/)[ON{partition_scheme_name(partition_column_name)|filegroup|"default"}]

/*指定分區(qū)方案和存儲表的文件組*/[{TEXTIMAGE_ON{filegroup|"default"}] /*指定存儲text、ntext、image等類型數(shù)據(jù)的文件組*/[FILESTREAM_ON{partition_scheme_name|filegroup|"default"}]

/*指定存儲FILESTREAM數(shù)據(jù)的文件組*/[WITH(<table_option>[,...n])] /*指定表選項*/[;]3.3.1創(chuàng)建表列的定義格式如下:<column_definition>::=column_namedata_type /*指定列名、類型*/[FILESTREAM] /*指定FILESTREAM屬性*/[COLLATEcollation_name] /*指定排序規(guī)則*/[NULL|NOTNULL] /*指定是否為空*/[

[CONSTRAINTconstraint_name] DEFAULTconstant_expression] /*指定默認值*/|[IDENTITY[(seed,increment)][NOTFORREPLICATION]/*指定列為標(biāo)識列*/

][ROWGUIDCOL] /*指定列為全局標(biāo)識符列*/ [<column_constraint>[...n]] /*指定列的約束*/ [SPARSE]3.3.1創(chuàng)建表FILESTREAM允許以獨立文件的形式存放大對象數(shù)據(jù),而不是原來的將所有數(shù)據(jù)都保存到數(shù)據(jù)文件中。FILESTREAM存儲以varbinary(MAX)列的形式實現(xiàn)。FILESTREAM數(shù)據(jù)必須存儲在FILESTREAM文件組中。在開始使用FILESTREAM之前,必須在SQLServer2008數(shù)據(jù)庫引擎實例中啟用FILESTREAM。3.3.1創(chuàng)建表第1步:在SQLServer配置管理器中打開SQLServer2008數(shù)據(jù)庫實例的“屬性”窗口,選擇“FILESTREAM”選項卡,選中“針對Transact-SQL訪問啟用FILESTREAM”復(fù)選框,其他的選項是針對Windows進行讀/寫的,可以都選中,如圖3.11所示,然后單擊“確定”按鈕保存對FILESTREAM的設(shè)置。圖3.11啟用FILESTREAM3.3.1創(chuàng)建表第2步:打開SSMS,在對象資源管理器中右擊已連接的服務(wù)器,選擇“屬性”菜單項。在“服務(wù)器屬性”窗口中選擇“高級”選項卡,在“文件流訪問級別”選項后的下拉列表框中選擇“已啟用完全訪問”選項,如圖3.12所示。單擊“確定”按鈕后在SQLServer配置管理器中重啟SQLServer服務(wù),F(xiàn)ILESTREAM在數(shù)據(jù)庫實例中的設(shè)置即可完成。圖3.12設(shè)置文件流訪問級別3.3.1創(chuàng)建表完成以上步驟后數(shù)據(jù)庫實例即啟用了FILESTREAM,接下來就可以創(chuàng)建FILESTREAM文件組和具有FILESTREAM數(shù)據(jù)列的表了。在創(chuàng)建了FILESTREAM數(shù)據(jù)列后,訪問的方法與訪問一般varbinary(MAX)列的方式相同。NULL|NOTNULL:NULL表示列可取空值,NOTNULL表示列不可取空值。DEFAULTconstant_expression:為所在列指定默認值,默認值constant_expression必須是一個常量值、標(biāo)量函數(shù)或NULL值。DEFAULT定義可適用于除定義為timestamp或帶identity屬性的列以外的任何列。3.3.1創(chuàng)建表IDENTITY:指出該列為標(biāo)識符列,為該列提供一個唯一的、遞增的值。seed是標(biāo)識字段的起始值,默認值為1,increment是標(biāo)識增量,默認值為1。如果為IDENTITY屬性指定了NOTFORREPLICATION選項,則復(fù)制代理執(zhí)行插入時,標(biāo)識列中的值將不會增加。3.3.1創(chuàng)建表<column_constraint>:列的完整性約束,指定主鍵、替代鍵、外鍵等。例如,指定該列為主鍵則使用PRIMARYKEY關(guān)鍵字。<table_constraint>:表的完整性約束,有關(guān)列的約束和表的約束將在第6章中介紹。3.3.1創(chuàng)建表column_nameAScomputed_column_expression:用于定義計算字段,計算字段是由同一表中的其他字段通過表達式計算得到的。

其中,column_name為計算字段的列名,computed_column_expression是表其他字段的表達式,表達式可以是非計算字段的字段名、常量、函數(shù)、變量,也可以是一個或多個運算符連接的上述元素的任意組合。系統(tǒng)不將計算列中的數(shù)據(jù)進行物理存儲,該列只是一個虛擬列。如果需要將該列的數(shù)據(jù)物理化,則需要使用PERSISTED關(guān)鍵字。3.3.1創(chuàng)建表ON子句:filegroup|“default”指定存儲表的文件組。如果指定了

filegroup,則表將存儲在指定的文件組中,數(shù)據(jù)庫中必須存在該文件組。如果指定“default”,或者未指定ON參數(shù),則表存儲在默認文件組中。partition_scheme_name(partition_column_name)指定分區(qū)方案來創(chuàng)建分區(qū)表,partition_scheme_name是分區(qū)方案的名稱,partition_column_name是表中的分區(qū)列。3.3.1創(chuàng)建表TEXTIMAGE_ON{filegroup|"default"}:TEXTIMAGE_ON表示將text、ntext、image、xml、varchar(MAX)、nvarchar(MAX)、varbinary(MAX)和CLR用戶定義類型的列存儲在指定文件組中。

如果表中沒有這些類型的列,則不能使用TEXTIMAGE_ON。如果沒有指定TEXTIMAGE_ON或指定了"default",則這些列將與表存儲在同一文件組中。FILESTREAM_ON子句:filegroup|"default"指定存儲FILESTREAM數(shù)據(jù)的文件組。如果表包含F(xiàn)ILESTREAM數(shù)據(jù)并且已分區(qū),則必須包含F(xiàn)ILESTREAM_ON子句并指定FILESTREAM文件組的分區(qū)方案partition_scheme_name。

3.3.1創(chuàng)建表【例3.5】設(shè)已經(jīng)創(chuàng)建了數(shù)據(jù)庫PXSCJ,現(xiàn)在該數(shù)據(jù)庫中需創(chuàng)建學(xué)生情況表XSB,該表的結(jié)構(gòu)見表3.3。創(chuàng)建表XSB的T-SQL語句如下:USEPXSCJGOCREATETABLEXSB(

學(xué)號

char(6) NOTNULLPRIMARYKEY,

姓名

char(8) NOTNULL,

性別

bit NULLDEFAULT1,

出生時間

date NULL,

專業(yè)

char(12) NULL,

總學(xué)分

int NULL,

備注

varchar(500)NULL)主碼約束3.3.1創(chuàng)建表【例3.6】創(chuàng)建一個帶計算列的表,表中包含課程的課程號、總成績和學(xué)習(xí)該課程的人數(shù),以及課程的平均成績。CREATETABLEPJCJ(

課程號

char(3)

PRIMARYKEY,

總成績

realNOTNULL,

人數(shù)

intNOTNULL,

平均成績

AS總成績/人數(shù)

PERSISTED)3.3.2創(chuàng)建分區(qū)表當(dāng)表中存儲了大量數(shù)據(jù),且這些數(shù)據(jù)經(jīng)常被不同的使用方式訪問的時候,需要將表建成分區(qū)表。分區(qū)表是將數(shù)據(jù)分成多個單元的表,這些單元可以分散到數(shù)據(jù)庫中的多個文件組中,實現(xiàn)對單元中數(shù)據(jù)的并行訪問,從而實現(xiàn)了對數(shù)據(jù)庫的優(yōu)化,提高了查詢效率。3.3.2創(chuàng)建分區(qū)表在SQLServer2008中創(chuàng)建分區(qū)表的步驟包括:創(chuàng)建分區(qū)函數(shù),指定如何分區(qū);創(chuàng)建分區(qū)方案,定義分區(qū)函數(shù)在文件組上的位置;使用分區(qū)方案。3.3.2創(chuàng)建分區(qū)表創(chuàng)建分區(qū)函數(shù)使用“CREATEPARTITIONFUNCTION”命令CREATEPARTITIONFUNCTIONpartition_function_name(input_parameter_type) ASRANGE[LEFT|RIGHT] FORVALUES([boundary_value[,...n]])[;]3.3.2創(chuàng)建分區(qū)表說明:partition_function_name是分區(qū)函數(shù)的名稱。分區(qū)函數(shù)名稱在數(shù)據(jù)庫內(nèi)必須唯一input_parameter_type是用于分區(qū)的列的數(shù)據(jù)類型。3.3.2創(chuàng)建分區(qū)表boundary_value

為使用partition_function_name

的已分區(qū)表或索引的每個分區(qū)指定邊界值。如果boundary_value

為空,則分區(qū)函數(shù)使用partition_function_name

將整個表或索引映射到單個分區(qū)。

boundary_value必須與輸入?yún)?shù)提供的數(shù)據(jù)類型相匹配,或可隱式轉(zhuǎn)換為該數(shù)據(jù)類型。LEFT

|RIGHT指定當(dāng)間隔值由數(shù)據(jù)庫引擎按升序從左到右排序時,boundary_value

[,...n]屬于每個邊界值間隔的哪一側(cè)(左側(cè)還是右側(cè))。如果未指定,則默認值為LEFT。3.3.2創(chuàng)建分區(qū)表1.使用T-SQL語句創(chuàng)建分區(qū)表(1)創(chuàng)建分區(qū)函數(shù)CREATEPARTITIONFUNCTION

partition_function_name(input_parameter_type)

ASRANGE[LEFT|RIGHT]

FORVALUES([boundary_value[,...n]])[;]

3.3.2創(chuàng)建分區(qū)表【例3.7】對int類型的列創(chuàng)建一個名為NumberPF的分區(qū)函數(shù),該函數(shù)把int類型的列中數(shù)據(jù)分成5個區(qū)。分為小于或等于50的區(qū)、大于50且小于或等于500的區(qū)、大于500且小于或等于1000的區(qū)、大于1000且小于或等于2000的區(qū)、大于2000的區(qū)。CREATEPARTITIONFUNCTIONNumberPF(int) ASRANGELEFT

FORVALUES

(50,500,1000,2000)GO3.3.2創(chuàng)建分區(qū)表(2)創(chuàng)建分區(qū)方案分區(qū)函數(shù)創(chuàng)建完后可以使用CREATEPARTITIONSCHEME命令創(chuàng)建分區(qū)方案,由于在創(chuàng)建分區(qū)方案時需要根據(jù)分區(qū)函數(shù)的參數(shù)定義映射分區(qū)的文件組。所以需要有文件組來容納分區(qū)數(shù),文件組可以由一個或多個文件構(gòu)成,而每個分區(qū)必須映射到一個文件組。一個文件組可以由多個分區(qū)使用。在一般情況下,文件組數(shù)最好與分區(qū)數(shù)相同,并且這些文件組通常位于不同的磁盤上。一個分區(qū)方案只可以使用一個分區(qū)函數(shù),而一個分區(qū)函數(shù)可以用于多個分區(qū)方案中。3.3.2創(chuàng)建分區(qū)表CREATEPARTITIONSCHEME命令的語法格式如下。CREATEPARTITIONSCHEMEpartition_scheme_name

ASPARTITIONpartition_function_name [ALL]TO({file_group_name|[PRIMARY]}[,...n])[;]3.3.2創(chuàng)建分區(qū)表【例3.8】假設(shè)文件組FGroup1、FGroup2、FGroup3、FGroup4、FGroup5已經(jīng)在數(shù)據(jù)庫PXSCJ中存在。根據(jù)例3.7中定義的分區(qū)函數(shù)創(chuàng)建一個分區(qū)方案,將分區(qū)函數(shù)中的5個分區(qū)分別存放在這5個文件組中。CREATEPARTITIONSCHEMENumberPS ASPARTITIONNumberPF

TO(Group1,FGroup2,FGroup3,FGroup4,FGroup5)GO3.3.2創(chuàng)建分區(qū)表(3)使用分區(qū)方案創(chuàng)建分區(qū)表分區(qū)函數(shù)和分區(qū)方案創(chuàng)建以后就可以創(chuàng)建分區(qū)表了。創(chuàng)建分區(qū)表使用CREATETABLE語句,只要在ON關(guān)鍵字后指定分區(qū)方案和分區(qū)列即可。3.3.2創(chuàng)建分區(qū)表【例3.9】在數(shù)據(jù)庫PXSCJ中創(chuàng)建分區(qū)表,表中包含“編號”(值可以是1~5000)、“名稱”兩列,要求使用例3.8中的分區(qū)方案。CREATETABLEsample(

編號

intNOTNULLPRIMARYKEY,

名稱

char(8)NOTNULL)ONNumberPS(編號)3.3.2創(chuàng)建分區(qū)表2.使用圖形向?qū)Х绞絼?chuàng)建分區(qū)表【例3.10】使用圖形向?qū)Х绞綄XSCJ數(shù)據(jù)庫中的CJB表根據(jù)“成績”列分區(qū),成績值為0~100,根據(jù)成績值分為5個區(qū):0~59,60~69,70~79,81~89,90~100。操作步驟如下。第1步:啟動SQLServerManagementStudio,在對象資源管理器中展開“數(shù)據(jù)庫”,右擊“PXSCJ”數(shù)據(jù)庫菜單下的“表”選項,右擊表“dbo.CJB”選擇“存儲”菜單項,單擊“創(chuàng)建分區(qū)”子菜單項,進入分區(qū)向?qū)Т翱?,單擊“下一步”按鈕,進入“選擇分區(qū)列”界面,界面中將顯示可用的分區(qū)列,選擇“成績”列,如圖3.13所示。3.3.2創(chuàng)建分區(qū)表2.使用圖形向?qū)Х绞絼?chuàng)建分區(qū)表圖3.13選擇分區(qū)列3.3.2創(chuàng)建分區(qū)表第2步:單擊“下一步”按鈕,進入“選擇分區(qū)函數(shù)”界面。選擇“新建分區(qū)函數(shù)”選項,填寫要新建的分區(qū)函數(shù)的名稱,如PointsPF,如圖3.14所示。當(dāng)然,也可以選擇現(xiàn)有的分區(qū)函數(shù)。

圖3.14選擇分區(qū)函數(shù)3.3.2創(chuàng)建分區(qū)表第3步:單擊“下一步”按鈕,進入“選擇分區(qū)方案”界面。填寫要新建的分區(qū)方案的名稱,如PointsPS,如圖3.15所示,單擊“下一步”按鈕。圖3.15選擇分區(qū)方案

3.3.2創(chuàng)建分區(qū)表第4步:進入“映射分區(qū)”界面,在界面中選擇各個分區(qū)要映射到的文件組,如FGroup1、FGroup2等。選擇單選按鈕“左邊界”,在“<=邊界”欄指定分區(qū)的邊界值,并選擇一個邊界值之外的額外文件組,如圖3.16所示。另外,還可以單擊“預(yù)計存儲空間”按鈕來查看各分區(qū)所需空間等信息。

圖3.16選擇文件組和指定邊界值第5步:單擊“下一步”按鈕,進入“選擇輸出選項”界面。用戶可以在其中選擇“立即運行”選項,并單擊“完成”按鈕完成對CJB的分區(qū)。用戶也可以選擇“創(chuàng)建腳本”選項,并指定保存腳本的位置。說明雖然分區(qū)可以帶來眾多的好處,但也增加了實現(xiàn)對象的管理操作和復(fù)雜性;不需要為較小的表或目前滿足性能和維護要求的表分區(qū)。3.3.3修改表結(jié)構(gòu)ALTERTABLEALTERTABLE[database_name.[schema_name].|schema_name.]table_name{ [ALTERCOLUMNcolumn_name

/*修改已有列的屬性*/ {new_data_type[(precision[,scale])] [COLLATE<collation_name>] [NULL|NOTNULL] |{ADD|DROP}[ROWGUIDCOL|PERSISTED] } ] |[WITH{CHECK|NOCHECK}]ADD /*添加列*/ { <column_definition> |column_nameAScomputed_column_expression

[PERSISTED[NOTNULL]] |<table_constraint> }[,...n]

………..3.3.3修改表結(jié)構(gòu)……………… |DROP

/*刪除列*/ {

[CONSTRAINT]constraint_name[WITH(<drop_clustered_constraint_option>[,...n])]

|COLUMNcolumn_name }[,...n] |[WITH{CHECK|NOCHECK}]{CHECK|NOCHECK}CONSTRAINT {ALL|constraint_name[,...n]} |{ENABLE|DISABLE}TRIGGER {ALL|trigger_name[,...n]} |SWITCH[PARTITIONsource_partition_number_expression] TO[schema_name.]target_table [PARTITIONtarget_partition_number_expression]}<table_constraint>3.3.3修改表結(jié)構(gòu)【例3.11】設(shè)已經(jīng)在數(shù)據(jù)庫PXSCJ中創(chuàng)建了表XSB,先在表XSB中增加1個新列“獎學(xué)金等級”,然后在表XSB中刪除名為“獎學(xué)金等級”的列。ALTERTABLEXSB

ADD獎學(xué)金等級

tinyintNULLEXECsp_help

XSB

輸入完成后執(zhí)行該腳本,然后可以在對象資源管理器中展開“PXSCJ”中的表dbo.XSB的結(jié)構(gòu),查看運行結(jié)果。3.3.3修改表結(jié)構(gòu)在表XSB中刪除名為獎學(xué)金等級的列:ALTERTABLEXSB DROPCOLUMN獎學(xué)金等級

使用ALTERTABLE語句一次還可以添加多個列,中間用逗號隔開。例如,向XSB表中添加獎學(xué)金等級1、獎學(xué)金等級2兩個新列:ALTERTABLEXSB

ADD獎學(xué)金等級1tinyintNULL,

獎學(xué)金等級2tinyintNULL3.3.3修改表結(jié)構(gòu)【例3.12】修改表XSB中已有列的屬性:將名為“姓名”的列長度由原來的8改為10;將名為“出生時間”的列的數(shù)據(jù)類型由原來的date改為datetime。GOALTERTABLEXSB

ALTERCOLUMN

姓名

char(10)GOALTERTABLEXSB

ALTERCOLUMN出生時間

smalldatetime3.3.3修改表結(jié)構(gòu)為XS表添加主碼約束

altertablexsaddconstraintxh_pk

primarykey(學(xué)號)刪除主碼約束Altertablexsdropconstraintxh_pk添加身份證號,并設(shè)為唯一性約束altertablexsadd身份證號char(18)nullconstraintsf_uqunique3.3.3修改表結(jié)構(gòu)為現(xiàn)有列添加一個外碼約束

altertablecj

addconstraintxh_FKforeignkey(學(xué)號)referencesxs(學(xué)號)3.3.3修改表結(jié)構(gòu)添加一個包含默認值約束的列altertablexsadd

班級varchar(20)null

constraintbj_defaultdefault'電商-1‘為現(xiàn)有列添加一個默認值約束altertablexsaddconstraintbj_default

default'電商-1'

for

班級3.3.4刪除表DROPTABLE[database_name.[schema_name].|schema_name.]table_name[,...n][;]其中,table_name是要被刪除的表名。例如,要刪除表XSB,使用的T-SQL語句為:DROPTABLEXSB3.4界面方式操作表數(shù)據(jù)3.4.1插入記錄用戶可以自己根據(jù)需要向表中插入數(shù)據(jù),插入的數(shù)據(jù)要符合列的約束條件例如,不可以向非空的列插入NULL值。圖3.17所示是插入數(shù)據(jù)后的XSB表。3.4界面方式操作表數(shù)據(jù)3.4.1插入記錄圖3.17向表中插入記錄3.4.2刪除記錄當(dāng)表中的某些記錄不再需要時,要將其刪除。在對象資源管理器中刪除記錄的方法是:在表數(shù)據(jù)窗口中定位需刪除的記錄行,單擊該行最前面的黑色箭頭處選擇全行,右擊鼠標(biāo),選擇“刪除”菜單項,如圖3.18所示。圖3.18刪除記錄3.4.3修改記錄在操作表數(shù)據(jù)的窗口中修改記錄數(shù)據(jù)的方法是,先定位被修改的記錄字段,然后對該字段值進行修改,修改之后將光標(biāo)移到下一行即可保存修改的內(nèi)容。3.5命令方式操作表數(shù)據(jù)3.5.1插入記錄插入記錄使用INSERT語句。語法格式。說明如下。(1)table_name:被操作的表名。前面可以指定數(shù)據(jù)庫名和架構(gòu)名。(2)view_name:視圖名。有關(guān)視圖的內(nèi)容將在第4章中介紹。(3)column_list:需要插入數(shù)據(jù)的列的列表。包含了新插入行的各列的名稱。當(dāng)只給表的部分列插入數(shù)據(jù)時,需要用column_list指出這些列。(4)OUTPUT子句:用于在執(zhí)行插入數(shù)據(jù)操作時返回插入的行,可用于數(shù)據(jù)比較等場合,可省略。Output子句@table_variable

指定一個table變量,返回的行將插入此變量,而不是返回給調(diào)用方。@table_variable

必須在INSERT、UPDATE、DELETE或MERGE語句前聲明。如果未指定column_list,則table變量必須與OUTPUT結(jié)果集具有相同的列數(shù)。標(biāo)識列和計算列除外,這兩種列必須跳過。3.5命令方式操作表數(shù)據(jù)3.5.1插入記錄(5)VALUES子句:包含各列需要插入的數(shù)據(jù)清單,數(shù)據(jù)的順序要與列的順序相對應(yīng)。若省略colume_list,則VALUES子句給出每一列(除IDENTITY屬性和timestamp類型以外的列)的值。VALUES子句中的值可有以下三種。①DEFAULT:指定為該列的默認值。這要求定義表時必須指定該列的默認值。②NULL:指定該列為空值。③expression:可以是一個常量、變量或一個表達式,其值的數(shù)據(jù)類型要與列的數(shù)據(jù)類型一致。例如,列的數(shù)據(jù)類型為int,若插入的數(shù)據(jù)是'aaa'就會出錯。當(dāng)數(shù)據(jù)為字符型時要用單引號括起來。3.5.1插入記錄(6)derived_table:這是一個由SELECT語句查詢所得到的結(jié)果集。利用該參數(shù),可把一個表中的部分數(shù)據(jù)插入到另一個表中。結(jié)果集中每行數(shù)據(jù)的字段數(shù)、字段的數(shù)據(jù)類型要與被操作的表完全一致。使用結(jié)果集向表中插入數(shù)據(jù)時可以使用TOP(expression)[PERCENT]選項,這個選項可以在結(jié)果集中選擇指定的行數(shù)或占指定百分比數(shù)的行插入表中。expression可以是行數(shù)或行的百分比,使用百分比時要加PERCENT關(guān)鍵字。3.5.1插入記錄(7)<dml_table_source>

指定插入目標(biāo)表的行是INSERT、UPDATE、DELETE或

MERGE語句的OUTPUT子句返回的行。(8)DEFAULTVALUES

該關(guān)鍵字說明向當(dāng)前表中所有列均插入其默認值。此時,要求所有列均定義了默認值。3.5.1插入記錄【例3.13】

向PXSCJ數(shù)據(jù)庫的表XSB中插入如下一行數(shù)據(jù):081101,王林,1,1990-02-10,計算機,50,NULL(假設(shè)XSB表中該行數(shù)據(jù)已被刪除)INSERTINTOXSB VALUES('081101','王林',1,'1990-02-10','計算機',50,NULL)圖3.19使用T-SQL語句向表中插入數(shù)據(jù)3.5.1插入記錄【例3.14】

假設(shè)上表XSB中專業(yè)的默認值為“計算機”,備注默認值為NULL,則插入上例數(shù)據(jù)可以使用以下命令:INSERTINTOXSB(學(xué)號,姓名,性別,出生時間,總學(xué)分) VALUES('081101','王林',1,'1990-02-10',50)下列命令效果相同:INSERTINTOXSB VALUES('081101','王林',1,'1990-02-10',DEFAULT,50,NULL);3.5.1插入記錄【例3.15】

一次向XSB表中插入兩行數(shù)據(jù):('091101','王海',1,'1991-05-10','軟件工程',50,NULL)和('091102','李娜',0,'1991-04-12','軟件工程',52,NULL)。INSERTINTOXSBVALUES ('091101','王海',1,'1991-05-10','軟件工程',50,NULL),('091102','李娜',0,'1991-04-12','軟件工程',52,NULL)3.5.1插入記錄VALUES的增強:可以用它來構(gòu)建虛擬表。這種功能稱為行值構(gòu)造函數(shù)或表值構(gòu)造函數(shù)

SELECT*FROM(VALUES(10003,'20090213',4,'B'),(10004,'20090214',1,'A'),(10005,'20090213',1,'C'),(10006,'20090215',3,'C'))AS

O(orderid,orderdate,empid,custid);3.5.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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論