第4章_數(shù)據(jù)庫中表的基本操作_第1頁
第4章_數(shù)據(jù)庫中表的基本操作_第2頁
第4章_數(shù)據(jù)庫中表的基本操作_第3頁
第4章_數(shù)據(jù)庫中表的基本操作_第4頁
第4章_數(shù)據(jù)庫中表的基本操作_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第四章第四章 數(shù)據(jù)庫中表的基本操作數(shù)據(jù)庫中表的基本操作SQL Server 數(shù)據(jù)庫應(yīng)用技術(shù)SQL Server 20002本章主要內(nèi)容本章主要內(nèi)容l4.1 數(shù)據(jù)庫對象l4.2 數(shù)據(jù)表的設(shè)計(jì)與創(chuàng)建l4.3 定義約束l4.4 使用默認(rèn)和規(guī)則SQL Server 200034.1 4.1 數(shù)據(jù)庫對象數(shù)據(jù)庫對象 下面介首先紹數(shù)據(jù)庫中各種對象的作用,使大家對各種數(shù)據(jù)庫對象有一定的了解,以便進(jìn)一步深入學(xué)習(xí)。 SQL Server的數(shù)據(jù)庫有11種對象,包括關(guān)系圖、表、視圖、存儲過程、用戶、角色、規(guī)則、默認(rèn)、用戶定義的數(shù)據(jù)類型、用戶定義的函數(shù)和全文目錄。SQL Server 20004數(shù)據(jù)表數(shù)據(jù)表l 表是數(shù)據(jù)

2、庫中最重要的數(shù)據(jù)庫對象,是數(shù)據(jù)庫的基本組成部分,是儲存數(shù)據(jù)的邏輯載體。關(guān)系型數(shù)據(jù)庫中的表都是二維的,表的一列稱為一個(gè)字段(域);表的一行稱為一個(gè)記錄 。lSQL Server 2000中,每個(gè)數(shù)據(jù)庫最多可存儲20億個(gè)數(shù)據(jù)表,每個(gè)表中最多允許1024列。表的行數(shù)沒有限制,與磁盤存儲空間有關(guān)。數(shù)據(jù)庫對象數(shù)據(jù)庫對象數(shù)據(jù)表數(shù)據(jù)表SQL Server 20005 數(shù)據(jù)表數(shù)據(jù)表lSQL Server 2000有兩類表,一類是永久表,這類表一旦創(chuàng)建將一直存儲在硬盤上,除非被用戶刪除;另一類是臨時(shí)表,這類表在用戶退出時(shí)自動被系統(tǒng)刪除。(臨時(shí)表又分為局部臨時(shí)表與全局臨時(shí)表。局部臨時(shí)表的名稱以開頭,僅可由創(chuàng)建者本

3、人在創(chuàng)建后立即使用,一旦創(chuàng)建者斷開連接,該表將會消失;全局臨時(shí)表的名稱以開頭,創(chuàng)建者在創(chuàng)建后可以由多個(gè)授權(quán)用戶立即使用,一旦最后使用的用戶斷開連接,該表將會消失。)數(shù)據(jù)庫對象數(shù)據(jù)庫對象數(shù)據(jù)表數(shù)據(jù)表SQL Server 20006 約束約束l建立和使用約束的目的就是保證數(shù)據(jù)的完整性.約束是SQL Server強(qiáng)制實(shí)行的應(yīng)用規(guī)則,它通過限制列,行和表之間的數(shù)據(jù)來保證數(shù)據(jù)完整性.l數(shù)據(jù)完整性分為:實(shí)體完整性,域完整性,參照完整性和用戶完整性數(shù)據(jù)庫對象數(shù)據(jù)庫對象約束約束SQL Server 20007 默認(rèn)默認(rèn)l對于某些字段,可以在程序中制定默認(rèn)值,以方便用戶;也可以先定義好,需要時(shí)將它綁定到一列或多

4、列上.l在表中插入數(shù)據(jù)行時(shí),系統(tǒng)自動為沒有指定數(shù)據(jù)的列提供事先定義的默認(rèn)值數(shù)據(jù)庫對象數(shù)據(jù)庫對象默認(rèn)默認(rèn)SQL Server 20008 規(guī)則規(guī)則l規(guī)則的作用就是當(dāng)向表中插入數(shù)據(jù)時(shí),指定該列接受數(shù)據(jù)值的范圍.l規(guī)則與默認(rèn)一樣,只需在數(shù)據(jù)庫中定義一次,就可以被多次應(yīng)用于任意表中的一列或多列上.數(shù)據(jù)庫對象數(shù)據(jù)庫對象規(guī)則規(guī)則SQL Server 20009 視圖視圖l視圖是從一個(gè)或多個(gè)表(或視圖)導(dǎo)出的表.是數(shù)據(jù)庫提供給用戶以多種角度觀察數(shù)據(jù)庫中數(shù)據(jù)的重要機(jī)制,常用于集中、簡化和定制顯示數(shù)據(jù)庫中的信息.l視圖是一種虛擬表,它不是數(shù)據(jù)庫中的實(shí)際存在的表,其內(nèi)容來自于其他一些基表數(shù)據(jù)庫對象數(shù)據(jù)庫對象視圖視

5、圖SQL Server 200010 存儲過程存儲過程l存儲過程是一組為了完成特定功能的SQL語句集,是預(yù)先編譯好的,存儲在服務(wù)器上,由應(yīng)用程序激活,而不是由SQL Server自動執(zhí)行l(wèi)SQL Server中的存儲過程分為兩類: 系統(tǒng)提供的存儲過程和用戶自定義的存儲過程.數(shù)據(jù)庫對象數(shù)據(jù)庫對象存儲過程存儲過程SQL Server 200011 觸發(fā)器觸發(fā)器l觸發(fā)器是一種特殊類型的存儲過程,它不同于前面介紹存儲過程.l觸發(fā)器主要是通過事件進(jìn)行觸發(fā)而被執(zhí)行,而存儲過程可以通過存儲過程的名字而被直接調(diào)用數(shù)據(jù)庫對象數(shù)據(jù)庫對象觸發(fā)器觸發(fā)器SQL Server 2000124.2 數(shù)據(jù)表的設(shè)計(jì)和創(chuàng)建數(shù)據(jù)表

6、的設(shè)計(jì)和創(chuàng)建l4.2.1 SQL Server中的數(shù)據(jù)類型l4.2.2 數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建l4.2.3 修改表結(jié)構(gòu)l4.2.4 插入、更新和刪除表數(shù)據(jù)SQL Server 2000134.2.1 4.2.1 數(shù)據(jù)類型數(shù)據(jù)類型l一一. 系統(tǒng)數(shù)據(jù)類型系統(tǒng)數(shù)據(jù)類型l二二. . 用戶自定義數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型 SQL Server 200014一一.系統(tǒng)數(shù)據(jù)類型系統(tǒng)數(shù)據(jù)類型數(shù)數(shù) 據(jù)據(jù) 類類 型型-系統(tǒng)數(shù)據(jù)類系統(tǒng)數(shù)據(jù)類型型 1. 整型數(shù)據(jù)類型 2. 浮點(diǎn)數(shù)據(jù)類型 3. 十進(jìn)制數(shù)據(jù)類型 4. 字符數(shù)據(jù)類型 5. Unicode字符串?dāng)?shù)據(jù)類型 6.日期和時(shí)間數(shù)據(jù)類型 7. 貨幣數(shù)據(jù)類型貨幣數(shù)據(jù)類型 8.

7、 位數(shù)據(jù)類型位數(shù)據(jù)類型 9. 二進(jìn)制數(shù)據(jù)類型二進(jìn)制數(shù)據(jù)類型 10. 特殊數(shù)據(jù)類型特殊數(shù)據(jù)類型 11. 新增數(shù)據(jù)類型新增數(shù)據(jù)類型 12. 空值空值SQL Server 2000151. 整型數(shù)據(jù)類型整型數(shù)據(jù)類型l整型數(shù)據(jù)類型是最常用的數(shù)據(jù)類型之一,它主要用來存儲整數(shù),可以直接進(jìn)行數(shù)據(jù)運(yùn)算,而不必使用函數(shù)轉(zhuǎn)換。lbigint: 用于存儲從-263到263-1之間的所有正負(fù)整數(shù)。(占8個(gè)字節(jié))lint(integer):int(或integer)數(shù)據(jù)類型可以存儲從-231(-2147483648)到231-1(2147483647)范圍之間的所有正負(fù)整數(shù)。(占4個(gè)字節(jié)) lsmallint:可以存儲

8、從-215(-32768)到215-1范圍之間的所有正負(fù)整數(shù) 。(占2個(gè)字節(jié))ltinyint:可以存儲從0到255范圍之間的所有正整數(shù)。(占1個(gè)字節(jié)) 數(shù)數(shù) 據(jù)據(jù) 類類 型型-系統(tǒng)數(shù)據(jù)類系統(tǒng)數(shù)據(jù)類型型SQL Server 2000162. 浮點(diǎn)數(shù)據(jù)類型浮點(diǎn)數(shù)據(jù)類型l浮點(diǎn)數(shù)據(jù)類型用于存儲實(shí)數(shù)。浮點(diǎn)類型的數(shù)據(jù)在SQL Server中無法按二進(jìn)制算法精確,表示時(shí)可能會有舍入誤差,采用只入不舍的方式進(jìn)行存儲 。lreal:可以存儲正的或者負(fù)的十進(jìn)制數(shù)值,最大可以有7位精確位數(shù)。(占4個(gè)字節(jié)) lfloat:可以精確到第15位小數(shù),其范圍從-1.79E-308到1.79E+308。 (占8個(gè)字節(jié)) f

9、loat數(shù)據(jù)類型也可以寫為float(n)的形式,n為115之間的整數(shù)值。當(dāng)n取17時(shí),系統(tǒng)用4個(gè)字節(jié)存儲它;當(dāng)n取815時(shí),用8個(gè)字節(jié)存儲它。數(shù)數(shù) 據(jù)據(jù) 類類 型型-系統(tǒng)數(shù)據(jù)類系統(tǒng)數(shù)據(jù)類型型SQL Server 2000173. 十進(jìn)制數(shù)據(jù)類型十進(jìn)制數(shù)據(jù)類型l與浮點(diǎn)數(shù)據(jù)類型相似,十進(jìn)制數(shù)據(jù)類型也是用來存儲實(shí)數(shù),但它是一種不帶舍入的精確的浮點(diǎn)數(shù)ldecimal和numeric:Decimal數(shù)據(jù)類型和numeric數(shù)據(jù)類型完全相同,它們可以提供小數(shù)所需要的實(shí)際存儲空間,但也有一定的限制,可以用2到17個(gè)字節(jié)來存儲從-1038-1到1038-1之間的數(shù)值。定義這種類型的數(shù)據(jù)時(shí),可以指定精度及小數(shù)

10、位數(shù). 可以將其寫為decimal(p,s)的形式。 例如:decimal(10,5),表示最多可存放10位數(shù)字,并且小數(shù)點(diǎn)后有5位數(shù)數(shù) 據(jù)據(jù) 類類 型型-系統(tǒng)數(shù)據(jù)類系統(tǒng)數(shù)據(jù)類型型SQL Server 2000184. 字符數(shù)據(jù)類型字符數(shù)據(jù)類型l字符數(shù)據(jù)類型可以用來存儲各種字母、數(shù)字符號和特殊符號及他們的組合。(如:”nanjing”,”1234-#$”都是合法的字符數(shù)據(jù))l Char:固定長度的非unicode字符數(shù)據(jù).其定義形式為char(n),其中n值不能超過8000,每個(gè)字符和符號占用一個(gè)字節(jié)的存儲空間。 lVarchar:可變長度的非unicode字符數(shù)據(jù).其定義形式為varchar

11、(n)。l Text:用于存儲大量文本數(shù)據(jù),其容量理論上為1到231-1(2147483647)個(gè)字節(jié),但實(shí)際應(yīng)用時(shí)要根據(jù)硬盤的存儲空間而定。數(shù)數(shù) 據(jù)據(jù) 類類 型型-系統(tǒng)數(shù)據(jù)類系統(tǒng)數(shù)據(jù)類型型SQL Server 2000195. Unicode數(shù)據(jù)類型數(shù)據(jù)類型lunicode標(biāo)準(zhǔn)中每個(gè)字符使用兩個(gè)字節(jié)來編碼,可以解決大字母表的問題.lnchar:固定長度,其定義形式為nchar(n).最大長度為4000個(gè)字符. lnvarchar:可變長度其定義形式為nvarchar(n).最大長度為4000個(gè)字符l ntext:與text數(shù)據(jù)類型類似,存儲在其中的數(shù)據(jù)通常是直接能輸出到顯示設(shè)備上的字符,顯示

12、設(shè)備可以是顯示器、窗口或者打印機(jī)。數(shù)數(shù) 據(jù)據(jù) 類類 型型-系統(tǒng)數(shù)據(jù)類系統(tǒng)數(shù)據(jù)類型型SQL Server 2000206. 日期和時(shí)間數(shù)據(jù)類型日期和時(shí)間數(shù)據(jù)類型lDatetime:用于存儲日期和時(shí)間的結(jié)合體 。它可以存儲從公元1753年1月1日零時(shí)起到公元9999年12月31日23時(shí)59分59秒之間的所有日期和時(shí)間 。lSmalldatetime:與datetime數(shù)據(jù)類型類似,但其日期時(shí)間范圍較小,它存儲從1900年1月1日到2079年6月6日內(nèi)的日期。l默認(rèn)情況下,日期型數(shù)據(jù)的格式是按照”月/日/年”的順序來設(shè)定的. 數(shù)數(shù) 據(jù)據(jù) 類類 型型-系統(tǒng)數(shù)據(jù)類系統(tǒng)數(shù)據(jù)類型型SQL Server 20

13、00217. 貨幣數(shù)據(jù)類型貨幣數(shù)據(jù)類型 lmoney:用于存儲貨幣值,存儲在money數(shù)據(jù)類型中的數(shù)值以一個(gè)正數(shù)部分和一個(gè)小數(shù)部分存儲在兩個(gè)4字節(jié)的整型值中,存儲范圍為-922337213685477.5808到922337213685477.5808,精度為貨幣單位的百分之一。(共占8個(gè)字節(jié))lsmallmoney:與money數(shù)據(jù)類型類似,但其存儲的貨幣值范圍比money數(shù)據(jù)類型小,其存儲范圍為-214748.3468到214748.3467。數(shù)數(shù) 據(jù)據(jù) 類類 型型-系統(tǒng)數(shù)據(jù)類系統(tǒng)數(shù)據(jù)類型型SQL Server 2000228. 位數(shù)據(jù)類型位數(shù)據(jù)類型lbit:稱為位數(shù)據(jù)類型,其數(shù)據(jù)有兩種取

14、值:0和1,長度為1字節(jié),適用于存儲一個(gè)邏輯值. 數(shù)數(shù) 據(jù)據(jù) 類類 型型-系統(tǒng)數(shù)據(jù)類系統(tǒng)數(shù)據(jù)類型型SQL Server 2000239. 二進(jìn)制數(shù)據(jù)類型二進(jìn)制數(shù)據(jù)類型lbinary:其定義形式為binary(n),數(shù)據(jù)的存儲長度是固定的,即n+4字節(jié),當(dāng)輸入的二進(jìn)制數(shù)據(jù)長度小于n時(shí),余下部分填充0。l varbinary:其定義形式為varbinary(n),數(shù)據(jù)的存儲長度是變化的,它為實(shí)際所輸入數(shù)據(jù)的長度加上4字節(jié)。其它含義同binary。lImage:用于存儲照片、目錄圖片或者圖畫,其理論容量為231-1(2147483647)個(gè)字節(jié)的數(shù)據(jù)。數(shù)數(shù) 據(jù)據(jù) 類類 型型-系統(tǒng)數(shù)據(jù)類系統(tǒng)數(shù)據(jù)類型型

15、SQL Server 20002410. 特殊數(shù)據(jù)類型特殊數(shù)據(jù)類型ltimestamp:亦稱時(shí)間戳數(shù)據(jù)類型,它提供數(shù)據(jù)庫范圍內(nèi)的唯一值,任何一個(gè)表中只能有一個(gè)timestamp列,該列的值在進(jìn)行數(shù)據(jù)修改時(shí)由SQL Server自動更新.反應(yīng)數(shù)據(jù)庫中數(shù)據(jù)修改的相對順序,相當(dāng)于一個(gè)單調(diào)上升的計(jì)數(shù)器。luniqueidentifier:用于存儲一個(gè)16字節(jié)長的二進(jìn)制數(shù)據(jù)類型,它是SQL Server根據(jù)計(jì)算機(jī)網(wǎng)絡(luò)適配器地址和CPU時(shí)鐘產(chǎn)生的唯一號碼而生成的全局唯一標(biāo)識符代碼(Globally Unique Identifier,簡寫為GUID)。在SQL Server中,由NEWID函數(shù)來生成GUI

16、D.即使在不同的計(jì)算機(jī)及不同的數(shù)據(jù)庫中,也不會有相同的GUID.數(shù)數(shù) 據(jù)據(jù) 類類 型型-系統(tǒng)數(shù)據(jù)類系統(tǒng)數(shù)據(jù)類型型SQL Server 20002511. 新增數(shù)據(jù)類型新增數(shù)據(jù)類型l sql_variant:用于存儲除文本、圖形數(shù)據(jù)和timestamp類型數(shù)據(jù)外的其它任何合法的SQL Server數(shù)據(jù)。ltable:用于存儲對表或者視圖處理后的結(jié)果集。這種新的數(shù)據(jù)類型使得變量可以存儲一個(gè)表,從而使函數(shù)或過程返回查詢結(jié)果更加方便、快捷。數(shù)數(shù) 據(jù)據(jù) 類類 型型-系統(tǒng)數(shù)據(jù)類系統(tǒng)數(shù)據(jù)類型型SQL Server 20002612. 空值空值l空值(NULL):不等于0,代表空白或零長度的字符串,意味著沒有

17、輸入,表明未知或未定義l避免用空值直接參與運(yùn)算l盡量不要允許用空值(用默認(rèn)值解決沒有輸入的問題)SQL Server 200027二二.用戶自定義數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型l在SQL Server2000中,用戶定義的數(shù)據(jù)類型是基于系統(tǒng)數(shù)據(jù)類型的.在創(chuàng)建一個(gè)用戶定義的數(shù)據(jù)類型時(shí),必須給出以下三部分信息: a.新數(shù)據(jù)類型名 b.這種數(shù)據(jù)類型是基于哪種系統(tǒng)數(shù)據(jù)類型的 c.數(shù)據(jù)類型可否為空l若用戶定義的數(shù)據(jù)類型放在某個(gè)用戶數(shù)據(jù)庫中,則這種數(shù)據(jù)類型僅能在此庫中使用.若定義在model數(shù)據(jù)庫中,則所以的用戶數(shù)據(jù)庫均可使用該數(shù)據(jù)類型.l有兩種方式可以創(chuàng)建用戶定義的數(shù)據(jù)類型 1. 使用企業(yè)管理器創(chuàng)建用戶定義

18、數(shù)據(jù)類型 2. 利用系統(tǒng)存儲過程sp_addtype創(chuàng)建用戶定義數(shù)據(jù)類型數(shù)數(shù) 據(jù)據(jù) 類類 型型-自定義數(shù)據(jù)類型自定義數(shù)據(jù)類型SQL Server 2000282.用用sp_addtype創(chuàng)建用戶定義數(shù)據(jù)類型創(chuàng)建用戶定義數(shù)據(jù)類型l系統(tǒng)存儲過程sp_addtype為用戶提供了T_SQL語句創(chuàng)建自定義數(shù)據(jù)類型的途徑,其語法形式如下: sp_addtype type, system_data_type, NULL|NOT NULL|NONULLl命令說明:l type:是用戶自定義數(shù)據(jù)類型的名稱,該名稱必須遵循標(biāo)識符的規(guī)則,而且在每個(gè)數(shù)據(jù)庫中必須唯一。數(shù)數(shù) 據(jù)據(jù) 類類 型型-自定義數(shù)據(jù)類型自定義數(shù)據(jù)類

19、型SQL Server 200029l system_data_type:是用戶自定義數(shù)據(jù)類型所基于的系統(tǒng)數(shù)據(jù)類型(如char、int等)。可能取值有2種情況: a.當(dāng)只是給一個(gè)基類型重命名時(shí),取值即為該基類型名,基類型可為SQL Server支持的不需指定長度和精度的系統(tǒng)類型.例如:int , bit , real等. b.若要指定基類型及允許的數(shù)據(jù)長度或小數(shù)點(diǎn)后保留的位數(shù),則必須用括號將數(shù)據(jù)長度或指定的保留位數(shù)括起來.并用單引號將該參數(shù)引起來. 例:char(n) , binary(n) l NULL|NOT NULL|NONULL:指明用戶定義的數(shù)據(jù)類型處理空值的方式,默認(rèn)值為NULL。

20、數(shù)數(shù) 據(jù)據(jù) 類類 型型-自定義數(shù)據(jù)類型自定義數(shù)據(jù)類型SQL Server 200030l例4.1:在student數(shù)據(jù)庫中創(chuàng)建一個(gè)名為birthday,基于smalldatetime數(shù)據(jù)類型,該列不允許為空值的用戶數(shù)據(jù)類型l例4.2: 在student數(shù)據(jù)庫中創(chuàng)建一個(gè)名為gdqy,基于varchar(10)數(shù)據(jù)類型,該列允許為空值. use student go exec sp_addtype birthday,smalldatetime, not null use student go exec sp_addtype gdqy, varchar(10) , nullSQL Server 20

21、0031例:自定義一個(gè)地址數(shù)據(jù)類型。例:自定義一個(gè)地址數(shù)據(jù)類型。 l其運(yùn)行結(jié)果如下:l(所影響的行數(shù)為 1 行)l類型已添加。數(shù)數(shù) 據(jù)據(jù) 類類 型型-自定義數(shù)據(jù)類型自定義數(shù)據(jù)類型exec sp_addtype address, varchar(80), not nullSQL Server 200032刪除自定義的地址數(shù)據(jù)類型。刪除自定義的地址數(shù)據(jù)類型。l1.用企業(yè)管理器l2. 利用系統(tǒng)存儲過程sp_droptype刪除用戶自定義數(shù)據(jù)類型命令格式: sp_droptype type_name命令說明:type表示要刪除的用戶自定義數(shù)據(jù)類型的名稱 。數(shù)數(shù) 據(jù)據(jù) 類類 型型-自定義數(shù)據(jù)類型自定義數(shù)

22、據(jù)類型SQL Server 200033lexec sp_droptype birthday其運(yùn)行結(jié)果如下: (所影響的行數(shù)為 1 行) (所影響的行數(shù)為 0 行) 類型已除去。數(shù)數(shù) 據(jù)據(jù) 類類 型型-自定義數(shù)據(jù)類型自定義數(shù)據(jù)類型SQL Server 200034l 在SQL Server數(shù)據(jù)庫中,表是包含數(shù)據(jù)庫中所有數(shù)據(jù)的數(shù)據(jù)庫對象,用來存儲各種各樣的信息。 表是由行和列組成的. l 創(chuàng)建數(shù)據(jù)表分兩個(gè)步驟:首先定義一個(gè)數(shù)據(jù)表的結(jié)構(gòu);其次是向數(shù)據(jù)表中添加數(shù)據(jù)。定義數(shù)據(jù)表結(jié)構(gòu)主要就是定義字段(列)。字段又叫數(shù)據(jù)項(xiàng),是表中不可再分的單元。定義字段包括定義:數(shù)據(jù)表所包含的字段名、字段數(shù)據(jù)類型和字段長

23、度等。l 在SQL Server 2000中,一個(gè)數(shù)據(jù)庫中最多可以創(chuàng)建20億個(gè)表,用戶創(chuàng)建數(shù)據(jù)庫表時(shí),最多可以定義1024列。在同一數(shù)據(jù)庫的不同表中,可以有相同的字段,但在同一個(gè)表中不允許有相同的字段,而且每個(gè)字段都要求數(shù)據(jù)類型相同。 4.2.2 4.2.2 數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建SQL Server 2000354.2.2 4.2.2 數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建l表是存儲各種數(shù)據(jù)的載體,具有以下特點(diǎn): 1.在特定的數(shù)據(jù)庫中表名是唯一的,在特定的表中,列名是唯一的,但不同的表可以有相同的列名 2.表是由行和列組成的,行又稱為記錄,列被稱為字段.行

24、和列的次序是任意的. 3.數(shù)據(jù)行在表中是唯一的,行的唯一性可以通過定義主鍵來實(shí)現(xiàn),在一個(gè)表中,不允許有兩個(gè)完全相同的行存在.數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建SQL Server 2000364.2.2 4.2.2 數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建l1.設(shè)計(jì)數(shù)據(jù)庫中每個(gè)表的結(jié)構(gòu)l2.統(tǒng)計(jì)數(shù)據(jù)庫中每個(gè)表的數(shù)據(jù)l3.創(chuàng)建數(shù)據(jù)表的實(shí)現(xiàn) SQL Server 2000提供了兩種方法創(chuàng)建數(shù)據(jù)庫表,第一種方法是利用企業(yè)管理器(Enterprise Manager)創(chuàng)建表;另一種方法是利用Transact-SQL語句中的create命令創(chuàng)建表。數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建SQL Server 200037

25、一一. 利用企業(yè)管理器創(chuàng)建表利用企業(yè)管理器創(chuàng)建表l步驟如下: 第一步:打開“數(shù)據(jù)庫”文件夾,展開已創(chuàng)建的“student”數(shù)據(jù)庫,右擊”表”,選擇 “新建表”菜單項(xiàng)。 第二步:單擊該菜單項(xiàng),便出現(xiàn)表設(shè)計(jì)器,在表設(shè)計(jì)器中設(shè)置該表的字段屬性。 設(shè)計(jì)器的上半部分有一個(gè)表格,在這個(gè)表格中輸入列的屬性,表格的每一行對應(yīng)一列。對每一列都需要進(jìn)行以下設(shè)置,其中前三項(xiàng)是必須在建表時(shí)給出的,它們是: (1)列名 (2)數(shù)據(jù)類型:數(shù)據(jù)類型是一個(gè)下拉列表框,其中包括了所有的系統(tǒng)數(shù)據(jù)類型和數(shù)據(jù)庫中的用戶自定義數(shù)據(jù)類型。 數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建SQL Server 200038 (3)長度:如果選擇的數(shù)據(jù)類型

26、需要長度,則指定長度。 (4)允許空:單擊鼠標(biāo),可以切換是否允許為空值的狀態(tài),勾選說明允許為空值,空白說明不允許為空值,默認(rèn)狀態(tài)下是允許為空值的。 表設(shè)計(jì)器的下半部分是特定列的詳細(xì)屬性,包括是否是標(biāo)識列、是否使用默認(rèn)值等。逐個(gè)定義好表中的列. 第三步:定義好所有列后,單擊工具欄上的保存按扭,在彈出的“選擇”名稱對話框的文本輸入框中輸入要創(chuàng)建的數(shù)據(jù)表名 ,然后單擊確定,保存設(shè)置并退出,新表即創(chuàng)建完成, 數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建SQL Server 200039l創(chuàng)建表的語句是create table.其語法形式如下: create table table_name (column_nam

27、e date_type null|notnull ,n) 在上述語法形式中:ltable_name:為新創(chuàng)建的表指定名字lcolumn_name:列名ldate_type:列的數(shù)據(jù)類型和寬度lnull|notnull:指定的列是否允許為空l,n):允許創(chuàng)建多個(gè)字段二二. 利用利用SQL語句創(chuàng)建表語句創(chuàng)建表數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建SQL Server 200040create table department( department_id char(6) not null, department_name nvarchar(20) not null, department_header

28、nvarchar(8) )例例: 用用create table語句創(chuàng)建表語句創(chuàng)建表department.該表有三個(gè)該表有三個(gè)字段字段:系號系號(department_id),系名系名(department_name),系系主任主任(department_header).數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建數(shù)據(jù)表設(shè)計(jì)與創(chuàng)建SQL Server 2000414.2.3 修改表結(jié)構(gòu)修改表結(jié)構(gòu)l1.利用企業(yè)管理器增加、刪除和修改列。在企業(yè)管理器中,打開指定的服務(wù)器中要修改表的數(shù)據(jù)庫,用右鍵單擊要進(jìn)行修改的表,從彈出的快捷菜單中選擇設(shè)計(jì)表選項(xiàng),則會出現(xiàn)設(shè)計(jì)表對話框,在該對話框中,可以利用圖形化工具完成增加、刪除和修改列的操

29、作。l2.利用Transact-SQL語言中的Alter table命令增加、刪除和修改字段。修修 改改 表表 結(jié)結(jié) 構(gòu)構(gòu)SQL Server 200042A.用用SQL語句修改表結(jié)構(gòu)語句修改表結(jié)構(gòu)-添加列添加列l(wèi) 向表中增加一列時(shí),應(yīng)使新增加的列有默認(rèn)值或允許為空值,SQL Server將向表中已存在的行填充新增列的默認(rèn)值或空值,如果既沒有提供默認(rèn)值也不允許為空值,那么新增列的操作將出錯(cuò)。 向表中添加列的語句格式如下: ALTER TABLE 表名 ADD 列名 列的描述l【例4.6】 向stud_info表中添加”身份證號碼”列,數(shù)據(jù)類型為varchar,允許為空值 Use student

30、 go alter table stud_info add 身份證號碼身份證號碼 varchar null修修 改改 表表 結(jié)結(jié) 構(gòu)構(gòu)SQL語句語句SQL Server 200043B.用用SQL語句修改表結(jié)構(gòu)語句修改表結(jié)構(gòu)-刪除列刪除列 如果某一列不再需要,可將其刪除,但有下列情況不可刪除: 該表正在復(fù)制 用在索引中的列 用在CHECK、FOREIGN KEY 、UNIQUE或PRIMARY KEY 約束中的列。 與DEFAULT定義關(guān)聯(lián)或綁定到某一默認(rèn)對象。 綁定到規(guī)則的列。 已注冊為全文本支持。 用作表的全文鍵。 刪除一列的語句格式為: ALTER TABLE 表名 DROP COLUM

31、N 列名修修 改改 表表 結(jié)結(jié) 構(gòu)構(gòu)SQL語句語句SQL Server 200044l【例4.7】 刪除 stud_info表中的”身份證號碼”列。 Use student go alter table stud_info drop column 身份證號碼 go修修 改改 表表 結(jié)結(jié) 構(gòu)構(gòu)SQL語句語句SQL Server 200045C.用用SQL語句修改表結(jié)構(gòu)語句修改表結(jié)構(gòu)- 修改列定義修改列定義 表中的每一列都有一組屬性,如列名、數(shù)據(jù)類型、數(shù)據(jù)長度以及是否允許為空值等,列的所有屬性構(gòu)成列的定義,這些屬性都可以在表創(chuàng)建好以后修改。 修改列定義的語句格式為: ALTER TABLE 表名

32、ALTER COLUMN 列名 列的描述 【例8.10】 將stud_info表的birthday列的數(shù)據(jù)類型改為smalldatetime。 默認(rèn)狀態(tài)下,列是被設(shè)置為允許空值的,將一個(gè)原來允許空值的列改為不允許空值,必須在以下兩個(gè)條件滿足時(shí)才能成功: (1)列中沒有存放是空值的記錄 (2)在列上沒有創(chuàng)建索引。 Use student go alter table stud_info alter column birthday smalldatetime修修 改改 表表 結(jié)結(jié) 構(gòu)構(gòu)SQL語句語句SQL Server 2000463.使用使用drop語句刪除數(shù)據(jù)表語句刪除數(shù)據(jù)表lDelete語句

33、只能刪除數(shù)據(jù)庫中表的記錄行,但刪除行后的表仍然在數(shù)據(jù)庫中,可使用drop語句從數(shù)據(jù)庫中刪除表.l其語法格式為: drop table 數(shù)據(jù)表名l注意:DROP table語句不能刪除系統(tǒng)表.l補(bǔ)充:重命名表 可使用系統(tǒng)存儲過程: sp_rename table_old_name , table_new_name修修 改改 表表 結(jié)結(jié) 構(gòu)構(gòu)刪除表刪除表SQL Server 2000474.2.4 插入、更新和刪除表數(shù)據(jù)插入、更新和刪除表數(shù)據(jù)l1.插入數(shù)據(jù)l2.數(shù)據(jù)庫中表的查看l3.修改數(shù)據(jù)l4.刪除數(shù)據(jù)SQL Server 2000481. 插入數(shù)據(jù)插入數(shù)據(jù)1.在企業(yè)管理器中向數(shù)據(jù)表插入數(shù)據(jù)的步

34、驟如下: (1)展開數(shù)據(jù)庫,單擊“表”。 (2)在詳細(xì)列表中右擊需插入數(shù)據(jù)的表名稱,在彈出菜單中選擇“打開表”下的“返回所有行”命令。 (3)如果屏幕彈出SQL Server登錄窗口,則輸入登錄帳號和密碼,按“確定”按鈕后,屏幕顯示數(shù)據(jù)表的內(nèi)容. (4)此時(shí)彈出查詢設(shè)計(jì)器的結(jié)果窗格,在該窗格中可以向表中添加新記錄,也可以修改和刪除表中已有的記錄。SQL Server 2000491. 插入數(shù)據(jù)插入數(shù)據(jù)2使用INSERT語句INSERT INTO 表名 (字段列表) VALUES (相應(yīng)的值列表)l字段的個(gè)數(shù)必須與VALUES子句中給出的值的個(gè)數(shù)相同;數(shù)據(jù)類型必須和字段的數(shù)據(jù)類型相對應(yīng)。SQL

35、Server 2000501. 插入數(shù)據(jù)插入數(shù)據(jù)l(1)添加數(shù)據(jù)到一行中的所有列 當(dāng)將數(shù)據(jù)添加到一行的所有列時(shí),使用VALUES關(guān)鍵字來給出要添加的數(shù)據(jù)。INSERT語句中無需給出表中的列名,只要VALUES中給出的數(shù)據(jù)與用CREATE TABLE定義表時(shí)給定的列名順序相同即可。SQL Server 200051【例4.12】 :在表stud_info中插入如下一條記錄: 0401040125,張明,08-12-1986,男,河南省鄭州市450002,573需要注意的是: (1)輸入的順序和數(shù)據(jù)類型必須與表中列的順序和數(shù)據(jù)類型一致。 (2)可以不給全部列賦值,但沒

36、有賦值的列必須是可以為空的列。 (3)字符型和日期型值插入時(shí)要用單引號擴(kuò)起來。use studentinsert stud_infovalues(0401040125,張明,08-12-1986,男, 河南省鄭州市450002,573)Go SQL Server 200052l(2)添加數(shù)據(jù)到一行中的部分列 要將數(shù)據(jù)添加到一行中的部分列時(shí),則需要同時(shí)給出要使用的列名以及要賦給這些列的數(shù)據(jù)。 【例4.13】 在表stud_info中插入部分記錄,只輸入stud_id,name,address三個(gè)列值:0401050129,張鋅,河南省新鄉(xiāng)市 在查詢分析器中執(zhí)行,返回

37、的結(jié)果為: (所影響的行數(shù)為 1 行) 對于這種添加部分列的操作,在添加數(shù)據(jù)前應(yīng)確認(rèn)未在VALUES列表中出現(xiàn)的列允許不允許為NULL;只有允許為NULL的列,才可以不出現(xiàn)在VALUES列表中 use studentgoinsert stud_info(stud_id,name,address)values(0401050129,張鋅,河南省新鄉(xiāng)市)1. 插入數(shù)據(jù)插入數(shù)據(jù)SQL Server 2000532.2.數(shù)據(jù)庫中表的查看數(shù)據(jù)庫中表的查看l1.查看表的結(jié)構(gòu) a.使用企業(yè)管理器查看 b.使用系統(tǒng)存儲過程查看 sp_help 數(shù)據(jù)表名l2.查看表中的數(shù)據(jù) a).使用企業(yè)管理器 (1).打開表

38、-返回所以行 (2).打開表-查詢 b).使用查詢分析器 c).使用select語句查看 select * from stud_infoSQL Server 2000543.3.修改數(shù)據(jù)修改數(shù)據(jù)l使用UPDATE語句修改數(shù)據(jù) 語法格式為: UPDATE 表名 SET 列名=更新后新的數(shù)據(jù)值,n WHERE 條件 update stud_infoset birthday=03-12-1986,gender=男, telcodezipcode=453000where stud_id=0401050129SQL Server 2000554.4.刪除數(shù)據(jù)刪除數(shù)據(jù)l使用T-

39、SQL中的DELETE語句可以刪除數(shù)據(jù)表中的一個(gè)或多個(gè)記錄。 語法格式為: DELETE from 表名 WHERE 條件 其中,表名是要刪除數(shù)據(jù)的表的名字。如果DELETE語句中沒有WHERE子句限制,表中的所有記錄都將被刪除?!纠?.15】刪除表stud_info中學(xué)生地址列address為空的記錄【例4.16】刪除表中stud_info所有記錄delete from stud_info where address is nulldelete from stud_infoSQL Server 2000564.3 定義約束定義約束l 約束是SQL Server提供的自動保持?jǐn)?shù)據(jù)庫完整性的一種

40、方法,約束定義了關(guān)于允許什么數(shù)據(jù)進(jìn)入數(shù)據(jù)庫的檢驗(yàn)規(guī)則。(如:字段值不允許重復(fù),字段值在一定范圍內(nèi),或字段值必須來自另一個(gè)表等)使用約束的目的是為了防止列出現(xiàn)非法數(shù)據(jù),以保證數(shù)據(jù)庫中數(shù)據(jù)的一致性和完整性。lSQL Server中有五種約束類型:check約束,default約束,primary key約束, foreign key約束,unique約束SQL Server 200057l添加約束的基本格式:lALTER TABLE 表名 ADD CONSTRAINT 約束名 約束類型 約束條件表達(dá)式刪除約束的基本格式: ALTER TABLE 表名 drop CONSTRAINT 約束名SQL

41、Server 200058一一. check約束約束lCHECK(檢查)約束:用來檢查字段值所允許的范圍, CHECK約束通過限制列允許存放的數(shù)據(jù)值來實(shí)現(xiàn)域的完整性,它使用一個(gè)邏輯表達(dá)式來判斷列中數(shù)據(jù)值的合法性。如,一個(gè)字段只能輸入整數(shù),而且限定在0-100的整數(shù),以此來保證域的完整性。l可以使用企業(yè)管理器或T-SQL語句來操作.SQL Server 200059一一. check約束約束l(1)創(chuàng)建check約束lALTER TABLE 表名 ADD CONSTRAINT 約束名 CHECK (邏輯表達(dá)式)【例4.17】 使用T-SQL語句為stud_info創(chuàng)建check約束use stu

42、dentalter table stud_infoadd constraint 性別 check (gender=男or gender=女)SQL Server 200060一一. check約束約束【例】為stud_info創(chuàng)建check約束,使得mark值在300700之間l(2)刪除check約束 ALTER TABLE 表名 Drop constraint 約束名l【例4.17】刪除剛剛創(chuàng)建的check約束:use studentalter table stud_infoadd constraint check_mark check (mark=300 and mark=700)alt

43、er table stud_infodrop constraint check_mark SQL Server 200061二二. default約束約束l DEFAULT(默認(rèn))約束:向數(shù)據(jù)表添加記錄時(shí),有時(shí)可能不能確切知道這條新記錄中某個(gè)字段的值,有時(shí)甚至不能肯定這個(gè)字段是否有值。如果該字段又允許為空時(shí),當(dāng)然可以將空值賦給該字段。但有時(shí)侯可能不希望字段的值為空,這時(shí)解決方案之一是為該字段設(shè)定一個(gè)默認(rèn)值,即DEFAULT約束。約束可以在創(chuàng)建表時(shí)設(shè)置,也可以在創(chuàng)建表以后通過修改表結(jié)構(gòu)的方法來設(shè)置。l約束的設(shè)置方法有兩種:一種是使用企業(yè)管理器。另一種是在查詢分析器中使用ALTERTABLE語句。

44、 SQL Server 200062二二. default約束約束l 添加黙認(rèn)約束的語法格式為: ALTER TABLE 表名 ADD CONSTRAINT 約束名 DEFAULT 默認(rèn)值 FOR 列名l刪除默認(rèn)約束的語法: ALTER TABLE 表名 Drop constraint 約束名SQL Server 200063二二. default約束約束l【例4.18】創(chuàng)建default約束,使得gender的默認(rèn)值為男l(wèi)刪除這個(gè)default約束的語句:alter table stud_infoadd constraint de_gender default 男for genderalte

45、r table stud_infodrop constraint de_genderSQL Server 200064三三. primary key約束約束lPRIMARY KEY(主鍵)約束: 如果表中一列或多列的組合的值能唯一標(biāo)識這個(gè)表的每一行,則這個(gè)列或列的組合可以作為表的主鍵。l當(dāng)創(chuàng)建或修改表時(shí),可以通過定義PRIMARYKEY約束來創(chuàng)建表的主鍵。當(dāng)為表指定PRIMARYKEY約束時(shí),SQL Server自動為主鍵列創(chuàng)建唯一索引,以確保數(shù)據(jù)的唯一性。l每個(gè)表只能有一個(gè)主鍵,且IMAGE和TEXT類型的列不能被指定為主關(guān)鍵字,也不允許指定主鍵列有NULL屬性。SQL Server 200

46、065三三. primary key約束約束l1通過企業(yè)管理器完成添加、刪除和修改主鍵的操作 l2使用Transact-SQL語句設(shè)置主鍵約束 ALTER TABLE 表名 ADD CONSTRAINT 約束名 PRIMARY KEY (,n) SQL Server 200066三三. primary key約束約束l【例4.19】創(chuàng)建主鍵約束,將stud_id列和name列設(shè)為主鍵l刪除該主鍵約束的語句:alter table stud_infoadd constraint pk_studprimary key (stud_id,name)alter table stud_infodrop

47、constraint pk_studSQL Server 200067四四. foreign key約束約束lFOREIGN KEY(外鍵)約束:外鍵約束用于建立和加強(qiáng)兩個(gè)數(shù)據(jù)表之間數(shù)據(jù)的相關(guān)性,限制外鍵的取值必須是主表的主鍵值??梢詫⒈碇兄麈I值的一列或多列添加到另一張表中,以創(chuàng)建兩張表之間的鏈接。這些列就稱為第二張表的外鍵.l建立外鍵的關(guān)鍵是某列必須是兩張表中的同名,同數(shù)據(jù)類型的列,且該列為一張表的主鍵,該列為另一張表的外鍵SQL Server 200068四四. foreign key約束約束lFOREIGN KEY約束指定某一個(gè)列或一組列作為外部鍵,其中,包含外部鍵的表稱為從表,包含外部

48、鍵所引用的主鍵或唯一鍵的表稱主表。l系統(tǒng)保證從表在外部鍵上的取值要么是主表中某一個(gè)主鍵值或唯一鍵值,要么取空值。以此保證兩個(gè)表之間的連接,確保了實(shí)體的參照完整性。(即:當(dāng)向含有外關(guān)鍵字的從表插入數(shù)據(jù)時(shí),如果與之相關(guān)聯(lián)的主表的列中無與插入的外關(guān)鍵字列值相同的值時(shí)系統(tǒng)會拒絕插入數(shù)據(jù).)SQL Server 200069四四. foreign key約束約束l一.用企業(yè)管理器創(chuàng)建外鍵l二.用T-SQL語句 添加外關(guān)鍵字約束的語法格式為: ALTER TABLE 表名 ADD CONSTRAINT 約束名 FOREIGN KEY () REFERENCES 引用表名SQL Server 200070a

49、lter table lesson_infoadd constraint pk_course_id primary key (course_id)alter table stud_gradeadd constraint fk_course_id foreign key (course_id) references lesson_info(course_id)【例例4.20】 為為stud_grade表建立名為表建立名為fk_course_id的外的外鍵約束鍵約束,外鍵外鍵fk_course_id參考表參考表lesson_info中的主鍵中的主鍵course_idSQL Server 200071五五. unique約束約束l唯一性約束(UNIQUE):指定一個(gè)或多個(gè)列的組合的值具有唯一性,以防止在列中輸入重復(fù)的值。唯一性約束指定的列可以有NULL屬性。由于主關(guān)鍵字值是具有唯一性的,因此主關(guān)鍵字列不能再設(shè)定唯一性約束。在表的“屬性”對話框中的“索引/鍵”選項(xiàng)卡中可定義唯一性約束。l唯一鍵允許為空,但系統(tǒng)為保證其唯一性,最多只可以出現(xiàn)一個(gè)NULL值。SQL Server 200072五五. unique約束約束l 添加唯一性約束的語法格式為: ALTER TABLE

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論