第3章 表與表數(shù)據(jù)操作_第1頁(yè)
第3章 表與表數(shù)據(jù)操作_第2頁(yè)
第3章 表與表數(shù)據(jù)操作_第3頁(yè)
第3章 表與表數(shù)據(jù)操作_第4頁(yè)
第3章 表與表數(shù)據(jù)操作_第5頁(yè)
已閱讀5頁(yè),還剩77頁(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)介

第3章

表與表數(shù)據(jù)操作3.1表結(jié)構(gòu)和數(shù)據(jù)類(lèi)型3.2界面方式操作表3.3命令方式操作表3.4界面方式操作表數(shù)據(jù)3.5命令方式操作表數(shù)據(jù)3.1表結(jié)構(gòu)和數(shù)據(jù)類(lèi)型3.1.1表和表結(jié)構(gòu)每個(gè)數(shù)據(jù)庫(kù)包含了若干個(gè)表。表是SQLServer中最主要的數(shù)據(jù)庫(kù)對(duì)象,它是用來(lái)存儲(chǔ)數(shù)據(jù)的一種邏輯結(jié)構(gòu)。表由行和列組成,因此也稱(chēng)為二維表。表是在日常工作和生活中經(jīng)常使用的一種表示數(shù)據(jù)及其關(guān)系的形式,表3.1就是用來(lái)表示學(xué)生情況的一個(gè)學(xué)生表。學(xué)號(hào)姓名性別出生時(shí)間專(zhuān)業(yè)總學(xué)分備注081101王林男1990-02-10計(jì)算機(jī)50081103王燕女1989-10-06計(jì)算機(jī)50081108林一帆男1989-08-05計(jì)算機(jī)52已提前修完一門(mén)課081202王林男1989-01-29通信工程40有一門(mén)課不及格,待補(bǔ)考081204馬琳琳女1989-02-10通信工程42表3.1學(xué)生表3.1.1表和表結(jié)構(gòu)下面簡(jiǎn)單介紹與表有關(guān)的幾個(gè)概念:(1)表結(jié)構(gòu)。組成表的各列的名稱(chēng)及數(shù)據(jù)類(lèi)型,統(tǒng)稱(chēng)為表結(jié)構(gòu)。(2)記錄。每個(gè)表包含了若干行數(shù)據(jù),它們是表的“值”,表中的一行稱(chēng)為一個(gè)記錄。因此,表是記錄的有限集合。(3)字段。每個(gè)記錄由若干個(gè)數(shù)據(jù)項(xiàng)構(gòu)成,將構(gòu)成記錄的每個(gè)數(shù)據(jù)項(xiàng)稱(chēng)為字段。例如,表3.1中表結(jié)構(gòu)為(學(xué)號(hào),姓名,性別,出生時(shí)間,專(zhuān)業(yè),總學(xué)分,備注),包含7個(gè)字段,由5個(gè)記錄組成。(4)空值。空值(NULL)通常表示未知、不可用或?qū)⒃谝院筇砑拥臄?shù)據(jù)。若一個(gè)列允許為空值,則向表中輸入記錄值時(shí)可不為該列給出具體值;而一個(gè)列若不允許為空值,則在輸入時(shí)必須給出具體值。3.1.1表和表結(jié)構(gòu)(5)關(guān)鍵字。若表中記錄的某一字段或字段組合能唯一標(biāo)識(shí)記錄,則稱(chēng)該字段或字段組合為候選關(guān)鍵字(Candidatekey)。若一個(gè)表有多個(gè)候選關(guān)鍵字,則選定其中一個(gè)為主關(guān)鍵字(Primarykey),也稱(chēng)為主鍵。當(dāng)一個(gè)表僅有唯一的一個(gè)候選關(guān)鍵字時(shí),該候選關(guān)鍵字就是主關(guān)鍵字。這里的主關(guān)鍵字與第1章中的主碼所起的作用是相同的,都用來(lái)唯一標(biāo)識(shí)記錄行。例如,在學(xué)生表中,2個(gè)及其以上記錄的姓名、性別、出生時(shí)間、專(zhuān)業(yè)、總學(xué)分和備注這6個(gè)字段的值有可能相同,但是“學(xué)號(hào)”字段的值對(duì)表中所有記錄來(lái)說(shuō)一定不同,即通過(guò)“學(xué)號(hào)”字段可以將表中的不同記錄區(qū)分開(kāi)來(lái)。所以,“學(xué)號(hào)”字段是唯一的候選關(guān)鍵字,學(xué)號(hào)就是主關(guān)鍵字。再例如,學(xué)生成績(jī)表記錄的候選關(guān)鍵字是(學(xué)號(hào),課程號(hào))字段組合,它也是唯一的候選關(guān)鍵字。3.1.2數(shù)據(jù)類(lèi)型列的數(shù)據(jù)類(lèi)型可以是SQLServer提供的系統(tǒng)數(shù)據(jù)類(lèi)型,也可以是用戶(hù)定義的數(shù)據(jù)類(lèi)型。SQLServer2008提供了豐富的系統(tǒng)數(shù)據(jù)類(lèi)型,現(xiàn)將其列于表3.2中。數(shù)據(jù)類(lèi)型符號(hào)標(biāo)識(shí)整數(shù)型bigint,int,smallint,tinyint精確數(shù)值型decimal,numeric浮點(diǎn)型float,real貨幣型money,smallmoney位型bit字符型char,varchar、varchar(MAX)Unicode字符型nchar,nvarchar、nvarchar(MAX)文本型text,ntext二進(jìn)制型binary,varbinary、varbinary(MAX)日期時(shí)間類(lèi)型datetime,smalldatetime,date,time,datetime2,datetimeoffset時(shí)間戳型timestamp圖像型image其他cursor,sql_variant,table,uniqueidentifier,xml,hierarchyid表3.2系統(tǒng)數(shù)據(jù)類(lèi)型表3.1.2數(shù)據(jù)類(lèi)型在討論數(shù)據(jù)類(lèi)型時(shí),使用了精度、小數(shù)位數(shù)和長(zhǎng)度3個(gè)概念,前兩個(gè)概念是針對(duì)數(shù)值型數(shù)據(jù)的,它們的含義如下。精度:指數(shù)值數(shù)據(jù)中所存儲(chǔ)的十進(jìn)制數(shù)據(jù)的總位數(shù)。小數(shù)位數(shù):指數(shù)值數(shù)據(jù)中小數(shù)點(diǎn)右邊可以有的數(shù)字位數(shù)的最大值。例如,數(shù)值數(shù)據(jù)3890.587的精度是7,小數(shù)位數(shù)是3。長(zhǎng)度:指存儲(chǔ)數(shù)據(jù)所使用的字節(jié)數(shù)。3.1.2數(shù)據(jù)類(lèi)型下面分別說(shuō)明常用的系統(tǒng)數(shù)據(jù)類(lèi)型。1.整數(shù)型整數(shù)型包括bigint、int、smallint和tinyint,從標(biāo)識(shí)符的含義就可以看出,它們的表示數(shù)范圍逐漸縮小。bigint:大整數(shù),數(shù)范圍為263~2631,其精度為19,小數(shù)位數(shù)為0,長(zhǎng)度為8字節(jié)。int:整數(shù),數(shù)范圍為231~2311,其精度為10,小數(shù)位數(shù)為0,長(zhǎng)度為4字節(jié)。smallint:短整數(shù),數(shù)范圍為215~2151,其精度為5,小數(shù)位數(shù)為0,長(zhǎng)度為2字節(jié)。tinyint:微短整數(shù),數(shù)范圍為0~255,長(zhǎng)度為1字節(jié),其精度為3,小數(shù)位數(shù)為0,長(zhǎng)度為1字節(jié)。3.1.2數(shù)據(jù)類(lèi)型2.精確數(shù)值型精確數(shù)值型數(shù)據(jù)由整數(shù)部分和小數(shù)部分構(gòu)成,其所有的數(shù)字都是有效位,能夠以完整的精度存儲(chǔ)十進(jìn)制數(shù)。精確數(shù)值型包括decimal和

numeric兩類(lèi)。在SQLServer2008中,這兩種數(shù)據(jù)類(lèi)型在功能上完全等價(jià)。聲明精確數(shù)值型數(shù)據(jù)的格式是numeric|decimal(p[,s]),其中,p為精度,s為小數(shù)位數(shù),s的默認(rèn)值為0。例如,指定某列為精確數(shù)值型,精度為6,小數(shù)位數(shù)為3,即decimal(6,3),那么當(dāng)向某記錄的該列賦值56.342689時(shí),該列實(shí)際存儲(chǔ)的是56.343。decimal和numeric可存儲(chǔ)–1038+1~1038–1的固定精度和小數(shù)位的數(shù)字?jǐn)?shù)據(jù),它們的存儲(chǔ)長(zhǎng)度隨精度變化而變化,最少為5字節(jié),最多為17字節(jié)。例如,若有聲明numeric(8,3),則存儲(chǔ)該類(lèi)型數(shù)據(jù)需5字節(jié);而若有聲明numeric(22,5),則存儲(chǔ)該類(lèi)型數(shù)據(jù)需13字節(jié)。3.1.2數(shù)據(jù)類(lèi)型3.浮點(diǎn)型

浮點(diǎn)型也稱(chēng)近似數(shù)值型。顧名思義,這種類(lèi)型不能提供精確表示數(shù)據(jù)的精度,使用這種類(lèi)型來(lái)存儲(chǔ)某些數(shù)值時(shí),可能會(huì)損失一些精度,所以它可用于處理取值范圍非常大且對(duì)精確度要求不太高的數(shù)值量,如一些統(tǒng)計(jì)量。有兩種近似數(shù)值數(shù)據(jù)類(lèi)型:float[(n)]和real,兩者通常都使用科學(xué)計(jì)數(shù)法表示數(shù)據(jù),即形為尾數(shù)E階數(shù),如5.6432E20,–2.98E10,1.287659E-9等。real:使用4字節(jié)存儲(chǔ)數(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,用于指示其精度和存儲(chǔ)大小。當(dāng)n在1~24之間時(shí),實(shí)際上將定義一個(gè)real型數(shù)據(jù),存儲(chǔ)長(zhǎng)度為4字節(jié),精度為7位有效數(shù)字。當(dāng)n在25~53之間時(shí),存儲(chǔ)長(zhǎng)度為8字節(jié),精度為15位有效數(shù)字。當(dāng)省略n時(shí),代表n在25~53之間。3.1.2數(shù)據(jù)類(lèi)型4.貨幣型SQLServer2008提供了兩個(gè)專(zhuān)門(mén)用于處理貨幣的數(shù)據(jù)類(lèi)型:money和smallmoney,它們用十進(jìn)制數(shù)表示貨幣值。money:數(shù)據(jù)的數(shù)范圍為263~2631,其精度為19,小數(shù)位數(shù)為4,長(zhǎng)度為8字節(jié)。money的數(shù)范圍與bigint相同,不同的只是money型有4位小數(shù),實(shí)際上,money就是按照整數(shù)進(jìn)行運(yùn)算的,只是將小數(shù)點(diǎn)固定在末4位。smallmoney:數(shù)范圍為–231~2311,其精度為10,小數(shù)位數(shù)為4,長(zhǎng)度為4字節(jié)。可見(jiàn)smallmoney與int的關(guān)系就如同money與bigint的關(guān)系一樣。當(dāng)向表中插入money或smallmoney類(lèi)型的值時(shí),必須在數(shù)據(jù)前面加上貨幣表示符號(hào)($),并且數(shù)據(jù)中間不能有逗號(hào)(,);若貨幣值為負(fù)數(shù),則需要在符號(hào)$的后面加上負(fù)號(hào)(-)。例如,$15000.32,$680,$-20000.9088都是正確的貨幣數(shù)據(jù)表示形式。3.1.2數(shù)據(jù)類(lèi)型5.位型SQLServer2008中的位(bit)型數(shù)據(jù)相當(dāng)于其他語(yǔ)言中的邏輯型數(shù)據(jù),它只存儲(chǔ)0和1,長(zhǎng)度為1字節(jié)。但要注意,SQLServer對(duì)表中bit類(lèi)型列的存儲(chǔ)進(jìn)行了優(yōu)化:如果一個(gè)表中有不多于8個(gè)的bit列,則這些列將作為1字節(jié)存儲(chǔ);如果表中有9~16個(gè)bit列,則這些列將作為2字節(jié)存儲(chǔ),更多列的情況以此類(lèi)推。當(dāng)為bit類(lèi)型數(shù)據(jù)賦0時(shí),其值為0,而賦非0(如100)時(shí),其值為1。字符串值TRUE和FALSE可以轉(zhuǎn)換為以下bit值:TRUE轉(zhuǎn)換為1,F(xiàn)ALSE轉(zhuǎn)換為0。3.1.2數(shù)據(jù)類(lèi)型6.字符型字符型數(shù)據(jù)用于存儲(chǔ)字符串,字符串中可包括字母、數(shù)字和其他特殊符號(hào)(如#、@、&等)。在輸入字符串時(shí),需將串中的符號(hào)用單引號(hào)或雙引號(hào)括起來(lái),如'abc'、"Abc<Cde"。SQLServer2008字符型包括兩類(lèi):固定長(zhǎng)度(char)或可變長(zhǎng)度(varchar)字符數(shù)據(jù)類(lèi)型。char[(n)]:定長(zhǎng)字符數(shù)據(jù)類(lèi)型,其中,n定義字符型數(shù)據(jù)的長(zhǎng)度,n在1~8000之間,默認(rèn)為1。當(dāng)表中的列定義為char(n)類(lèi)型時(shí),若實(shí)際存儲(chǔ)的串長(zhǎng)度不足n,則在串的尾部添加空格以達(dá)到長(zhǎng)度n,所以char(n)的長(zhǎng)度為n。例如,某列的數(shù)據(jù)類(lèi)型為char(20),而輸入的字符串為"ahjm1922",則存儲(chǔ)的是字符ahjm1922和12個(gè)空格。若輸入的字符個(gè)數(shù)超出了n,則超出的部分被截?cái)?。varchar[(n)]:變長(zhǎng)字符數(shù)據(jù)類(lèi)型,其中,n的規(guī)定與定長(zhǎng)字符型char中的n完全相同,但這里n表示的是字符串可達(dá)到的最大長(zhǎng)度。3.1.2數(shù)據(jù)類(lèi)型7.Unicode字符型Unicode是統(tǒng)一字符編碼標(biāo)準(zhǔn),用于支持國(guó)際上非英語(yǔ)語(yǔ)種的字符數(shù)據(jù)的存儲(chǔ)和處理。SQLServer的Unicode字符型可以存儲(chǔ)Unicode標(biāo)準(zhǔn)字符集定義的各種字符。Unicode字符型包括nchar[(n)]和nvarchar[(n)]兩類(lèi)。nchar是固定長(zhǎng)度Unicode數(shù)據(jù)的數(shù)據(jù)類(lèi)型,nvarchar是可變長(zhǎng)度Unicode數(shù)據(jù)的數(shù)據(jù)類(lèi)型,二者均使用UNICODEUCS-2字符集。nchar[(n)]:nchar[(n)]為包含n個(gè)字符的固定長(zhǎng)度Unicode字符型數(shù)據(jù),n的值在1~4000之間,長(zhǎng)度為2n字節(jié)。若輸入的字符串長(zhǎng)度不足n,將以空白字符補(bǔ)足。nvarchar[(n)]:nvarchar[(n)]為最多包含n個(gè)字符的可變長(zhǎng)度Unicode字符型數(shù)據(jù),n的值在1~4000之間,默認(rèn)為1。長(zhǎng)度是所輸入字符個(gè)數(shù)的兩倍。3.1.2數(shù)據(jù)類(lèi)型8.文本型當(dāng)需要存儲(chǔ)大量的字符數(shù)據(jù),如較長(zhǎng)的備注、日志信息等時(shí),字符型數(shù)據(jù)最長(zhǎng)8000個(gè)字符的限制可能使它們不能滿(mǎn)足這種應(yīng)用需求,此時(shí)可使用文本型數(shù)據(jù)。文本型包括text和ntext兩類(lèi),分別對(duì)應(yīng)ASCII字符和Unicode字符。text類(lèi)型可以表示最大長(zhǎng)度為2311個(gè)字符,其數(shù)據(jù)的存儲(chǔ)長(zhǎng)度為實(shí)際字符數(shù)字節(jié)。ntext類(lèi)型可表示最大長(zhǎng)度為2301個(gè)Unicode字符,其數(shù)據(jù)的存儲(chǔ)長(zhǎng)度是實(shí)際字符個(gè)數(shù)的兩倍(以字節(jié)為單位)。3.1.2數(shù)據(jù)類(lèi)型9.二進(jìn)制型二進(jìn)制數(shù)據(jù)類(lèi)型表示的是位數(shù)據(jù)流,包括binary(固定長(zhǎng)度)和varbinary(可變長(zhǎng)度)兩種。binary[(n)]:固定長(zhǎng)度的n字節(jié)二進(jìn)制數(shù)據(jù)。n的取值范圍為1~8000,默認(rèn)為1。binary(n)數(shù)據(jù)的存儲(chǔ)長(zhǎng)度為n+4字節(jié)。若輸入的數(shù)據(jù)長(zhǎng)度小于n,則不足部分用0填充;若輸入的數(shù)據(jù)長(zhǎng)度大于n,則多余部分被截?cái)唷arbinary[(n)]:n字節(jié)變長(zhǎng)二進(jìn)制數(shù)據(jù)。n取值范圍為1~8000,默認(rèn)為1。varbinary(n)數(shù)據(jù)的存儲(chǔ)長(zhǎng)度為實(shí)際輸入數(shù)據(jù)長(zhǎng)度+4字節(jié)。3.1.2數(shù)據(jù)類(lèi)型10.日期時(shí)間類(lèi)型日期時(shí)間類(lèi)型數(shù)據(jù)用于存儲(chǔ)日期和時(shí)間信息,在SQLServer2008以前的版本中,日期時(shí)間數(shù)據(jù)類(lèi)型只有datetime和smalldatetime兩種。而在SQLServer2008中新增了4種新的日期時(shí)間數(shù)據(jù)類(lèi)型,分別為date、time、datetime2和datetimeoffset。(1)datetime:datetime類(lèi)型可表示的日期范圍為從1753年1月1日到9999年12月31日,精確度為0.03s(3.33ms或0.00333s),例如,1~3ms的值都表示為0ms,4~6ms的值都表示為4ms。datetime類(lèi)型數(shù)據(jù)長(zhǎng)度為8字節(jié),日期和時(shí)間分別使用4字節(jié)存儲(chǔ)。前4字節(jié)用于存儲(chǔ)datetime類(lèi)型數(shù)據(jù)中距1900年1月1日的天數(shù)。為正數(shù)表示日期在1900年1月1日之后,為負(fù)數(shù)則表示日期在1900年1月1日之前。后4字節(jié)用于存儲(chǔ)datetime類(lèi)型數(shù)據(jù)中距12:00(24小時(shí)制)的毫秒數(shù)。3.1.2數(shù)據(jù)類(lèi)型用戶(hù)給出datetime類(lèi)型數(shù)據(jù)值時(shí),日期部分和時(shí)間部分分別給出。日期部分的表示形式常用的格式如下:年月日2001Jan20、2001Janary20年日月200120Jan月日[,]年Jan202001、Jan20,2001、Jan20,01月年日J(rèn)an200120日月[,]年20Jan2001、20Jan,2001日年月202001Jan年(4位數(shù))2001表示2001年1月1日年月日20010120、010120月/日/年01/20/01、1/20/01、01/20/2001、1/20/2001月-日-年01-20-01、1-20-01、01-20-2001、1-20-2001月.日.年01.20.01、1.20.01、01.20.2001、1.20.20013.1.2數(shù)據(jù)類(lèi)型時(shí)間部分常用的表示格式如下:時(shí):分10:20、08:05時(shí):分:秒20:15:18、20:15:18.2時(shí):分:秒:毫秒20:15:18:200時(shí):分AM|PM10:10AM、10:3.1.2數(shù)據(jù)類(lèi)型(2)smalldatetime:smalldatetime類(lèi)型數(shù)據(jù)可表示從1900年1月1日到2079年6月6日的日期和時(shí)間,數(shù)據(jù)精確到分鐘。即29.998s或更低的值向下舍入為最接近的分鐘,29.999s或更高的值向上舍入為最接近的分鐘。smalldatetime類(lèi)型數(shù)據(jù)的存儲(chǔ)長(zhǎng)度為4字節(jié),前2字節(jié)用來(lái)存儲(chǔ)smalldatetime類(lèi)型數(shù)據(jù)中日期部分距1900年1月1日之后的天數(shù)。后2字節(jié)用來(lái)存儲(chǔ)smalldatetime類(lèi)型數(shù)據(jù)中時(shí)間部分距中午12點(diǎn)的分鐘數(shù)。用戶(hù)輸入smalldatetime類(lèi)型數(shù)據(jù)的格式與datetime類(lèi)型數(shù)據(jù)完全相同,只是它們的內(nèi)部存儲(chǔ)可能不相同。(3)date:date類(lèi)型數(shù)據(jù)可以表示從公元元年1月1日到9999年12月31日的日期,date類(lèi)型只存儲(chǔ)日期數(shù)據(jù),不存儲(chǔ)時(shí)間數(shù)據(jù),存儲(chǔ)長(zhǎng)度為3字節(jié),表示形式與datetime數(shù)據(jù)類(lèi)型的日期部分相同。3.1.2數(shù)據(jù)類(lèi)型(4)time:time數(shù)據(jù)類(lèi)型只存儲(chǔ)時(shí)間數(shù)據(jù),表示格式為“hh:mm:ss[.nnnnnnn]”。hh表示小時(shí),范圍為0~23。mm表示分鐘,范圍為0~59。ss表示秒數(shù),范圍為0~59。n是0~7位數(shù)字,范圍為0~9999999,表示秒的小數(shù)部分,即微秒數(shù)。所以time數(shù)據(jù)類(lèi)型的取值范圍為00:00:00.0000000~23:59:59.9999999。time類(lèi)型的存儲(chǔ)大小為5字節(jié)。另外還可以自定義time類(lèi)型微秒數(shù)的位數(shù),例如,time(1)表示小數(shù)位數(shù)為1,默認(rèn)為7。(5)datetime2:新的datetime2數(shù)據(jù)類(lèi)型和datetime類(lèi)型一樣,也用于存儲(chǔ)日期和時(shí)間信息。但是datetime2類(lèi)型取值范圍更廣,日期部分取值范圍從公元元年1月1日到9999年12月31日,時(shí)間部分的取值范圍為00:00:00.0000000~23:59:59.999999。另外,用戶(hù)還可以自定義datetime2數(shù)據(jù)類(lèi)型中微秒數(shù)的位數(shù),例如,datetime(2)表示小數(shù)位數(shù)為2。datetime2類(lèi)型的存儲(chǔ)大小隨著微秒數(shù)的位數(shù)(精度)而改變,精度小于3時(shí)為6字節(jié),精度為4和5時(shí)為7字節(jié),所有其他精度則需要8字節(jié)。3.1.2數(shù)據(jù)類(lèi)型(6)datetimeoffset:datetimeoffset數(shù)據(jù)類(lèi)型也用于存儲(chǔ)日期和時(shí)間信息,取值范圍與datetime2類(lèi)型相同。但datetimeoffset類(lèi)型具有時(shí)區(qū)偏移量,此偏移量指定時(shí)間相對(duì)于協(xié)調(diào)世界時(shí)(UTC)偏移的小時(shí)和分鐘數(shù)。datetimeoffset的格式為“YYYY-MM-DDhh:mm:ss[.nnnnnnn][{+|}hh:mm]”,其中,hh為時(shí)區(qū)偏移量中的小時(shí)數(shù),范圍為00~14,mm為時(shí)區(qū)偏移量中的額外分鐘數(shù),范圍為00~59。時(shí)區(qū)偏移量中必須包含“+”(加)或“–”(減)號(hào)。這兩個(gè)符號(hào)表示是在UTC時(shí)間的基礎(chǔ)上加上還是從中減去時(shí)區(qū)偏移量以得出本地時(shí)間。時(shí)區(qū)偏移量的有效范圍為14:00~+14:00。3.1.2數(shù)據(jù)類(lèi)型11.時(shí)間戳型標(biāo)識(shí)符是timestamp。若創(chuàng)建表時(shí)定義一個(gè)列的數(shù)據(jù)類(lèi)型為時(shí)間戳類(lèi)型,那么每當(dāng)對(duì)該表加入新行或修改已有行時(shí),都由系統(tǒng)自動(dòng)將一個(gè)計(jì)數(shù)器值加到該列,即將原來(lái)的時(shí)間戳值加上一個(gè)增量。記錄timestamp列的值實(shí)際上反映了系統(tǒng)對(duì)該記錄修改的相對(duì)(相對(duì)于其他記錄)順序。一個(gè)表只能有一個(gè)timestamp列。timestamp類(lèi)型數(shù)據(jù)的值實(shí)際上是二進(jìn)制格式數(shù)據(jù),其長(zhǎng)度為8字節(jié)。12.圖像數(shù)據(jù)類(lèi)型標(biāo)識(shí)符是image,它用于存儲(chǔ)圖片、照片等。實(shí)際存儲(chǔ)的是可變長(zhǎng)度二進(jìn)制數(shù)據(jù),介于

0與2311(2147483647)字節(jié)之間。在SQLServer2008中該類(lèi)型是為了向下兼容而保留的數(shù)據(jù)類(lèi)型。微軟推薦用戶(hù)使用varbinary(MAX)數(shù)據(jù)類(lèi)型來(lái)替代image類(lèi)型。3.1.2數(shù)據(jù)類(lèi)型13.其他數(shù)據(jù)類(lèi)型除了上面所介紹的常用數(shù)據(jù)類(lèi)型外,SQLServer2008還提供了其他幾種數(shù)據(jù)類(lèi)型:cursor、sql_variant、table、uniqueidentifier、xml和hierarchyid。cursor:是游標(biāo)數(shù)據(jù)類(lèi)型,用于創(chuàng)建游標(biāo)變量或定義存儲(chǔ)過(guò)程的輸出參數(shù)。sql_variant:是一種存儲(chǔ)SQLServer支持的各種數(shù)據(jù)類(lèi)型(除text、ntext、image、timestamp和

sql_variant外)值的數(shù)據(jù)類(lèi)型。sql_variant的最大長(zhǎng)度可達(dá)8016字節(jié)。table:是用于存儲(chǔ)結(jié)果集的數(shù)據(jù)類(lèi)型,結(jié)果集可以供后續(xù)處理。uniqueidentifier:是唯一標(biāo)識(shí)符類(lèi)型。系統(tǒng)將為這種類(lèi)型的數(shù)據(jù)產(chǎn)生唯一標(biāo)識(shí)值,它是一個(gè)16字節(jié)長(zhǎng)的二進(jìn)制數(shù)據(jù)。xml:是用來(lái)在數(shù)據(jù)庫(kù)中保存xml文檔和片段的一種類(lèi)型,但是此種類(lèi)型的文件大小不能超過(guò)2GB。hierarchyid:hierarchyid數(shù)據(jù)類(lèi)型是SQLServer2008新增加的一種長(zhǎng)度可變的系統(tǒng)數(shù)據(jù)類(lèi)型??墒褂?/p>

hierarchyid表示層次結(jié)構(gòu)中的位置。varchar、nvarchar、varbinary這三種數(shù)據(jù)類(lèi)型可以使用MAX關(guān)鍵字,如varchar(MAX)、nvarchar(MAX)、varbinary(MAX),加了MAX關(guān)鍵字的這幾種數(shù)據(jù)類(lèi)型最多可存放231-1字節(jié)的數(shù)據(jù),分別用來(lái)替換text、ntext和image數(shù)據(jù)類(lèi)型。3.1.3表結(jié)構(gòu)設(shè)計(jì)其中,“學(xué)號(hào)”列的數(shù)據(jù)是學(xué)生的學(xué)號(hào),學(xué)號(hào)值有一定的意義,例如,“081101”中“08”表示學(xué)生的年級(jí),“11”表示所屬班級(jí),“01”表示學(xué)生在班級(jí)中的序號(hào),所以“學(xué)號(hào)”列的數(shù)據(jù)類(lèi)型可以是6位的定長(zhǎng)字符型數(shù)據(jù);“姓名”列記錄學(xué)生的姓名,姓名一般不超過(guò)4個(gè)中文字符,所以可以是8位定長(zhǎng)字符型數(shù)據(jù);“性別”列只有“男”、“女”兩種值,所以可以使用bit型數(shù)據(jù),值1表示“男”,值0表示“女”,默認(rèn)是1;“出生時(shí)間”是日期時(shí)間類(lèi)型數(shù)據(jù),列類(lèi)型定為date;“專(zhuān)業(yè)”列為12位定長(zhǎng)字符型數(shù)據(jù);“總學(xué)分”列是整數(shù)型數(shù)據(jù),值在0~160之間,列類(lèi)型定為int,默認(rèn)是0;“備注”列需要存放學(xué)生的備注信息,備注信息的內(nèi)容在0~500個(gè)字之間,所以應(yīng)該使用varchar類(lèi)型。在XSB表中,只有“學(xué)號(hào)”列能唯一標(biāo)識(shí)一個(gè)學(xué)生,所以將“學(xué)號(hào)”列設(shè)為該表主鍵。最后設(shè)計(jì)的XSB的表結(jié)構(gòu)如表3.3所示。3.1.3表結(jié)構(gòu)設(shè)計(jì)列名數(shù)據(jù)類(lèi)型長(zhǎng)度是否可空默認(rèn)值說(shuō)明學(xué)號(hào)定長(zhǎng)字符型(char)6×無(wú)主鍵,前2位表示年級(jí),中間2位為班級(jí)號(hào),后2位為序號(hào)姓名定長(zhǎng)字符型(char)8×無(wú)性別位型(bit)默認(rèn)值√11:男

0:女出生時(shí)間日期型(date)默認(rèn)值√無(wú)專(zhuān)業(yè)定長(zhǎng)字符型(char)12√無(wú)總學(xué)分整數(shù)型(int)默認(rèn)值√00≤總學(xué)分<160備注不定長(zhǎng)字符型(varchar)500√無(wú)表3.3XSB的表結(jié)構(gòu)3.1.3表結(jié)構(gòu)設(shè)計(jì)參照XSB表結(jié)構(gòu)的設(shè)計(jì)方法,同樣可以設(shè)計(jì)出其他兩個(gè)表的結(jié)構(gòu),表3.4所示是KCB的表結(jié)構(gòu),表3.5所示是CJB的表結(jié)構(gòu)。列名數(shù)據(jù)類(lèi)型長(zhǎng)度是否可空默認(rèn)值說(shuō)明課程號(hào)定長(zhǎng)字符型(char)3×無(wú)主鍵課程名定長(zhǎng)字符型(char)16×無(wú)開(kāi)課學(xué)期整數(shù)型(tinyint)1√1只能為1~8學(xué)時(shí)整數(shù)型(tinyint)1√0學(xué)分整數(shù)型(tinyint)1×0列名數(shù)據(jù)類(lèi)型長(zhǎng)度是否可空默認(rèn)值說(shuō)明學(xué)號(hào)定長(zhǎng)字符型(char)6×無(wú)主鍵課程號(hào)定長(zhǎng)字符型(char)3×無(wú)主鍵成績(jī)整數(shù)型(int)默認(rèn)值√0表3.4KCB的表結(jié)構(gòu)表3.5CJB的表結(jié)構(gòu)3.2界面方式操作表3.2.1創(chuàng)建表以下是通過(guò)對(duì)象資源管理器創(chuàng)建表XSB的操作步驟。第1步:?jiǎn)?dòng)SQLServerManagementStudio,在對(duì)象資源管理器中,展開(kāi)“數(shù)據(jù)庫(kù)”,右擊“PXSCJ”數(shù)據(jù)庫(kù)菜單下的“表”選項(xiàng),在彈出的快捷菜單中,選擇“新建表”菜單項(xiàng),打開(kāi)如圖3.1所示的“表設(shè)計(jì)器”窗口。圖3.1“表設(shè)計(jì)器”窗口3.2.1創(chuàng)建表第2步:在“表設(shè)計(jì)器”窗口中,根據(jù)已經(jīng)設(shè)計(jì)好的XSB的表結(jié)構(gòu),分別輸入或選擇各列的名稱(chēng)、數(shù)據(jù)類(lèi)型、是否允許為空等屬性。根據(jù)需要,可以在列屬性選項(xiàng)卡中填入相應(yīng)內(nèi)容。第3步:在“學(xué)號(hào)”列上右擊鼠標(biāo),選擇“設(shè)置主鍵”菜單項(xiàng),選擇“設(shè)置主鍵”選項(xiàng),如圖3.2所示。圖3.2設(shè)置XSB表的主鍵3.2.1創(chuàng)建表在“列屬性”選項(xiàng)卡中的“默認(rèn)值和綁定”和“說(shuō)明”項(xiàng)中分別填寫(xiě)各列的默認(rèn)值和說(shuō)明。學(xué)生情況表結(jié)構(gòu)設(shè)計(jì)完成后的結(jié)果如圖3.3所示。圖3.3表屬性編輯完成結(jié)果3.2.1創(chuàng)建表第4步:在表的各列的屬性均編輯完成后,單擊工具欄中的

按鈕(“保存”按鈕),出現(xiàn)“選擇表名”對(duì)話框。在“選擇表名”對(duì)話框中輸入表名“XSB”,單擊“確定”按鈕即可創(chuàng)建XSB表。在對(duì)象資源管理器中可以找到新創(chuàng)建的XSB表,如圖3.4所示。圖3.4新創(chuàng)建的XSB表3.2.1創(chuàng)建表第5步:使用同樣的方法創(chuàng)建課程表,名稱(chēng)為KCB;創(chuàng)建成績(jī)表,名稱(chē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)用戶(hù)使用界面方式修改表的結(jié)構(gòu)(如添加列、修改列的數(shù)據(jù)類(lèi)型等)時(shí),必須刪除原來(lái)的表,再重新創(chuàng)建新表才能完成表的更改。如果強(qiáng)行更改會(huì)彈出如圖3.7所示的對(duì)話框。圖3.7“不允許保存更改”對(duì)話框

3.2.2修改表結(jié)構(gòu)如果要在修改表時(shí)不出現(xiàn)此對(duì)話框,可以進(jìn)行以下操作:?jiǎn)?dòng)SQLServerManagementStudio,在面板中單擊“工具”主菜單,選擇“選項(xiàng)”子菜單,在出現(xiàn)的“選項(xiàng)”對(duì)話框中選擇“Designers”下的“表設(shè)計(jì)器和數(shù)據(jù)庫(kù)設(shè)計(jì)器”選項(xiàng)卡,將“阻止保存要求重新創(chuàng)建表的更改”復(fù)選框前的勾去掉,如圖3.8所示,完成操作后單擊“確定”按鈕,接下來(lái)就可以對(duì)表進(jìn)行更改了。圖3.8解除阻止保存的選項(xiàng)3.2.2修改表結(jié)構(gòu)1.更改表名SQLServer2008中允許改變一個(gè)表的名字,但當(dāng)表名改變后,與此相關(guān)的某些對(duì)象(如視圖),以及通過(guò)表名與表相關(guān)的存儲(chǔ)過(guò)程將無(wú)效。因此,建議一般不要更改一個(gè)已有的表名,特別是當(dāng)在其上定義了視圖或建立了相關(guān)的表時(shí)。圖3.9修改表名

【例3.1】

將XSB表的表名改為student。在對(duì)象資源管理器中選擇需要更名的表XSB,右擊鼠標(biāo),在彈出的快捷菜單上選擇“重命名”菜單項(xiàng),如圖3.9所示,輸入新的表名student,按下回車(chē)鍵即可更改表名。3.2.2修改表結(jié)構(gòu)2.增加列當(dāng)原來(lái)所創(chuàng)建的表中需要增加項(xiàng)目時(shí),就要向表中增加列。例如,若在表XSB中需要登記其籍貫、獲獎(jiǎng)情況等,就要用到增加列的操作。同樣,已經(jīng)存在的列可能需要修改或刪除?!纠?.2】

向表XSB中添加一個(gè)“獎(jiǎng)學(xué)金等級(jí)”列,“獎(jiǎng)學(xué)金等級(jí)”列的數(shù)據(jù)類(lèi)型為tinyint,允許為空值。第1步:?jiǎn)?dòng)SQLServerManagementStudio,在對(duì)象資源管理器中展開(kāi)“數(shù)據(jù)庫(kù)”,選擇其中的“PXSCJ”數(shù)據(jù)庫(kù),在“PXSCJ”數(shù)據(jù)庫(kù)中選擇表“dbo.XSB”,右擊鼠標(biāo),在彈出的快捷菜單上選擇“設(shè)計(jì)”菜單項(xiàng),打開(kāi)“表設(shè)計(jì)器”窗口。3.2.2修改表結(jié)構(gòu)第2步:在“表設(shè)計(jì)器”窗口中選擇第一個(gè)空白行,輸入列名“獎(jiǎng)學(xué)金等級(jí)”,選擇數(shù)據(jù)類(lèi)型“tinyint”,如圖3.10所示。如果要在某列之前加入新列,則可以右擊該列,選擇“插入列”,在空白行中填寫(xiě)列信息即可。圖3.10增加新列3.2.2修改表結(jié)構(gòu)第3步:當(dāng)需向表中添加的列均輸入完畢后,關(guān)閉該窗口,此時(shí)將彈出一個(gè)“保存更改”對(duì)話框,單擊“是”按鈕,保存修改后的表(或單擊面板中的

按鈕)。3.刪除列在“表dbo.XSB設(shè)計(jì)器”窗口中選擇需刪除的列(如在XSB表中刪除“獎(jiǎng)學(xué)金等級(jí)”列),右擊鼠標(biāo),在彈出的快捷菜單上選擇“刪除列”菜單項(xiàng),該列即被刪除。3.2.2修改表結(jié)構(gòu)4.修改列表中尚未有記錄值時(shí),可以修改表結(jié)構(gòu),如更改列名、列的數(shù)據(jù)類(lèi)型、長(zhǎng)度和是否允許空值等屬性;但當(dāng)表中有了記錄后,建議不要輕易改變表結(jié)構(gòu),特別不要改變數(shù)據(jù)類(lèi)型,以免產(chǎn)生錯(cuò)誤。(1)具有以下特性的列不能修改:數(shù)據(jù)類(lèi)型為timestamp的列;計(jì)算列;全局標(biāo)識(shí)符列;用于索引的列(但當(dāng)用于索引的列為varchar、nvarchar或varbinary數(shù)據(jù)類(lèi)型時(shí),可以增加列的長(zhǎng)度);用于由CREATESTATISTICS生成統(tǒng)計(jì)的列,如需修改這樣的列,則必須先用DROPSTATISTICS語(yǔ)句刪除統(tǒng)計(jì);用于主鍵或外鍵約束的列;用于CHECK或UNIQUE約束的列;關(guān)聯(lián)有默認(rèn)值的列。3.2.2修改表結(jié)構(gòu)(2)當(dāng)改變列的數(shù)據(jù)類(lèi)型時(shí),要求滿(mǎn)足下列條件:

原數(shù)據(jù)類(lèi)型必須能夠轉(zhuǎn)換為新數(shù)據(jù)類(lèi)型。新數(shù)據(jù)類(lèi)型不能為timestamp類(lèi)型。如果被修改列屬性中有“標(biāo)識(shí)規(guī)范”屬性,則新數(shù)據(jù)類(lèi)型必須是有效的“標(biāo)識(shí)規(guī)范”數(shù)據(jù)類(lèi)型?!纠?.3】在XSB表中,將“姓名”列名改為“name”,數(shù)據(jù)長(zhǎng)度由8改為10,允許為空值。將“出生時(shí)間”列名改為“birthday”,數(shù)據(jù)類(lèi)型由“date”改為“datetime”。因尚未輸入記錄值,所以可以改變XSB表的結(jié)構(gòu),右擊需要修改的XSB表,選擇“設(shè)計(jì)”菜單項(xiàng)進(jìn)入表XSB的設(shè)計(jì)窗口,選擇需要修改的列,修改相應(yīng)的屬性。修改完后保存。3.2.3刪除表刪除一個(gè)表時(shí),表的定義、表中的所有數(shù)據(jù)以及表的索引、觸發(fā)器、約束等均被刪除。注意,不能刪除系統(tǒng)表和外鍵約束所參照的表

?!纠?.4】

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

3.3命令方式操作表3.3.1創(chuàng)建表創(chuàng)建表使用CREATETABLE語(yǔ)句。語(yǔ)法格式:CREATETABLE

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

( { <column_definition> /*列的定義*/ |column_nameAScomputed_column_expression[PERSISTED[NOTNULL]] /*定義計(jì)算列*/ }

[<table_constraint>][,...n] /*指定表的約束*/)[ON{partition_scheme_name(partition_column_name)|filegroup|"default"}] /*指定分區(qū)方案和存儲(chǔ)表的文件組*/[{TEXTIMAGE_ON{filegroup|"default"}] /*指定存儲(chǔ)text、ntext、image等類(lèi)型數(shù)據(jù)的文件組*/[FILESTREAM_ON{partition_scheme_name|filegroup|"default"}] /*指定存儲(chǔ)FILESTREAM數(shù)據(jù)的文件組*/[WITH(<table_option>[,...n])] /*指定表選項(xiàng)*/[;]3.3.1創(chuàng)建表列的定義格式如下:<column_definition>::=column_namedata_type /*指定列名、類(lèi)型*/[FILESTREAM] /*指定FILESTREAM屬性*/[COLLATEcollation_name] /*指定排序規(guī)則*/[NULL|NOTNULL] /*指定是否為空*/[[CONSTRAINTconstraint_name] DEFAULTconstant_expression] /*指定默認(rèn)值*/|[IDENTITY[(seed,increment)][NOTFORREPLICATION]/*指定列為標(biāo)識(shí)列*/][ROWGUIDCOL] /*指定列為全局標(biāo)識(shí)符列*/ [<column_constraint>[...n]] /*指定列的約束*/ [SPARSE]3.3.1創(chuàng)建表在開(kāi)始使用FILESTREAM之前,必須在SQLServer2008數(shù)據(jù)庫(kù)引擎實(shí)例中啟用FILESTREAM,操作步驟如下。第1步:在SQLServer配置管理器中打開(kāi)SQLServer2008數(shù)據(jù)庫(kù)實(shí)例的“屬性”窗口,選擇“FILESTREAM”選項(xiàng)卡,選中“針對(duì)Transact-SQL訪問(wèn)啟用FILESTREAM”復(fù)選框,其他的選項(xiàng)是針對(duì)Windows進(jìn)行讀/寫(xiě)的,可以都選中,如圖3.11所示,然后單擊“確定”按鈕保存對(duì)FILESTREAM的設(shè)置。圖3.11啟用FILESTREAM3.3.1創(chuàng)建表第2步:打開(kāi)SSMS,在對(duì)象資源管理器中右擊已連接的服務(wù)器,選擇“屬性”菜單項(xiàng)。在“服務(wù)器屬性”窗口中選擇“高級(jí)”選項(xiàng)卡,在“文件流訪問(wèn)級(jí)別”選項(xiàng)后的下拉列表框中選擇“已啟用完全訪問(wèn)”選項(xiàng),如圖3.12所示。單擊“確定”按鈕后在SQLServer配置管理器中重啟SQLServer服務(wù),F(xiàn)ILESTREAM在數(shù)據(jù)庫(kù)實(shí)例中的設(shè)置即可完成。圖3.12設(shè)置文件流訪問(wèn)級(jí)別3.3.1創(chuàng)建表完成以上步驟后數(shù)據(jù)庫(kù)實(shí)例即啟用了FILESTREAM,接下來(lái)就可以創(chuàng)建FILESTREAM文件組和具有FILESTREAM數(shù)據(jù)列的表了。在創(chuàng)建了FILESTREAM數(shù)據(jù)列后,訪問(wèn)的方法與訪問(wèn)一般varbinary(MAX)列的方式相同。NULL|NOTNULL:NULL表示列可取空值,NOTNULL表示列不可取空值。DEFAULTconstant_expression:為所在列指定默認(rèn)值,默認(rèn)值constant_expression必須是一個(gè)常量值、標(biāo)量函數(shù)或NULL值。DEFAULT定義可適用于除定義為timestamp或帶identity屬性的列以外的任何列。IDENTITY:指出該列為標(biāo)識(shí)符列,為該列提供一個(gè)唯一的、遞增的值。seed是標(biāo)識(shí)字段的起始值,默認(rèn)值為1,increment是標(biāo)識(shí)增量,默認(rèn)值為1。如果為IDENTITY屬性指定了NOTFORREPLICATION選項(xiàng),則復(fù)制代理執(zhí)行插入時(shí),標(biāo)識(shí)列中的值將不會(huì)增加。3.3.1創(chuàng)建表<column_constraint>:列的完整性約束,指定主鍵、替代鍵、外鍵等。例如,指定該列為主鍵則使用PRIMARYKEY關(guān)鍵字。<table_constraint>:表的完整性約束,有關(guān)列的約束和表的約束將在第6章中介紹。column_nameAScomputed_column_expression:用于定義計(jì)算字段,計(jì)算字段是由同一表中的其他字段通過(guò)表達(dá)式計(jì)算得到的。其中,column_name為計(jì)算字段的列名,computed_column_expression是表其他字段的表達(dá)式,表達(dá)式可以是非計(jì)算字段的字段名、常量、函數(shù)、變量,也可以是一個(gè)或多個(gè)運(yùn)算符連接的上述元素的任意組合。系統(tǒng)不將計(jì)算列中的數(shù)據(jù)進(jìn)行物理存儲(chǔ),該列只是一個(gè)虛擬列。如果需要將該列的數(shù)據(jù)物理化,則需要使用PERSISTED關(guān)鍵字。ON子句:filegroup|“default”指定存儲(chǔ)表的文件組。如果指定了

filegroup,則表將存儲(chǔ)在指定的文件組中,數(shù)據(jù)庫(kù)中必須存在該文件組。如果指定“default”,或者未指定ON參數(shù),則表存儲(chǔ)在默認(rèn)文件組中。partition_scheme_name(partition_column_name)指定分區(qū)方案來(lái)創(chuàng)建分區(qū)表,partition_scheme_name是分區(qū)方案的名稱(chēng),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用戶(hù)定義類(lèi)型的列存儲(chǔ)在指定文件組中。

如果表中沒(méi)有這些類(lèi)型的列,則不能使用TEXTIMAGE_ON。如果沒(méi)有指定TEXTIMAGE_ON或指定了"default",則這些列將與表存儲(chǔ)在同一文件組中。FILESTREAM_ON子句:filegroup|"default"指定存儲(chǔ)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ù)庫(kù)PXSCJ,現(xiàn)在該數(shù)據(jù)庫(kù)中需創(chuàng)建學(xué)生情況表XSB,該表的結(jié)構(gòu)見(jiàn)表3.3。創(chuàng)建表XSB的T-SQL語(yǔ)句如下:USEPXSCJGOCREATETABLEXSB(

學(xué)號(hào)

char(6) NOTNULLPRIMARYKEY,

姓名

char(8) NOTNULL,

性別

bit NULLDEFAULT1,

出生時(shí)間

date NULL,

專(zhuān)業(yè)

char(12) NULL,

總學(xué)分

int NULL,

備注

varchar(500)NULL)3.3.1創(chuàng)建表【例3.6】

創(chuàng)建一個(gè)帶計(jì)算列的表,表中包含課程的課程號(hào)、總成績(jī)和學(xué)習(xí)該課程的人數(shù),以及課程的平均成績(jī)。CREATETABLEPJCJ(

課程號(hào)

char(3)PRIMARYKEY,

總成績(jī)

realNOTNULL,

人數(shù)

intNOTNULL,

平均成績(jī)

AS總成績(jī)/人數(shù)

PERSISTED)3.3.2創(chuàng)建分區(qū)表1.使用T-SQL語(yǔ)句創(chuàng)建分區(qū)表(1)創(chuàng)建分區(qū)函數(shù)。創(chuàng)建分區(qū)函數(shù)使用CREATEPARTITIONFUNCTION命令,語(yǔ)法格式如下。CREATEPARTITIONFUNCTIONpartition_function_name(input_parameter_type) ASRANGE[LEFT|RIGHT] FORVALUES([boundary_value[,...n]])[;]

【例3.7】

對(duì)int類(lèi)型的列創(chuàng)建一個(gè)名為NumberPF的分區(qū)函數(shù),該函數(shù)把int類(lèi)型的列中數(shù)據(jù)分成5個(gè)區(qū)。分為小于或等于50的區(qū)、大于50且小于或等于500的區(qū)、大于500且小于或等于1000的區(qū)、大于1000且小于或等于2000的區(qū)、大于2000的區(qū)。CREATEPARTITIONFUNCTIONNumberPF(int) ASRANGELEFTFORVALUES(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ū)方案時(shí)需要根據(jù)分區(qū)函數(shù)的參數(shù)定義映射分區(qū)的文件組。所以需要有文件組來(lái)容納分區(qū)數(shù),文件組可以由一個(gè)或多個(gè)文件構(gòu)成,而每個(gè)分區(qū)必須映射到一個(gè)文件組。一個(gè)文件組可以由多個(gè)分區(qū)使用。在一般情況下,文件組數(shù)最好與分區(qū)數(shù)相同,并且這些文件組通常位于不同的磁盤(pán)上。一個(gè)分區(qū)方案只可以使用一個(gè)分區(qū)函數(shù),而一個(gè)分區(qū)函數(shù)可以用于多個(gè)分區(qū)方案中。CREATEPARTITIONSCHEME命令的語(yǔ)法格式如下。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ù)庫(kù)PXSCJ中存在。根據(jù)例3.7中定義的分區(qū)函數(shù)創(chuàng)建一個(gè)分區(qū)方案,將分區(qū)函數(shù)中的5個(gè)分區(qū)分別存放在這5個(gè)文件組中。CREATEPARTITIONSCHEMENumberPS ASPARTITIONNumberPF TO(FGroup1,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語(yǔ)句,只要在ON關(guān)鍵字后指定分區(qū)方案和分區(qū)列即可?!纠?.9】

在數(shù)據(jù)庫(kù)PXSCJ中創(chuàng)建分區(qū)表,表中包含“編號(hào)”(值可以是1~5000)、“名稱(chēng)”兩列,要求使用例3.8中的分區(qū)方案。USEPXSCJCREATETABLEsample(

編號(hào)

intNOTNULLPRIMARYKEY,

名稱(chēng)

char(8)NOTNULL)ONNumberPS(編號(hào))GO3.3.2創(chuàng)建分區(qū)表2.使用圖形向?qū)Х绞絼?chuàng)建分區(qū)表【例3.10】使用圖形向?qū)Х绞綄?duì)PXSCJ數(shù)據(jù)庫(kù)中的CJB表根據(jù)“成績(jī)”列分區(qū),成績(jī)值為0~100,根據(jù)成績(jī)值分為5個(gè)區(qū):0~59,60~69,70~79,81~89,90~100。操作步驟如下。第1步:?jiǎn)?dòng)SQLServerManagementStudio,在對(duì)象資源管理器中展開(kāi)“數(shù)據(jù)庫(kù)”,右擊“PXSCJ”數(shù)據(jù)庫(kù)菜單下的“表”選項(xiàng),右擊表“dbo.CJB”選擇“存儲(chǔ)”菜單項(xiàng),單擊“創(chuàng)建分區(qū)”子菜單項(xiàng),進(jìn)入分區(qū)向?qū)Т翱冢瑔螕簟跋乱徊健卑粹o,進(jìn)入“選擇分區(qū)列”界面,界面中將顯示可用的分區(qū)列,選擇“成績(jī)”列,如圖3.13所示。圖3.13選擇分區(qū)列3.3.2創(chuàng)建分區(qū)表第2步:?jiǎn)螕簟跋乱徊健卑粹o,進(jìn)入“選擇分區(qū)函數(shù)”界面。選擇“新建分區(qū)函數(shù)”選項(xiàng),填寫(xiě)要新建的分區(qū)函數(shù)的名稱(chēng),如PointsPF,如圖3.14所示。當(dāng)然,也可以選擇現(xiàn)有的分區(qū)函數(shù)。

圖3.14選擇分區(qū)函數(shù)3.3.2創(chuàng)建分區(qū)表第3步:?jiǎn)螕簟跋乱徊健卑粹o,進(jìn)入“選擇分區(qū)方案”界面。填寫(xiě)要新建的分區(qū)方案的名稱(chēng),如PointsPS,如圖3.15所示,單擊“下一步”按鈕。圖3.15選擇分區(qū)方案

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

圖3.16選擇文件組和指定邊界值第5步:?jiǎn)螕簟跋乱徊健卑粹o,進(jìn)入“選擇輸出選項(xiàng)”界面。用戶(hù)可以在其中選擇“立即運(yùn)行”選項(xiàng),并單擊“完成”按鈕完成對(duì)CJB的分區(qū)。用戶(hù)也可以選擇“創(chuàng)建腳本”選項(xiàng),并指定保存腳本的位置。3.3.3修改表結(jié)構(gòu)修改表結(jié)構(gòu)可以使用ALTERTABLE語(yǔ)句。語(yǔ)法格式?!纠?.11】設(shè)已經(jīng)在數(shù)據(jù)庫(kù)PXSCJ中創(chuàng)建了表XSB,先在表XSB中增加1個(gè)新列“獎(jiǎng)學(xué)金等級(jí)”,然后在表XSB中刪除名為“獎(jiǎng)學(xué)金等級(jí)”的列。在SSMS中新建一個(gè)查詢(xún),并輸入如下腳本:USEPXSCJGOALTERTABLEXSB ADD獎(jiǎng)學(xué)金等級(jí)

tinyintNULLGO輸入完成后執(zhí)行該腳本,然后可以在對(duì)象資源管理器中展開(kāi)“PXSCJ”中的表dbo.XSB的結(jié)構(gòu),查看運(yùn)行結(jié)果。3.3.3修改表結(jié)構(gòu)下面的腳本用于在表XSB中刪除名為獎(jiǎng)學(xué)金等級(jí)的列:USEPXSCJGOALTERTABLEXSB DROPCOLUMN獎(jiǎng)學(xué)金等級(jí)GO

使用ALTERTABLE語(yǔ)句一次還可以添加多個(gè)列,中間用逗號(hào)隔開(kāi)。例如,向XSB表中添加獎(jiǎng)學(xué)金等級(jí)1、獎(jiǎng)學(xué)金等級(jí)2兩個(gè)新列:USEPXSCJGOALTERTABLEXSB ADD獎(jiǎng)學(xué)金等級(jí)1tinyintNULL,

獎(jiǎng)學(xué)金等級(jí)2tinyintNULLGO3.3.3修改表結(jié)構(gòu)【例3.12】修改表XSB中已有列的屬性:將名為“姓名”的列長(zhǎng)度由原來(lái)的8改為10;將名為“出生時(shí)間”的列的數(shù)據(jù)類(lèi)型由原來(lái)的date改為datetime。新建一個(gè)查詢(xún),在查詢(xún)分析器中輸入并執(zhí)行如下腳本:USEPXSCJGOALTERTABLEXSB ALTERCOLUMN姓名

char(10)GOALTERTABLEXSB ALTERCOLUMN出生時(shí)間

smalldatetime3.3.4刪除表語(yǔ)法格式:DROPTABLE[database_name.[schema_name].|schema_name.]table_name[,...n][;]其中,table_name是要被刪除的表名。例如,要?jiǎng)h除表XSB,使用的T-SQL語(yǔ)句為:USEPXSCJGODROPTABLEXSB

3.4界面方式操作表數(shù)據(jù)3.4.1插入記錄用戶(hù)可以自己根據(jù)需要向表中插入數(shù)據(jù),插入的數(shù)據(jù)要符合列的約束條件,例如,不可以向非空的列插入NULL值。也可參考本書(shū)附錄A中的數(shù)據(jù)樣本表,本書(shū)后面用到的數(shù)據(jù)就是附錄A中的樣本數(shù)據(jù)。圖3.17所示是插入數(shù)據(jù)后的XSB表。圖3.17向表中插入記錄3.4.2刪除記錄當(dāng)表中的某些記錄不再需要時(shí),要將其刪除。在對(duì)象資源管理器中刪除記錄的方法是:在表數(shù)據(jù)窗口中定位需刪除的記錄行,單擊該行最前面的黑色箭頭處選擇全行,右擊鼠標(biāo),選擇“刪除”菜單項(xiàng),如圖3.18所示。圖3.18刪除記錄3.4.3修改記錄在操作表數(shù)據(jù)的窗口中修改記錄數(shù)據(jù)的方法是,先定位被修改的記錄字段,然后對(duì)該字段值進(jìn)行修改,修改之后將光標(biāo)移到下一行即可保存修改的內(nèi)容。3.5命令方式操作表數(shù)據(jù)3.5.1插入記錄插入記錄使用INSERT語(yǔ)句。語(yǔ)法格式。說(shuō)明如下。(1)table_name:被操作的表名。前面可以指定數(shù)據(jù)庫(kù)名和架構(gòu)名。(2)view_name:視圖名。有關(guān)視圖的內(nèi)容將在第4章中介紹。(3)column_list:需要插入數(shù)據(jù)的列的列表。包含了新插入行的各列的名稱(chēng)。當(dāng)只給表的部分列插入數(shù)據(jù)時(shí),需要用column_list指出這些列。(4)OUTPUT子句:用于在執(zhí)行插入數(shù)據(jù)操作時(shí)返回插入的行,可用于數(shù)據(jù)比較等場(chǎng)合,可省略。(5)VALUES子句:包含各列需要插入的數(shù)據(jù)清單,數(shù)據(jù)的順序要與列的順序相對(duì)應(yīng)。若省略colume_list,則VALUES子句給出每一列(除IDENTITY屬性和timestamp類(lèi)型以外的列)的值。VALUES子句中的值可有以下三種。①DEFAULT:指定為該列的默認(rèn)值。這要求定義表時(shí)必須指定該列的默認(rèn)值。②NULL:指定該列為空值。③expression:可以是一個(gè)常量、變量或一個(gè)表達(dá)式,其值的數(shù)據(jù)類(lèi)型要與列的數(shù)據(jù)類(lèi)型一致。例如,列的數(shù)據(jù)類(lèi)型為int,若插入的數(shù)據(jù)是'aaa'就會(huì)出錯(cuò)。當(dāng)數(shù)據(jù)為字符型時(shí)要用單引號(hào)括起來(lái)。3.5.1插入記錄(6)derived_table:這是一個(gè)由SELECT語(yǔ)句查詢(xún)所得到的結(jié)果集。利用該參數(shù),可把一個(gè)表中的部分?jǐn)?shù)據(jù)插入到另一個(gè)表中。結(jié)果集中每行數(shù)據(jù)的字段數(shù)、字段的數(shù)據(jù)類(lèi)型要與被操作的表完全一致。使用結(jié)果集向表中插入數(shù)據(jù)時(shí)可以使用TOP(expression)[PERCENT]選項(xiàng),這個(gè)選項(xiàng)可以在結(jié)果集中選擇指定的行數(shù)或占指定百分比數(shù)的行插入表中。expression可以是行數(shù)或行的百分比,使用百分比時(shí)要加PERCENT關(guān)鍵字。有關(guān)SELECT語(yǔ)句的內(nèi)容將在第4章中介紹。(7)<dml_table_source>:指定插入目標(biāo)表的行是INSERT、UPDATE、DELETE或

MERGE語(yǔ)句的OUTPUT子句返回的行。(8)DEFAULTVALUES:該關(guān)鍵字說(shuō)明向當(dāng)前表中所有列均插入其默認(rèn)值。此時(shí),要求所有列均定義了默認(rèn)值。3.5.1插入記錄【例3.13】

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

假設(shè)上表XSB中專(zhuān)業(yè)的默認(rèn)值為“計(jì)算機(jī)”,備注默認(rèn)值為NULL,則插入上例數(shù)據(jù)可以使用以下命令:INSERTINTOXSB(學(xué)號(hào),姓名,性別,出生時(shí)間,總學(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.16】

向?qū)W生管理系統(tǒng)涉及的其他表中插入數(shù)據(jù)。向KCB表加入數(shù)據(jù)的T-SQL語(yǔ)句示例如下:INSERTINTOKCBVALUES('101','計(jì)算機(jī)基礎(chǔ)',1,80,5)向CJB表加入數(shù)據(jù)的T-SQL語(yǔ)句示例如下:INSERTINTOCJBVALUES('081101',101,80)3.5.1插入記錄【例3.17】

從表XSB中生成計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生表,包括學(xué)號(hào)、姓名、專(zhuān)業(yè),要求新表中的數(shù)據(jù)為結(jié)果集中前5行。用CREATE語(yǔ)句建立表XSB1:USEPXSCJGOCREATETABLEXSB1( numchar(6)NOTNULLPRIMARYKEY, namechar(8)NOTNULL, speialitychar(10)NULL)用INSERT語(yǔ)句向XSB1表中插入數(shù)據(jù):INSERTTOP(5)INTOXSB1 SELECT學(xué)號(hào),姓名,專(zhuān)業(yè) FROMXSB WHERE專(zhuān)業(yè)='計(jì)算機(jī)'3.5.1插入記錄使用SELECT語(yǔ)句從XSB1表中查詢(xún)結(jié)果:SELECT* FROMXSB1 /*XSB1表的內(nèi)容*/執(zhí)行結(jié)果如圖3.20所示:

圖3.20執(zhí)行結(jié)果3.5.2刪除記錄1.使用DELETE語(yǔ)句刪除數(shù)據(jù)語(yǔ)法格式如下。[WITH<common_table_expression>[,...n]] /*指定臨時(shí)結(jié)果集,在SELECT語(yǔ)句中介紹*/DELETE[TOP(expression)[PERCENT]][FROM]{table_name /*從表中刪除數(shù)據(jù)*/ |view_name /*從視圖刪除數(shù)據(jù)*/|rowset_function_limited /*可以是OPENQUERY或OPENROWSET函數(shù)*/ [WITH(<table_hint_limited>[...n])] /*指定表提示,可省略*/} [<OUTPUTClause>] /*OUTPUT子句*/ [FROM<table_source>[,...n]] /*從table_source刪除數(shù)據(jù)*/ [WHERE{<search_condition> /*指定條件*/|{[CURRENTOF{{[GLOBAL]cursor_name}|cursor_variable_name}]} /*有關(guān)游標(biāo)的說(shuō)明,見(jiàn)第4章*/ } ] [OPTION(<QueryHint>[,...n])] /*使用優(yōu)化程序*/[;]3.5.2刪除記錄說(shuō)明如下。(1)[TOP(expression)[PERCENT]]:指定將要?jiǎng)h除的任意行數(shù)或任意行的百分比。(2)FROM子句:說(shuō)明從何處刪除數(shù)據(jù)??梢詮囊韵滤姆N類(lèi)型的對(duì)象中刪除數(shù)據(jù)。①表:由table_name指定要從其中刪除數(shù)據(jù)的表名,關(guān)鍵字WITH指定目標(biāo)表所允許的一個(gè)或多個(gè)表提示,一般情況下不需要使用WITH關(guān)鍵字。②視圖:由view_name指定要從其中刪除數(shù)據(jù)的視圖名,注意該視圖必須可以更新,并且正確引用了一個(gè)基本表。③OPENQUERY和OPENROWSET函數(shù):由rowset_function_limited指定。④table_sourc

溫馨提示

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