第3章 表與表數(shù)據(jù)操作_第1頁
第3章 表與表數(shù)據(jù)操作_第2頁
第3章 表與表數(shù)據(jù)操作_第3頁
第3章 表與表數(shù)據(jù)操作_第4頁
第3章 表與表數(shù)據(jù)操作_第5頁
已閱讀5頁,還剩77頁未讀 繼續(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ù)3.1表結(jié)構(gòu)和數(shù)據(jù)類型3.1.1表和表結(jié)構(gòu)每個數(shù)據(jù)庫包含了若干個表。表是SQLServer中最主要的數(shù)據(jù)庫對象,它是用來存儲數(shù)據(jù)的一種邏輯結(jié)構(gòu)。表由行和列組成,因此也稱為二維表。表是在日常工作和生活中經(jīng)常使用的一種表示數(shù)據(jù)及其關(guān)系的形式,表3.1就是用來表示學(xué)生情況的一個學(xué)生表。學(xué)號姓名性別出生時間專業(yè)總學(xué)分備注081101王林男1990-02-10計算機50081103王燕女1989-10-06計算機50081108林一帆男1989-08-05計算機52已提前修完一門課081202王林男1989-01-29通信工程40有一門課不及格,待補考081204馬琳琳女1989-02-10通信工程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ù)項稱為字段。例如,表3.1中表結(jié)構(gòu)為(學(xué)號,姓名,性別,出生時間,專業(yè),總學(xué)分,備注),包含7個字段,由5個記錄組成。(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)鍵字。這里的主關(guān)鍵字與第1章中的主碼所起的作用是相同的,都用來唯一標(biāo)識記錄行。例如,在學(xué)生表中,2個及其以上記錄的姓名、性別、出生時間、專業(yè)、總學(xué)分和備注這6個字段的值有可能相同,但是“學(xué)號”字段的值對表中所有記錄來說一定不同,即通過“學(xué)號”字段可以將表中的不同記錄區(qū)分開來。所以,“學(xué)號”字段是唯一的候選關(guān)鍵字,學(xué)號就是主關(guān)鍵字。再例如,學(xué)生成績表記錄的候選關(guān)鍵字是(學(xué)號,課程號)字段組合,它也是唯一的候選關(guān)鍵字。3.1.2數(shù)據(jù)類型列的數(shù)據(jù)類型可以是SQLServer提供的系統(tǒng)數(shù)據(jù)類型,也可以是用戶定義的數(shù)據(jù)類型。SQLServer2008提供了豐富的系統(tǒng)數(shù)據(jù)類型,現(xiàn)將其列于表3.2中。數(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,hierarchyid表3.2系統(tǒng)數(shù)據(jù)類型表3.1.2數(shù)據(jù)類型在討論數(shù)據(jù)類型時,使用了精度、小數(shù)位數(shù)和長度3個概念,前兩個概念是針對數(shù)值型數(shù)據(jù)的,它們的含義如下。精度:指數(shù)值數(shù)據(jù)中所存儲的十進制數(shù)據(jù)的總位數(shù)。小數(shù)位數(shù):指數(shù)值數(shù)據(jù)中小數(shù)點右邊可以有的數(shù)字位數(shù)的最大值。例如,數(shù)值數(shù)據(jù)3890.587的精度是7,小數(shù)位數(shù)是3。長度:指存儲數(shù)據(jù)所使用的字節(jié)數(shù)。3.1.2數(shù)據(jù)類型下面分別說明常用的系統(tǒng)數(shù)據(jù)類型。1.整數(shù)型整數(shù)型包括bigint、int、smallint和tinyint,從標(biāo)識符的含義就可以看出,它們的表示數(shù)范圍逐漸縮小。bigint:大整數(shù),數(shù)范圍為263~2631,其精度為19,小數(shù)位數(shù)為0,長度為8字節(jié)。int:整數(shù),數(shù)范圍為231~2311,其精度為10,小數(shù)位數(shù)為0,長度為4字節(jié)。smallint:短整數(shù),數(shù)范圍為215~2151,其精度為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ù)值型精確數(shù)值型數(shù)據(jù)由整數(shù)部分和小數(shù)部分構(gòu)成,其所有的數(shù)字都是有效位,能夠以完整的精度存儲十進制數(shù)。精確數(shù)值型包括decimal和

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

浮點型也稱近似數(shù)值型。顧名思義,這種類型不能提供精確表示數(shù)據(jù)的精度,使用這種類型來存儲某些數(shù)值時,可能會損失一些精度,所以它可用于處理取值范圍非常大且對精確度要求不太高的數(shù)值量,如一些統(tǒng)計量。有兩種近似數(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.貨幣型SQLServer2008提供了兩個專門用于處理貨幣的數(shù)據(jù)類型:money和smallmoney,它們用十進制數(shù)表示貨幣值。money:數(shù)據(jù)的數(shù)范圍為263~2631,其精度為19,小數(shù)位數(shù)為4,長度為8字節(jié)。money的數(shù)范圍與bigint相同,不同的只是money型有4位小數(shù),實際上,money就是按照整數(shù)進行運算的,只是將小數(shù)點固定在末4位。smallmoney:數(shù)范圍為–231~2311,其精度為10,小數(shù)位數(shù)為4,長度為4字節(jié)??梢妔mallmoney與int的關(guān)系就如同money與bigint的關(guān)系一樣。當(dāng)向表中插入money或smallmoney類型的值時,必須在數(shù)據(jù)前面加上貨幣表示符號($),并且數(shù)據(jù)中間不能有逗號(,);若貨幣值為負數(shù),則需要在符號$的后面加上負號(-)。例如,$15000.32,$680,$-20000.9088都是正確的貨幣數(shù)據(jù)表示形式。3.1.2數(shù)據(jù)類型5.位型SQLServer2008中的位(bit)型數(shù)據(jù)相當(dāng)于其他語言中的邏輯型數(shù)據(jù),它只存儲0和1,長度為1字節(jié)。但要注意,SQLServer對表中bit類型列的存儲進行了優(yōu)化:如果一個表中有不多于8個的bit列,則這些列將作為1字節(jié)存儲;如果表中有9~16個bit列,則這些列將作為2字節(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"。SQLServer2008字符型包括兩類:固定長度(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ù)據(jù)類型為char(20),而輸入的字符串為"ahjm1922",則存儲的是字符ahjm1922和12個空格。若輸入的字符個數(shù)超出了n,則超出的部分被截斷。varchar[(n)]:變長字符數(shù)據(jù)類型,其中,n的規(guī)定與定長字符型char中的n完全相同,但這里n表示的是字符串可達到的最大長度。3.1.2數(shù)據(jù)類型7.Unicode字符型Unicode是統(tǒng)一字符編碼標(biāo)準(zhǔn),用于支持國際上非英語語種的字符數(shù)據(jù)的存儲和處理。SQLServer的Unicode字符型可以存儲Unicode標(biāo)準(zhǔn)字符集定義的各種字符。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之間,長度為2n字節(jié)。若輸入的字符串長度不足n,將以空白字符補足。nvarchar[(n)]:nvarchar[(n)]為最多包含n個字符的可變長度Unicode字符型數(shù)據(jù),n的值在1~4000之間,默認為1。長度是所輸入字符個數(shù)的兩倍。3.1.2數(shù)據(jù)類型8.文本型當(dāng)需要存儲大量的字符數(shù)據(jù),如較長的備注、日志信息等時,字符型數(shù)據(jù)最長8000個字符的限制可能使它們不能滿足這種應(yīng)用需求,此時可使用文本型數(shù)據(jù)。文本型包括text和ntext兩類,分別對應(yīng)ASCII字符和Unicode字符。text類型可以表示最大長度為2311個字符,其數(shù)據(jù)的存儲長度為實際字符數(shù)字節(jié)。ntext類型可表示最大長度為2301個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ù)用于存儲日期和時間信息,在SQLServer2008以前的版本中,日期時間數(shù)據(jù)類型只有datetime和smalldatetime兩種。而在SQLServer2008中新增了4種新的日期時間數(shù)據(jù)類型,分別為date、time、datetime2和datetimeoffset。(1)datetime:datetime類型可表示的日期范圍為從1753年1月1日到9999年12月31日,精確度為0.03s(3.33ms或0.00333s),例如,1~3ms的值都表示為0ms,4~6ms的值都表示為4ms。datetime類型數(shù)據(jù)長度為8字節(jié),日期和時間分別使用4字節(jié)存儲。前4字節(jié)用于存儲datetime類型數(shù)據(jù)中距1900年1月1日的天數(shù)。為正數(shù)表示日期在1900年1月1日之后,為負數(shù)則表示日期在1900年1月1日之前。后4字節(jié)用于存儲datetime類型數(shù)據(jù)中距12:00(24小時制)的毫秒數(shù)。3.1.2數(shù)據(jù)類型用戶給出datetime類型數(shù)據(jù)值時,日期部分和時間部分分別給出。日期部分的表示形式常用的格式如下:年月日2001Jan20、2001Janary20年日月200120Jan月日[,]年Jan202001、Jan20,2001、Jan20,01月年日Jan200120日月[,]年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ù)類型時間部分常用的表示格式如下:時:分10:20、08:05時:分:秒20:15:18、20:15:18.2時:分:秒:毫秒20:15:18:200時:分AM|PM10:10AM、10:3.1.2數(shù)據(jù)類型(2)smalldatetime:smalldatetime類型數(shù)據(jù)可表示從1900年1月1日到2079年6月6日的日期和時間,數(shù)據(jù)精確到分鐘。即29.998s或更低的值向下舍入為最接近的分鐘,29.999s或更高的值向上舍入為最接近的分鐘。smalldatetime類型數(shù)據(jù)的存儲長度為4字節(jié),前2字節(jié)用來存儲smalldatetime類型數(shù)據(jù)中日期部分距1900年1月1日之后的天數(shù)。后2字節(jié)用來存儲smalldatetime類型數(shù)據(jù)中時間部分距中午12點的分鐘數(shù)。用戶輸入smalldatetime類型數(shù)據(jù)的格式與datetime類型數(shù)據(jù)完全相同,只是它們的內(nèi)部存儲可能不相同。(3)date:date類型數(shù)據(jù)可以表示從公元元年1月1日到9999年12月31日的日期,date類型只存儲日期數(shù)據(jù),不存儲時間數(shù)據(jù),存儲長度為3字節(jié),表示形式與datetime數(shù)據(jù)類型的日期部分相同。3.1.2數(shù)據(jù)類型(4)time:time數(shù)據(jù)類型只存儲時間數(shù)據(jù),表示格式為“hh:mm:ss[.nnnnnnn]”。hh表示小時,范圍為0~23。mm表示分鐘,范圍為0~59。ss表示秒數(shù),范圍為0~59。n是0~7位數(shù)字,范圍為0~9999999,表示秒的小數(shù)部分,即微秒數(shù)。所以time數(shù)據(jù)類型的取值范圍為00:00:00.0000000~23:59:59.9999999。time類型的存儲大小為5字節(jié)。另外還可以自定義time類型微秒數(shù)的位數(shù),例如,time(1)表示小數(shù)位數(shù)為1,默認為7。(5)datetime2:新的datetime2數(shù)據(jù)類型和datetime類型一樣,也用于存儲日期和時間信息。但是datetime2類型取值范圍更廣,日期部分取值范圍從公元元年1月1日到9999年12月31日,時間部分的取值范圍為00:00:00.0000000~23:59:59.999999。另外,用戶還可以自定義datetime2數(shù)據(jù)類型中微秒數(shù)的位數(shù),例如,datetime(2)表示小數(shù)位數(shù)為2。datetime2類型的存儲大小隨著微秒數(shù)的位數(shù)(精度)而改變,精度小于3時為6字節(jié),精度為4和5時為7字節(jié),所有其他精度則需要8字節(jié)。3.1.2數(shù)據(jù)類型(6)datetimeoffset:datetimeoffset數(shù)據(jù)類型也用于存儲日期和時間信息,取值范圍與datetime2類型相同。但datetimeoffset類型具有時區(qū)偏移量,此偏移量指定時間相對于協(xié)調(diào)世界時(UTC)偏移的小時和分鐘數(shù)。datetimeoffset的格式為“YYYY-MM-DDhh:mm:ss[.nnnnnnn][{+|}hh:mm]”,其中,hh為時區(qū)偏移量中的小時數(shù),范圍為00~14,mm為時區(qū)偏移量中的額外分鐘數(shù),范圍為00~59。時區(qū)偏移量中必須包含“+”(加)或“–”(減)號。這兩個符號表示是在UTC時間的基礎(chǔ)上加上還是從中減去時區(qū)偏移量以得出本地時間。時區(qū)偏移量的有效范圍為14:00~+14:00。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é)。12.圖像數(shù)據(jù)類型標(biāo)識符是image,它用于存儲圖片、照片等。實際存儲的是可變長度二進制數(shù)據(jù),介于

0與2311(2147483647)字節(jié)之間。在SQLServer2008中該類型是為了向下兼容而保留的數(shù)據(jù)類型。微軟推薦用戶使用varbinary(MAX)數(shù)據(jù)類型來替代image類型。3.1.2數(shù)據(jù)類型13.其他數(shù)據(jù)類型除了上面所介紹的常用數(shù)據(jù)類型外,SQLServer2008還提供了其他幾種數(shù)據(jù)類型:cursor、sql_variant、table、uniqueidentifier、xml和hierarchyid。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é)。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。hierarchyid:hierarchyid數(shù)據(jù)類型是SQLServer2008新增加的一種長度可變的系統(tǒng)數(shù)據(jù)類型??墒褂?/p>

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

0:女出生時間日期型(date)默認值√無專業(yè)定長字符型(char)12√無總學(xué)分整數(shù)型(int)默認值√00≤總學(xué)分<160備注不定長字符型(varchar)500√無表3.3XSB的表結(jié)構(gòu)3.1.3表結(jié)構(gòu)設(shè)計參照XSB表結(jié)構(gòu)的設(shè)計方法,同樣可以設(shè)計出其他兩個表的結(jié)構(gòu),表3.4所示是KCB的表結(jié)構(gòu),表3.5所示是CJB的表結(jié)構(gòu)。列名數(shù)據(jù)類型長度是否可空默認值說明課程號定長字符型(char)3×無主鍵課程名定長字符型(char)16×無開課學(xué)期整數(shù)型(tinyint)1√1只能為1~8學(xué)時整數(shù)型(tinyint)1√0學(xué)分整數(shù)型(tinyint)1×0列名數(shù)據(jù)類型長度是否可空默認值說明學(xué)號定長字符型(char)6×無主鍵課程號定長字符型(char)3×無主鍵成績整數(shù)型(int)默認值√0表3.4KCB的表結(jié)構(gòu)表3.5CJB的表結(jié)構(gòu)3.2界面方式操作表3.2.1創(chuàng)建表以下是通過對象資源管理器創(chuàng)建表XSB的操作步驟。第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“不允許保存更改”對話框

3.2.2修改表結(jié)構(gòu)如果要在修改表時不出現(xiàn)此對話框,可以進行以下操作:啟動SQLServerManagementStudio,在面板中單擊“工具”主菜單,選擇“選項”子菜單,在出現(xiàn)的“選項”對話框中選擇“Designers”下的“表設(shè)計器和數(shù)據(jù)庫設(shè)計器”選項卡,將“阻止保存要求重新創(chuàng)建表的更改”復(fù)選框前的勾去掉,如圖3.8所示,完成操作后單擊“確定”按鈕,接下來就可以對表進行更改了。圖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)存在的列可能需要修改或刪除。【例3.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)生錯誤。(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】在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)建表創(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之前,必須在SQLServer2008數(shù)據(jù)庫引擎實例中啟用FILESTREAM,操作步驟如下。第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屬性的列以外的任何列。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章中介紹。column_nameAScomputed_column_expression:用于定義計算字段,計算字段是由同一表中的其他字段通過表達式計算得到的。其中,column_name為計算字段的列名,computed_column_expression是表其他字段的表達式,表達式可以是非計算字段的字段名、常量、函數(shù)、變量,也可以是一個或多個運算符連接的上述元素的任意組合。系統(tǒng)不將計算列中的數(shù)據(jù)進行物理存儲,該列只是一個虛擬列。如果需要將該列的數(shù)據(jù)物理化,則需要使用PERSISTED關(guān)鍵字。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ū)表1.使用T-SQL語句創(chuàng)建分區(qū)表(1)創(chuàng)建分區(qū)函數(shù)。創(chuàng)建分區(qū)函數(shù)使用CREATEPARTITIONFUNCTION命令,語法格式如下。CREATEPARTITIONFUNCTIONpartition_function_name(input_parameter_type) ASRANGE[LEFT|RIGHT] FORVALUES([boundary_value[,...n]])[;]

【例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) 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ū)方案時需要根據(jù)分區(qū)函數(shù)的參數(shù)定義映射分區(qū)的文件組。所以需要有文件組來容納分區(qū)數(shù),文件組可以由一個或多個文件構(gòu)成,而每個分區(qū)必須映射到一個文件組。一個文件組可以由多個分區(qū)使用。在一般情況下,文件組數(shù)最好與分區(qū)數(shù)相同,并且這些文件組通常位于不同的磁盤上。一個分區(qū)方案只可以使用一個分區(qū)函數(shù),而一個分區(qū)函數(shù)可以用于多個分區(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(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語句,只要在ON關(guān)鍵字后指定分區(qū)方案和分區(qū)列即可?!纠?.9】

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

編號

intNOTNULLPRIMARYKEY,

名稱

char(8)NOTNULL)ONNumberPS(編號)GO3.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ū)Т翱冢瑔螕簟跋乱徊健卑粹o,進入“選擇分區(qū)列”界面,界面中將顯示可用的分區(qū)列,選擇“成績”列,如圖3.13所示。圖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)建腳本”選項,并指定保存腳本的位置。3.3.3修改表結(jié)構(gòu)修改表結(jié)構(gòu)可以使用ALTERTABLE語句。語法格式?!纠?.11】設(shè)已經(jīng)在數(shù)據(jù)庫PXSCJ中創(chuàng)建了表XSB,先在表XSB中增加1個新列“獎學(xué)金等級”,然后在表XSB中刪除名為“獎學(xué)金等級”的列。在SSMS中新建一個查詢,并輸入如下腳本:USEPXSCJGOALTERTABLEXSB ADD獎學(xué)金等級

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

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

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

char(10)GOALTERTABLEXSB ALTERCOLUMN出生時間

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

3.4界面方式操作表數(shù)據(jù)3.4.1插入記錄用戶可以自己根據(jù)需要向表中插入數(shù)據(jù),插入的數(shù)據(jù)要符合列的約束條件,例如,不可以向非空的列插入NULL值。也可參考本書附錄A中的數(shù)據(jù)樣本表,本書后面用到的數(shù)據(jù)就是附錄A中的樣本數(shù)據(jù)。圖3.17所示是插入數(shù)據(jù)后的XSB表。圖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ù)比較等場合,可省略。(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ù),可把一個表中的部分?jǐn)?shù)據(jù)插入到另一個表中。結(jié)果集中每行數(shù)據(jù)的字段數(shù)、字段的數(shù)據(jù)類型要與被操作的表完全一致。使用結(jié)果集向表中插入數(shù)據(jù)時可以使用TOP(expression)[PERCENT]選項,這個選項可以在結(jié)果集中選擇指定的行數(shù)或占指定百分比數(shù)的行插入表中。expression可以是行數(shù)或行的百分比,使用百分比時要加PERCENT關(guān)鍵字。有關(guān)SELECT語句的內(nèi)容將在第4章中介紹。(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)語句的運行結(jié)果如圖3.19所示。圖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.16】

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

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

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

溫馨提示

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

評論

0/150

提交評論