第3章 數(shù)據(jù)表和索引_第1頁
第3章 數(shù)據(jù)表和索引_第2頁
第3章 數(shù)據(jù)表和索引_第3頁
第3章 數(shù)據(jù)表和索引_第4頁
第3章 數(shù)據(jù)表和索引_第5頁
已閱讀5頁,還剩150頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第3 3章章 數(shù)據(jù)表和索引數(shù)據(jù)表和索引 本章主要內(nèi)容:本章主要內(nèi)容: SQL Server SQL Server數(shù)據(jù)表數(shù)據(jù)表 1 1創(chuàng)建數(shù)據(jù)表創(chuàng)建數(shù)據(jù)表 2 2對數(shù)據(jù)表的操作對數(shù)據(jù)表的操作 3 3索引索引 4 4創(chuàng)建和管理索引創(chuàng)建和管理索引 5 53.1 SQL Server 3.1 SQL Server 數(shù)據(jù)表數(shù)據(jù)表3.1.1 3.1.1 數(shù)據(jù)表數(shù)據(jù)表表的特點(diǎn):表的特點(diǎn):表是一個(gè)存儲(chǔ)數(shù)據(jù)的實(shí)體,具有唯一的名稱。表是一個(gè)存儲(chǔ)數(shù)據(jù)的實(shí)體,具有唯一的名稱。表由行和列組成。表由行和列組成。行和列的順序是任意的。行和列的順序是任意的。列名在表中的唯一性由列名在表中的唯一性由SQL ServerSQL

2、 Server強(qiáng)制實(shí)現(xiàn),行在表中的強(qiáng)制實(shí)現(xiàn),行在表中的唯一性通過增加列的關(guān)鍵字來實(shí)現(xiàn),在一個(gè)表中,沒有相唯一性通過增加列的關(guān)鍵字來實(shí)現(xiàn),在一個(gè)表中,沒有相同的兩行。同的兩行。 在在SQL Server 2000SQL Server 2000中,一個(gè)數(shù)據(jù)庫中最多可以創(chuàng)中,一個(gè)數(shù)據(jù)庫中最多可以創(chuàng)建建200200萬萬個(gè)表,用戶創(chuàng)建數(shù)據(jù)庫表時(shí),一個(gè)表至少有一個(gè)表,用戶創(chuàng)建數(shù)據(jù)庫表時(shí),一個(gè)表至少有一列,最多不超過列,最多不超過10241024個(gè)列。個(gè)列。 在一個(gè)表中,列名是唯一的,但一個(gè)數(shù)據(jù)庫中的不在一個(gè)表中,列名是唯一的,但一個(gè)數(shù)據(jù)庫中的不同表可以有相同名稱的列。同表可以有相同名稱的列。 在一個(gè)數(shù)據(jù)庫

3、中,可能有由不同用戶創(chuàng)建的表,由在一個(gè)數(shù)據(jù)庫中,可能有由不同用戶創(chuàng)建的表,由不同用戶創(chuàng)建的表可以具有相同的名稱。不同用戶創(chuàng)建的表可以具有相同的名稱。 在同一個(gè)數(shù)據(jù)庫的不同表中,可以有相同的字段,在同一個(gè)數(shù)據(jù)庫的不同表中,可以有相同的字段,但在同一個(gè)表中不允許有相同的字段,而且每個(gè)字段但在同一個(gè)表中不允許有相同的字段,而且每個(gè)字段都要求數(shù)據(jù)類型相同。都要求數(shù)據(jù)類型相同。 表的列名在同一個(gè)表中具有唯一性,同一列的數(shù)據(jù)表的列名在同一個(gè)表中具有唯一性,同一列的數(shù)據(jù)都屬于同一種數(shù)據(jù)類型。除了用列名和數(shù)據(jù)類型來指都屬于同一種數(shù)據(jù)類型。除了用列名和數(shù)據(jù)類型來指定列的屬性外,還可以定義其他屬性:定列的屬性外,

4、還可以定義其他屬性:NULLNULL、NOT NULLNOT NULL和和IDENTITYIDENTITY屬性。屬性。SQL Server 2000SQL Server 2000表的類型表的類型 l系統(tǒng)表系統(tǒng)表 同數(shù)據(jù)庫一樣,同數(shù)據(jù)庫一樣,SQL Server2000SQL Server2000中的表也分為中的表也分為系統(tǒng)表系統(tǒng)表和用戶表和用戶表。系統(tǒng)表存儲(chǔ)有關(guān)系統(tǒng)表存儲(chǔ)有關(guān)SQL ServerSQL Server系統(tǒng)行為信息的數(shù)據(jù),無系統(tǒng)行為信息的數(shù)據(jù),無論是系統(tǒng)數(shù)據(jù)庫還是用戶數(shù)據(jù)庫,都包含系統(tǒng)表。論是系統(tǒng)數(shù)據(jù)庫還是用戶數(shù)據(jù)庫,都包含系統(tǒng)表。用戶數(shù)據(jù)庫里的系統(tǒng)表是在創(chuàng)建數(shù)據(jù)庫時(shí)從用戶數(shù)據(jù)庫里

5、的系統(tǒng)表是在創(chuàng)建數(shù)據(jù)庫時(shí)從ModelModel系統(tǒng)系統(tǒng)數(shù)據(jù)庫中復(fù)制而來的。數(shù)據(jù)庫中復(fù)制而來的。系統(tǒng)表的表名都以系統(tǒng)表的表名都以“sys”sys”作前綴,且在企業(yè)管理器中作前綴,且在企業(yè)管理器中顯示時(shí)類型都標(biāo)有顯示時(shí)類型都標(biāo)有“系統(tǒng)系統(tǒng)”二字。二字。 l用戶表用戶表 用戶表是數(shù)據(jù)庫中真正存放用戶數(shù)據(jù)的用戶表是數(shù)據(jù)庫中真正存放用戶數(shù)據(jù)的“容器容器”,是數(shù),是數(shù)據(jù)庫設(shè)計(jì)的關(guān)鍵。據(jù)庫設(shè)計(jì)的關(guān)鍵。 SQL ServerSQL Server中的資料表分為中的資料表分為永久表和臨時(shí)表永久表和臨時(shí)表兩種。兩種。 永久表在創(chuàng)建后一直存儲(chǔ)在數(shù)據(jù)庫文件中,直至用永久表在創(chuàng)建后一直存儲(chǔ)在數(shù)據(jù)庫文件中,直至用戶刪除為止

6、。戶刪除為止。 而臨時(shí)表則在用戶退出或系統(tǒng)修復(fù)時(shí)被自動(dòng)刪除。而臨時(shí)表則在用戶退出或系統(tǒng)修復(fù)時(shí)被自動(dòng)刪除。 臨時(shí)表又分為臨時(shí)表又分為局部臨時(shí)表和全局臨時(shí)表局部臨時(shí)表和全局臨時(shí)表兩種;兩種;l 局部臨時(shí)表只能由創(chuàng)建它的用戶使用,在該用戶局部臨時(shí)表只能由創(chuàng)建它的用戶使用,在該用戶連接斷開時(shí),它被自動(dòng)刪除。連接斷開時(shí),它被自動(dòng)刪除。l 全局臨時(shí)表對系統(tǒng)當(dāng)前的所有連接用戶來說都是全局臨時(shí)表對系統(tǒng)當(dāng)前的所有連接用戶來說都是可用的,在使用它的最后一個(gè)會(huì)話結(jié)束時(shí)它被自動(dòng)刪可用的,在使用它的最后一個(gè)會(huì)話結(jié)束時(shí)它被自動(dòng)刪除。除。l 在創(chuàng)建表時(shí),系統(tǒng)根據(jù)當(dāng)前表名來確定是創(chuàng)建臨在創(chuàng)建表時(shí),系統(tǒng)根據(jù)當(dāng)前表名來確定是創(chuàng)建

7、臨時(shí)表還是永久表,臨時(shí)表的表名以時(shí)表還是永久表,臨時(shí)表的表名以# #開頭,除此之外開頭,除此之外為永久表。為永久表。局部臨時(shí)表表名開頭包含一個(gè)局部臨時(shí)表表名開頭包含一個(gè)# #號,而全號,而全局臨時(shí)表的表名開頭包含兩個(gè)局臨時(shí)表的表名開頭包含兩個(gè)# #號。號。3.1.2 3.1.2 表的設(shè)計(jì)表的設(shè)計(jì)設(shè)計(jì)數(shù)據(jù)庫時(shí),應(yīng)先確定需要什么樣的數(shù)據(jù)表、各數(shù)據(jù)設(shè)計(jì)數(shù)據(jù)庫時(shí),應(yīng)先確定需要什么樣的數(shù)據(jù)表、各數(shù)據(jù)表中都有哪些數(shù)據(jù)、各個(gè)表之間的關(guān)系以及用戶對各個(gè)表數(shù)表中都有哪些數(shù)據(jù)、各個(gè)表之間的關(guān)系以及用戶對各個(gè)表數(shù)據(jù)的存取權(quán)限等。據(jù)的存取權(quán)限等。在創(chuàng)建和操作數(shù)據(jù)表的過程中,將對數(shù)據(jù)表進(jìn)行更為細(xì)在創(chuàng)建和操作數(shù)據(jù)表的過程

8、中,將對數(shù)據(jù)表進(jìn)行更為細(xì)致的設(shè)計(jì)。致的設(shè)計(jì)。 設(shè)計(jì)時(shí)應(yīng)注意以下內(nèi)容設(shè)計(jì)時(shí)應(yīng)注意以下內(nèi)容: : 表所包含的數(shù)據(jù)類型。表所包含的數(shù)據(jù)類型。 表的各列及每一列的數(shù)據(jù)類型。表的各列及每一列的數(shù)據(jù)類型。哪一列或哪幾列的組合為主鍵。哪一列或哪幾列的組合為主鍵。 哪些列允許空值。哪些列允許空值。 是否要使用約束、默認(rèn)設(shè)置等來限制列。是否要使用約束、默認(rèn)設(shè)置等來限制列。 是否要設(shè)置外鍵約束表與表之間的聯(lián)系。是否要設(shè)置外鍵約束表與表之間的聯(lián)系。 哪里需要索引,所需索引的類型。哪里需要索引,所需索引的類型。 3.1.3 3.1.3 數(shù)據(jù)類型數(shù)據(jù)類型SQL Server 2000 SQL Server 2000 的

9、數(shù)據(jù)類型分為基本數(shù)據(jù)類型和用戶定的數(shù)據(jù)類型分為基本數(shù)據(jù)類型和用戶定義數(shù)據(jù)類型二種。義數(shù)據(jù)類型二種。系統(tǒng)數(shù)據(jù)類型是系統(tǒng)數(shù)據(jù)類型是SQL ServerSQL Server系統(tǒng)固有的,可直接使用的數(shù)系統(tǒng)固有的,可直接使用的數(shù)據(jù)類型據(jù)類型; ;用戶定義數(shù)據(jù)類型是基于系統(tǒng)數(shù)據(jù)類型和有關(guān)參數(shù)修改整用戶定義數(shù)據(jù)類型是基于系統(tǒng)數(shù)據(jù)類型和有關(guān)參數(shù)修改整合而來,用于增強(qiáng)基本數(shù)據(jù)類型的功能,或方便用戶在多合而來,用于增強(qiáng)基本數(shù)據(jù)類型的功能,或方便用戶在多個(gè)列中設(shè)置的數(shù)據(jù)類型和參數(shù)保持一致。個(gè)列中設(shè)置的數(shù)據(jù)類型和參數(shù)保持一致。1.1.常用系統(tǒng)數(shù)據(jù)類型常用系統(tǒng)數(shù)據(jù)類型 (1 1)數(shù)字類型)數(shù)字類型 數(shù)字類型數(shù)據(jù)只包含數(shù)

10、字類型數(shù)據(jù)只包含數(shù)字和正負(fù)號數(shù)字和正負(fù)號(對非整型還有?。▽Ψ钦瓦€有小數(shù)點(diǎn)),可進(jìn)行算術(shù)運(yùn)算或直接放入表達(dá)式中。數(shù)點(diǎn)),可進(jìn)行算術(shù)運(yùn)算或直接放入表達(dá)式中。數(shù)字類型數(shù)據(jù)包括數(shù)字類型數(shù)據(jù)包括整型數(shù)據(jù)、小數(shù)數(shù)據(jù)和浮點(diǎn)數(shù)據(jù)整型數(shù)據(jù)、小數(shù)數(shù)據(jù)和浮點(diǎn)數(shù)據(jù)三種。三種。l整型數(shù)據(jù)整型數(shù)據(jù) 整型數(shù)據(jù)由負(fù)整數(shù)或正整數(shù)組成,如整型數(shù)據(jù)由負(fù)整數(shù)或正整數(shù)組成,如 -15 -15、0 0、5 5 和和 2509 2509。在在SQL Server 2000 SQL Server 2000 中,整型數(shù)據(jù)使用中,整型數(shù)據(jù)使用 bigintbigint、intint、smallintsmallint、tinyinttinyi

11、nt 和和bitbit數(shù)據(jù)類型存儲(chǔ)。數(shù)據(jù)類型存儲(chǔ)。存儲(chǔ)數(shù)據(jù)大小依次為:存儲(chǔ)數(shù)據(jù)大小依次為:bigintbigint數(shù)據(jù)類型數(shù)據(jù)類型 intint數(shù)據(jù)類型數(shù)據(jù)類型 smallintsmallint數(shù)據(jù)類型數(shù)據(jù)類型 tinyinttinyint數(shù)據(jù)類型數(shù)據(jù)類型bit bit 數(shù)據(jù)類型只能包括數(shù)據(jù)類型只能包括 0 0 或或 1 1??梢杂谩?梢杂?bit bit 數(shù)據(jù)類數(shù)據(jù)類型表示型表示TRUETRUE或或FALSEFALSE、YESYES或或NONO這樣的邏輯數(shù)據(jù)。這樣的邏輯數(shù)據(jù)。l小數(shù)數(shù)據(jù)小數(shù)數(shù)據(jù) 在在 SQL ServerSQL Server中,帶小數(shù)的數(shù)據(jù)使用中,帶小數(shù)的數(shù)據(jù)使用 decim

12、al decimal 或或 numericnumeric 數(shù)據(jù)類型存儲(chǔ)。數(shù)據(jù)類型存儲(chǔ)。這種數(shù)字類型的描述,一般要用圓括號內(nèi)的數(shù)字指出這種數(shù)字類型的描述,一般要用圓括號內(nèi)的數(shù)字指出精度和小數(shù)位數(shù)。如需要一個(gè)精度為精度和小數(shù)位數(shù)。如需要一個(gè)精度為7 7,小數(shù)位數(shù)為,小數(shù)位數(shù)為3 3的帶小數(shù)類型,可描述為的帶小數(shù)類型,可描述為 dicimal(7,3) dicimal(7,3) 或或 numeric(7,3) numeric(7,3) 。在在 SQL ServerSQL Server中,中,numericnumeric 數(shù)據(jù)類數(shù)據(jù)類型等價(jià)于型等價(jià)于 decimal decimal 數(shù)據(jù)類型。數(shù)據(jù)類型

13、。l浮點(diǎn)數(shù)據(jù)浮點(diǎn)數(shù)據(jù) 浮點(diǎn)數(shù)據(jù)包括按二進(jìn)制計(jì)數(shù)系統(tǒng)所能提供的最大精度浮點(diǎn)數(shù)據(jù)包括按二進(jìn)制計(jì)數(shù)系統(tǒng)所能提供的最大精度保留的數(shù)據(jù)。保留的數(shù)據(jù)。在在 SQL Server SQL Server 中,浮點(diǎn)數(shù)據(jù)以中,浮點(diǎn)數(shù)據(jù)以 floatfloat(雙精度)和雙精度)和realreal(單精度)數(shù)據(jù)類型存儲(chǔ)。單精度)數(shù)據(jù)類型存儲(chǔ)。由于在實(shí)際使用中,對大多數(shù)使用浮點(diǎn)數(shù)據(jù)類型的應(yīng)由于在實(shí)際使用中,對大多數(shù)使用浮點(diǎn)數(shù)據(jù)類型的應(yīng)用程序,指定的精確值與近似值之間的差異并不明顯,用程序,指定的精確值與近似值之間的差異并不明顯,且浮點(diǎn)類型的字段不適宜進(jìn)行大小比較,所以應(yīng)盡可且浮點(diǎn)類型的字段不適宜進(jìn)行大小比較,所以應(yīng)盡

14、可能使用能使用decimaldecimal或或numericnumeric類型而避免用浮點(diǎn)數(shù)據(jù)類型類型而避免用浮點(diǎn)數(shù)據(jù)類型。(2 2)貨幣類型)貨幣類型 在在SQL Server 2000 SQL Server 2000 中使用中使用 money money 和和 smallmoneysmallmoney 數(shù)數(shù)據(jù)類型存儲(chǔ)貨幣數(shù)據(jù)。據(jù)類型存儲(chǔ)貨幣數(shù)據(jù)。貨幣數(shù)據(jù)存儲(chǔ)的精確度為四位小數(shù)。貨幣數(shù)據(jù)存儲(chǔ)的精確度為四位小數(shù)。如果數(shù)值超過了上述范圍(或需超過如果數(shù)值超過了上述范圍(或需超過4 4位小數(shù)的精度),位小數(shù)的精度),則可使用則可使用 decimal decimal 數(shù)據(jù)類型代替。數(shù)據(jù)類型代替。(3

15、 3)字符類型)字符類型 字符類型數(shù)據(jù)由字符類型數(shù)據(jù)由字母、數(shù)字和符號字母、數(shù)字和符號組成。組成。例如,例如,“928”“928”、“張三張三”、“(0“(0* *&(%&(%B99nhB99nh jkJjkJ”等。等。在在SQL Server 2000 SQL Server 2000 中,字符數(shù)據(jù)類型分為中,字符數(shù)據(jù)類型分為單字符串單字符串?dāng)?shù)據(jù)類型和雙字符串?dāng)?shù)據(jù)類型數(shù)據(jù)類型和雙字符串?dāng)?shù)據(jù)類型。 l單字節(jié)字符串單字節(jié)字符串?dāng)?shù)據(jù)類型:一個(gè)字符一個(gè)字節(jié)數(shù)據(jù)類型:一個(gè)字符一個(gè)字節(jié)定長定長charchar:空間不足截?cái)辔膊浚臻g多余空格填充;:空間不足截?cái)辔膊?,空間多余空格填充;變長變長varchar

16、varchar:空間不足截?cái)辔膊?,多余空間不填空格;:空間不足截?cái)辔膊浚嘤嗫臻g不填空格;l雙字節(jié)字符串雙字節(jié)字符串?dāng)?shù)據(jù)類型,數(shù)據(jù)類型,unicodeunicode字符類型字符類型(N(N代表國際代表國際語言語言National Language)National Language)一個(gè)字符一個(gè)字符/ /漢字占兩個(gè)字節(jié)。漢字占兩個(gè)字節(jié)。定長字符串定長字符串( (ncharnchar) ):空間不足截?cái)辔膊?,空間多:空間不足截?cái)辔膊?,空間多余空格填充;余空格填充;變長字符串變長字符串( (nvarcharnvarchar) ):空間不足截?cái)辔膊?,多余:空間不足截?cái)辔膊?,多余空間不填空格;空間不填

17、空格;變長字符串變長字符串( (ntextntext) ):存儲(chǔ)大小是所輸入字符:存儲(chǔ)大小是所輸入字符/ /漢字漢字個(gè)數(shù)的兩倍個(gè)數(shù)的兩倍( (以字節(jié)為單位以字節(jié)為單位) )。(4 4)日期時(shí)間類型)日期時(shí)間類型默認(rèn)時(shí)間是默認(rèn)時(shí)間是“00:00:00.000”“00:00:00.000”,默認(rèn)的日期是,默認(rèn)的日期是“1899-12-“1899-12-30”30”。在在SQL Server 2000 SQL Server 2000 中,日期和時(shí)間數(shù)據(jù)使用中,日期和時(shí)間數(shù)據(jù)使用 datetimedatetime 和和 smalldatetimesmalldatetime 數(shù)據(jù)類型:數(shù)據(jù)類型: dat

18、etimedatetime 類型存儲(chǔ)從類型存儲(chǔ)從17531753年年1 1月月1 1日至日至99999999年年1212月月3131日日的日期(每個(gè)數(shù)值要求的日期(每個(gè)數(shù)值要求8 8個(gè)字節(jié)的存儲(chǔ)空間)。個(gè)字節(jié)的存儲(chǔ)空間)。 smalldatetimesmalldatetime類型存儲(chǔ)從類型存儲(chǔ)從19001900年年1 1月月1 1日至日至20792079年年6 6月月6 6日的日期(每個(gè)數(shù)值要求日的日期(每個(gè)數(shù)值要求4 4個(gè)字節(jié)的存儲(chǔ)空間)。個(gè)字節(jié)的存儲(chǔ)空間)。(5 5)二進(jìn)制類型)二進(jìn)制類型在在SQL Server 2000SQL Server 2000中,二進(jìn)制數(shù)據(jù)使用中,二進(jìn)制數(shù)據(jù)使用b

19、inarybinary、varbinaryvarbinary和和imageimage數(shù)據(jù)類型存儲(chǔ)。數(shù)據(jù)類型存儲(chǔ)。binarybinary數(shù)據(jù)類型的列在每行中都是固定的長度(最多數(shù)據(jù)類型的列在每行中都是固定的長度(最多為為8 8KBKB)。)。varbinaryvarbinary類型的列所包含的位數(shù)可以根據(jù)實(shí)際存儲(chǔ)而類型的列所包含的位數(shù)可以根據(jù)實(shí)際存儲(chǔ)而變化(最多為變化(最多為8 8KBKB)。)。ImageImage類型的數(shù)據(jù)列可以用來存儲(chǔ)超過類型的數(shù)據(jù)列可以用來存儲(chǔ)超過8 8KBKB的二進(jìn)制數(shù)的二進(jìn)制數(shù)據(jù),如據(jù),如Microsoft WordMicrosoft Word文檔、文檔、Micro

20、soft ExcelMicrosoft Excel電子表電子表格、包含位圖的圖像、圖形交換格式格、包含位圖的圖像、圖形交換格式( (GIF)GIF)文件和聯(lián)合文件和聯(lián)合圖像專家組圖像專家組( (JPEG)JPEG)文件等。文件等。類型類型名稱名稱取值范圍取值范圍整數(shù)整數(shù)bigintbigint、intint、smallintsmallint、tinyinttinyint( (922922億億億億) 8) 8( (2121億億) 4) 4( (32768) 232768) 2(0-255) 1(0-255) 1位型位型BitBit由由0 0和和1 1表示真、假。表示真、假。貨幣型貨幣型money

21、money、smallmoneysmallmoney( (922922萬億萬億) )( (2121萬萬) ),精確到萬分之一。,精確到萬分之一。十進(jìn)制十進(jìn)制DecimalDecimal、NumericNumeric10103838-1-1,最大位數(shù),最大位數(shù)3838位位浮點(diǎn)數(shù)浮點(diǎn)數(shù)floatfloat、realreal( (1.79E+308) (1.79E+308) (3.40E+38)3.40E+38)類型類型名稱名稱取值范圍取值范圍日期日期時(shí)間時(shí)間DatetimeDatetime、smalldatetimesmalldatetime1753.1.11753.1.1- -9999.12.3

22、19999.12.31, ,精確精確到到3.333.33毫秒毫秒1900.1.11900.1.1- -2079.12.312079.12.31,精確,精確到分鐘到分鐘單字節(jié)單字節(jié)字符字符char / char / varcharvarchar / / texttext定定/ /變長單字節(jié)字符變長單字節(jié)字符, ,最長最長80008000; UnicodeUnicode字符字符ncharnchar / / nvarcharnvarchar / / ntextntext定定/ /變長雙字節(jié)字符,最長變長雙字節(jié)字符,最長40004000; 二進(jìn)制二進(jìn)制數(shù)據(jù)數(shù)據(jù)Binary / Binary / var

23、binaryvarbinary / image/ image定定/ /變長二進(jìn)制數(shù)據(jù),最長變長二進(jìn)制數(shù)據(jù),最長80008000;變長二進(jìn)制數(shù)據(jù);變長二進(jìn)制數(shù)據(jù)特殊特殊類型類型timestamptimestampSQL SQL 活動(dòng)的先后順序。活動(dòng)的先后順序。uniqueidentifieruniqueidentifier全局唯一標(biāo)識全局唯一標(biāo)識 2.幾個(gè)特殊的系統(tǒng)數(shù)據(jù)類型幾個(gè)特殊的系統(tǒng)數(shù)據(jù)類型UniqueidentifierUniqueidentifier uniqueidentifieruniqueidentifier數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)類型存儲(chǔ)1616字節(jié)的二進(jìn)制值,字節(jié)的二進(jìn)制值,該值的使用

24、與全局唯一標(biāo)識符該值的使用與全局唯一標(biāo)識符 ( (GUID)GUID)一樣。一樣。GUIDGUID是一個(gè)唯一的二進(jìn)制數(shù)字,世界上的任何兩臺(tái)是一個(gè)唯一的二進(jìn)制數(shù)字,世界上的任何兩臺(tái)計(jì)算機(jī)都不會(huì)生成重復(fù)的計(jì)算機(jī)都不會(huì)生成重復(fù)的GUIDGUID值。值。timestamptimestamp 這種數(shù)據(jù)類型表現(xiàn)為自動(dòng)生成的二進(jìn)制數(shù),確保這些這種數(shù)據(jù)類型表現(xiàn)為自動(dòng)生成的二進(jìn)制數(shù),確保這些數(shù)在數(shù)據(jù)庫中是唯一的。存儲(chǔ)大小為數(shù)在數(shù)據(jù)庫中是唯一的。存儲(chǔ)大小為8 8字節(jié)。字節(jié)。每次插入或更新包含每次插入或更新包含timestamptimestamp列的行時(shí),列的行時(shí),timestamptimestamp列中的值均會(huì)更

25、新。這一屬性使我們可以依據(jù)該列的列中的值均會(huì)更新。這一屬性使我們可以依據(jù)該列的值判斷原數(shù)據(jù)是否已被改動(dòng)過。值判斷原數(shù)據(jù)是否已被改動(dòng)過。一個(gè)表只能有一個(gè)一個(gè)表只能有一個(gè)timestamptimestamp列。列。sql_variantsql_variant sql_variantsql_variant是一種可混合存儲(chǔ)是一種可混合存儲(chǔ)SQL ServerSQL Server支持的各種支持的各種數(shù)據(jù)類型(除數(shù)據(jù)類型(除texttext、ntextntext、imageimage、timestamptimestamp和和sql_variantsql_variant之外)數(shù)值的數(shù)據(jù)類型。之外)數(shù)值的數(shù)據(jù)

26、類型。一個(gè)數(shù)據(jù)表可以有任意多個(gè)一個(gè)數(shù)據(jù)表可以有任意多個(gè)sql_variantsql_variant列。列。sql_variantsql_variant的最大長度可達(dá)的最大長度可達(dá)80168016字節(jié)。字節(jié)。 3.用戶定義數(shù)據(jù)類型用戶定義數(shù)據(jù)類型 創(chuàng)建用戶定義的數(shù)據(jù)類型時(shí)必須提供以下三個(gè)參數(shù):創(chuàng)建用戶定義的數(shù)據(jù)類型時(shí)必須提供以下三個(gè)參數(shù):名稱、新數(shù)據(jù)類型所依據(jù)的系統(tǒng)數(shù)據(jù)類型和允許為空名稱、新數(shù)據(jù)類型所依據(jù)的系統(tǒng)數(shù)據(jù)類型和允許為空性性(數(shù)據(jù)類型是否允許空值)。(數(shù)據(jù)類型是否允許空值)。如果為空性未明確定義,系統(tǒng)將依據(jù)數(shù)據(jù)庫默認(rèn)設(shè)置如果為空性未明確定義,系統(tǒng)將依據(jù)數(shù)據(jù)庫默認(rèn)設(shè)置進(jìn)行指派。進(jìn)行指派。

27、用企業(yè)管理器創(chuàng)建用企業(yè)管理器創(chuàng)建-用戶定義數(shù)據(jù)類型用戶定義數(shù)據(jù)類型 啟動(dòng)企業(yè)管理器。啟動(dòng)企業(yè)管理器。 在樹狀結(jié)構(gòu)窗口中選擇要?jiǎng)?chuàng)建用戶定義數(shù)據(jù)類型的數(shù)在樹狀結(jié)構(gòu)窗口中選擇要?jiǎng)?chuàng)建用戶定義數(shù)據(jù)類型的數(shù)據(jù)庫,如據(jù)庫,如“teachdbteachdb”。在指定數(shù)據(jù)庫上單擊鼠標(biāo)右鍵,在指定數(shù)據(jù)庫上單擊鼠標(biāo)右鍵,在彈出的快捷菜單上,選擇在彈出的快捷菜單上,選擇“新建新建”命令中的命令中的“用戶用戶定義的數(shù)據(jù)類型(定義的數(shù)據(jù)類型(Y Y)”選項(xiàng)。選項(xiàng)。 3.3.2 2 創(chuàng)建數(shù)據(jù)表創(chuàng)建數(shù)據(jù)表3.2.1 3.2.1 準(zhǔn)備工作準(zhǔn)備工作創(chuàng)建用戶表的過程實(shí)際上是定義創(chuàng)建用戶表的過程實(shí)際上是定義表的結(jié)構(gòu)表的結(jié)構(gòu)和和表內(nèi)部

28、約束表內(nèi)部約束關(guān)系關(guān)系的過程。的過程。 表結(jié)構(gòu)包括表結(jié)構(gòu)包括表的名稱表的名稱,表中各字段的名稱、數(shù)據(jù)類型及,表中各字段的名稱、數(shù)據(jù)類型及其他其他屬性屬性。如該列是否允許為空(如該列是否允許為空(NULLNULL);是否有默認(rèn)值;是否有默認(rèn)值;是否是標(biāo)識(自動(dòng)編號)字段;是否是標(biāo)識(自動(dòng)編號)字段;是否是計(jì)算字段等;是否是計(jì)算字段等;除此之外的一個(gè)重要內(nèi)容是除此之外的一個(gè)重要內(nèi)容是實(shí)施數(shù)據(jù)完整性約束實(shí)施數(shù)據(jù)完整性約束(如設(shè)(如設(shè)置主鍵、外鍵、唯一性約束、檢查約束等),其中主鍵置主鍵、外鍵、唯一性約束、檢查約束等),其中主鍵和外鍵的設(shè)置也建立了表與表之間的聯(lián)系。和外鍵的設(shè)置也建立了表與表之間的聯(lián)系

29、。3.2.2 3.2.2 用企業(yè)管理器創(chuàng)建數(shù)據(jù)表用企業(yè)管理器創(chuàng)建數(shù)據(jù)表 1.1.表設(shè)計(jì)器表設(shè)計(jì)器2.2.建立數(shù)據(jù)表建立數(shù)據(jù)表見課本見課本P61P61頁表頁表3.1-3.1-表表3.5 3.5 ,分別為,分別為教學(xué)數(shù)據(jù)庫教學(xué)數(shù)據(jù)庫的的5 5個(gè)表結(jié)構(gòu)。個(gè)表結(jié)構(gòu)。3.3.標(biāo)識字段和計(jì)算字段標(biāo)識字段和計(jì)算字段 (1 1)標(biāo)識字段)標(biāo)識字段 每個(gè)表中可以有一個(gè)標(biāo)識字段,該字段的值是在插入每個(gè)表中可以有一個(gè)標(biāo)識字段,該字段的值是在插入記錄時(shí)由系統(tǒng)自動(dòng)生成的序列數(shù)字(如:記錄時(shí)由系統(tǒng)自動(dòng)生成的序列數(shù)字(如:1 1、2 2、3 3、4 4、或或100100、150150、200200、250250、),可以用

30、來標(biāo)),可以用來標(biāo)識表中每一行,或者說給每一行自動(dòng)編號。識表中每一行,或者說給每一行自動(dòng)編號。 SQL ServerSQL Server能夠在標(biāo)識字段自動(dòng)插入唯一值的序列數(shù)能夠在標(biāo)識字段自動(dòng)插入唯一值的序列數(shù)字。字。 將一個(gè)字段設(shè)置為標(biāo)識(將一個(gè)字段設(shè)置為標(biāo)識(IDENTITYIDENTITY)字段,該字段必字段,該字段必須是以下數(shù)據(jù)類型之一:須是以下數(shù)據(jù)類型之一: intint、bigintbigint、smallintsmallint、tinyinttinyint或小數(shù)位數(shù)為或小數(shù)位數(shù)為0 0的的 decimaldecimal、numericnumeric字段字段。標(biāo)識字段不允許為空,且不

31、能有默認(rèn)值。標(biāo)識字段不允許為空,且不能有默認(rèn)值。 在計(jì)算字段的公式中的表達(dá)式可以是非計(jì)算列的列名、在計(jì)算字段的公式中的表達(dá)式可以是非計(jì)算列的列名、常量、函數(shù)、變量,也可以是用一個(gè)或多個(gè)運(yùn)算符連常量、函數(shù)、變量,也可以是用一個(gè)或多個(gè)運(yùn)算符連接的上述元素的任意組合。接的上述元素的任意組合。圖3-7 設(shè)置計(jì)算字段(2)(2)計(jì)算字段計(jì)算字段 計(jì)算字段實(shí)際上是一個(gè)虛擬的字段,它并未將計(jì)算結(jié)計(jì)算字段實(shí)際上是一個(gè)虛擬的字段,它并未將計(jì)算結(jié)果實(shí)際存儲(chǔ)在表中,而只是在果實(shí)際存儲(chǔ)在表中,而只是在運(yùn)行運(yùn)行時(shí)才立即計(jì)算出結(jié)時(shí)才立即計(jì)算出結(jié)果。在設(shè)置計(jì)算字段時(shí),不需指定該字段的數(shù)據(jù)類型,果。在設(shè)置計(jì)算字段時(shí),不需指定

32、該字段的數(shù)據(jù)類型,保存表結(jié)構(gòu)時(shí),保存表結(jié)構(gòu)時(shí),SQL ServerSQL Server會(huì)自動(dòng)決定計(jì)算字段的數(shù)會(huì)自動(dòng)決定計(jì)算字段的數(shù)據(jù)類型。據(jù)類型。 由于計(jì)算字段的特性,決定了我們不可以直接向計(jì)算由于計(jì)算字段的特性,決定了我們不可以直接向計(jì)算字段中輸入數(shù)據(jù),也不能直接修改其中的數(shù)值。字段中輸入數(shù)據(jù),也不能直接修改其中的數(shù)值。4.4.設(shè)置約束設(shè)置約束l在創(chuàng)建表時(shí)的一項(xiàng)重要工作是為字段設(shè)置在創(chuàng)建表時(shí)的一項(xiàng)重要工作是為字段設(shè)置約束條件約束條件,從而保證數(shù)據(jù)完整性。從而保證數(shù)據(jù)完整性。 l實(shí)施數(shù)據(jù)完整性的主要工具是添加各種約束,除了規(guī)實(shí)施數(shù)據(jù)完整性的主要工具是添加各種約束,除了規(guī)定表中字段定表中字段是否

33、允許為空是否允許為空(NULLNULL)和和有無默認(rèn)值有無默認(rèn)值外,外,還包括以下幾種約束:還包括以下幾種約束: 主鍵約束主鍵約束 唯一性約束唯一性約束 檢查約束檢查約束 外鍵約束外鍵約束 (1 1)主鍵約束)主鍵約束(2)(2)設(shè)置唯一性約束設(shè)置唯一性約束 唯一性約束可保證非主鍵列(或幾個(gè)列的組合)的數(shù)據(jù)不唯一性約束可保證非主鍵列(或幾個(gè)列的組合)的數(shù)據(jù)不重復(fù)。重復(fù)。 (3)(3)設(shè)置設(shè)置CHECKCHECK約束約束在數(shù)據(jù)庫中設(shè)置檢查約束(在數(shù)據(jù)庫中設(shè)置檢查約束(CHECKCHECK約束)以限制輸入到列約束)以限制輸入到列中的值中的值. .CHECKCHECK約束通過邏輯表達(dá)式來判斷并控制列

34、中數(shù)據(jù)的有效約束通過邏輯表達(dá)式來判斷并控制列中數(shù)據(jù)的有效性。性。在表設(shè)計(jì)器中,選取要建立約束的列,這里選取在表設(shè)計(jì)器中,選取要建立約束的列,這里選取“score”score”(成績)列。成績)列。 在在“約束表達(dá)式約束表達(dá)式”文本框中輸入該列的約束條件,這是輸文本框中輸入該列的約束條件,這是輸入入score=0 and score=0 and score= 1980-01-01 and = 1980-01-01 and 出生日期出生日期 = = getdategetdate()()綁定規(guī)則綁定規(guī)則規(guī)則綁定到用戶的規(guī)則綁定到用戶的自定義類型自定義類型規(guī) 則 綁 定規(guī) 則 綁 定到表的列到表的列解

35、除綁定解除綁定刪除規(guī)則:刪除規(guī)則:drop rule drop rule 刪除規(guī)則之前,應(yīng)該首先解除該規(guī)則的所用綁定關(guān)系。刪除規(guī)則之前,應(yīng)該首先解除該規(guī)則的所用綁定關(guān)系。注意:注意:規(guī)則只允許在當(dāng)前數(shù)據(jù)庫中創(chuàng)建。規(guī)則只允許在當(dāng)前數(shù)據(jù)庫中創(chuàng)建。規(guī)則不能綁定到系統(tǒng)數(shù)據(jù)類型,如規(guī)則不能綁定到系統(tǒng)數(shù)據(jù)類型,如charchar和和intint等。等。規(guī)則不能綁定到數(shù)據(jù)類型為規(guī)則不能綁定到數(shù)據(jù)類型為imageimage、texttext或或timestamptimestamp的列。的列。use use 學(xué)生課程數(shù)據(jù)庫學(xué)生課程數(shù)據(jù)庫 gogo drop rule drop rule score_rulesc

36、ore_rule 注注: : 使用規(guī)則的限制條件使用規(guī)則的限制條件l 規(guī)則只能處理常量、函數(shù),不能用來查找表,也不能規(guī)則只能處理常量、函數(shù),不能用來查找表,也不能用來比較表中的列。用來比較表中的列。l 表中的每列只能與一條規(guī)則綁定。如果某列已經(jīng)綁定表中的每列只能與一條規(guī)則綁定。如果某列已經(jīng)綁定了一條規(guī)則,而又為該列綁定了一條新規(guī)則,那么舊規(guī)則了一條規(guī)則,而又為該列綁定了一條新規(guī)則,那么舊規(guī)則將被新規(guī)則代替。將被新規(guī)則代替。l 如果規(guī)則與某列綁定,那么規(guī)則不能被直接刪除,須如果規(guī)則與某列綁定,那么規(guī)則不能被直接刪除,須先解除規(guī)則與所有的列和數(shù)據(jù)庫類型綁定關(guān)系,然后才能先解除規(guī)則與所有的列和數(shù)據(jù)庫

37、類型綁定關(guān)系,然后才能用用drop ruledrop rule命令刪除。命令刪除。l 向系統(tǒng)中大量拷貝數(shù)據(jù)時(shí),規(guī)則不起作用。向系統(tǒng)中大量拷貝數(shù)據(jù)時(shí),規(guī)則不起作用。l 在使用規(guī)則時(shí),要確保規(guī)則中的值與其綁定列的數(shù)據(jù)在使用規(guī)則時(shí),要確保規(guī)則中的值與其綁定列的數(shù)據(jù)類型相一致。類型相一致。默認(rèn)默認(rèn)是一種數(shù)據(jù)庫對象,它與默認(rèn)值約束的功能一樣。是一種數(shù)據(jù)庫對象,它與默認(rèn)值約束的功能一樣。和規(guī)則一樣,默認(rèn)在創(chuàng)建后和規(guī)則一樣,默認(rèn)在創(chuàng)建后, ,必須和某一列綁定才能必須和某一列綁定才能生效生效。功能功能: : 創(chuàng)建稱為默認(rèn)值的對象。創(chuàng)建稱為默認(rèn)值的對象。 默認(rèn)值定義是限制列數(shù)據(jù)的首選,也是標(biāo)準(zhǔn)的方法,默認(rèn)值定義

38、是限制列數(shù)據(jù)的首選,也是標(biāo)準(zhǔn)的方法,因?yàn)槎x和表存儲(chǔ)在一起,當(dāng)除去表時(shí),將自動(dòng)除去因?yàn)槎x和表存儲(chǔ)在一起,當(dāng)除去表時(shí),將自動(dòng)除去默認(rèn)值定義。默認(rèn)值定義。 常量表達(dá)式只包含常量值的表達(dá)式,不能包含任何常量表達(dá)式只包含常量值的表達(dá)式,不能包含任何或其他數(shù)據(jù)庫對象的名稱?;蚱渌麛?shù)據(jù)庫對象的名稱。 可以使用任何常量、內(nèi)可以使用任何常量、內(nèi)建函數(shù)或數(shù)學(xué)表達(dá)式。建函數(shù)或數(shù)學(xué)表達(dá)式。2.2.默認(rèn)默認(rèn)(1 1)使用企業(yè)管理器創(chuàng)建默認(rèn))使用企業(yè)管理器創(chuàng)建默認(rèn) create defaultcreate default as as 例:例: 創(chuàng)建默認(rèn)創(chuàng)建默認(rèn) use use 學(xué)生信息學(xué)生信息 gogo create

39、 default create default time_defaulttime_default asas getdategetdate()()(2 2)使用)使用create defaultcreate default語句創(chuàng)建默認(rèn)語句創(chuàng)建默認(rèn)綁定默認(rèn)綁定默認(rèn)解除綁定解除綁定刪除綁定:刪除綁定:Drop default use use 學(xué)生學(xué)生信息信息 gogo drop default drop default 1 13.2.4 3.2.4 用用Transact-SQLTransact-SQL語句創(chuàng)建數(shù)據(jù)表語句創(chuàng)建數(shù)據(jù)表 一、創(chuàng)建數(shù)據(jù)表的一、創(chuàng)建數(shù)據(jù)表的Transact-SQLTransac

40、t-SQL語句語句: :CREATE TABLECREATE TABLE 數(shù)據(jù)庫名數(shù)據(jù)庫名. . 所有者所有者.| .| 所有者所有者. . 表名表名 ( ( ,. ,.n n ) ) 列名列名 列數(shù)據(jù)類型列數(shù)據(jù)類型 列寬度列寬度 DEFAULT DEFAULT 默認(rèn)值默認(rèn)值 , . .n n 的格式如下:的格式如下:用用CREATE TABLECREATE TABLE語句創(chuàng)建數(shù)據(jù)表語句創(chuàng)建數(shù)據(jù)表 【例【例3.3.1 1】用用CREATE TABLECREATE TABLE語句創(chuàng)建教師表語句創(chuàng)建教師表teacherteacher。USE USE teachdbteachdb / /* *打開數(shù)

41、據(jù)庫打開數(shù)據(jù)庫* */ /CREATE TABLE teacherCREATE TABLE teacher( t_no char (4) NOT NULL PRIMARY KEY, ( t_no char (4) NOT NULL PRIMARY KEY, / /* *用列約束將職工號定義為非空,主鍵用列約束將職工號定義為非空,主鍵* */ / t_name char (10),t_name char (10), t_sex char (2) DEFAULT t_sex char (2) DEFAULT 男男, /, /* *定義默認(rèn)值定義默認(rèn)值* */ / t_duty char (10)t

42、_duty char (10) )注意:在列定義時(shí),同一列的列名、數(shù)據(jù)類型和約束之間注意:在列定義時(shí),同一列的列名、數(shù)據(jù)類型和約束之間用空格分隔,但各列之間要用逗號用空格分隔,但各列之間要用逗號“,”分隔。分隔。 約束類型約束類型功功 能能 說說 明明primary keyprimary key保證主鍵的實(shí)體完整性保證主鍵的實(shí)體完整性主鍵的值不能有重復(fù)值,主鍵的值不能有重復(fù)值,且不為且不為nullnull。使用時(shí),。使用時(shí),往往在其上建立索引,往往在其上建立索引,以提高數(shù)據(jù)庫的性能。以提高數(shù)據(jù)庫的性能。uniqueunique保證非主鍵的實(shí)體完整保證非主鍵的實(shí)體完整性性非主鍵非主鍵( (即非主

43、關(guān)鍵字即非主關(guān)鍵字) )的值不能有重復(fù)值。的值不能有重復(fù)值。foreign keyforeign key保證參照完整性保證參照完整性一個(gè)表中的值,須參照一個(gè)表中的值,須參照另外一個(gè)表中的主鍵值。另外一個(gè)表中的主鍵值。checkcheck域完整性域完整性字段可以取值的范圍。字段可以取值的范圍。defaultdefault域完整性域完整性為字段賦予特定的值。為字段賦予特定的值。Not nullNot null實(shí)體完整性實(shí)體完整性非空約束。非空約束。二、二、 約束約束1 1、約束的定義、約束的定義 在在SQL ServerSQL Server系統(tǒng)中,約束的定義主要是通過系統(tǒng)中,約束的定義主要是通過c

44、reate create tabletable語句語句或或alter tablealter table語句來實(shí)現(xiàn)的。語句來實(shí)現(xiàn)的。 使用使用create tablecreate table語句,是在建立新表的同時(shí)定義了約語句,是在建立新表的同時(shí)定義了約束。束。 使用使用alter tablealter table語句,是向已經(jīng)存在的表中添加約束。語句,是向已經(jīng)存在的表中添加約束。 約束可以是約束可以是字段級字段級約束,也可以是約束,也可以是表級表級約束。約束。l 字段級約束是把約束放在某個(gè)字段列上的,字段級約束是把約束放在某個(gè)字段列上的,且約束僅對該字段列起作用;且約束僅對該字段列起作用;l

45、表級約束是把約束放在表中的多個(gè)字段列上。表級約束是把約束放在表中的多個(gè)字段列上。由列約束和表約束的格式來看,它們的功能是基本相同的。由列約束和表約束的格式來看,它們的功能是基本相同的。區(qū)別是區(qū)別是列約束在定義完指定列后直接定義列約束在定義完指定列后直接定義,而,而表約束是在表約束是在定義完所有列之后定義定義完所有列之后定義。使用使用create tablecreate table語句創(chuàng)建約束語句創(chuàng)建約束其語法形式為:其語法形式為:CREATE TABLE CREATE TABLE table_nametable_name( ( column_namecolumn_name data_typed

46、ata_type CONSTRAINT CONSTRAINT constraint_nameconstraint_name constraint_typeconstraint_type , ,n )n ) constraint_nameconstraint_name:要?jiǎng)?chuàng)建的約束的名字。若缺省約束名,要?jiǎng)?chuàng)建的約束的名字。若缺省約束名,則則SQL ServerSQL Server會(huì)自動(dòng)為約束提供一個(gè)名字。會(huì)自動(dòng)為約束提供一個(gè)名字。 constraint_typeconstraint_type:要?jiǎng)?chuàng)建的約束類型。要?jiǎng)?chuàng)建的約束類型。 使用使用alter tablealter table語句創(chuàng)建約束語

47、句創(chuàng)建約束 其語法形式為:其語法形式為:ALTER TABLE ALTER TABLE table_nametable_name WITH CHECK | WITH NOCHECK WITH CHECK | WITH NOCHECK ADD CONSTRAINT ADD CONSTRAINT constraint_nameconstraint_name constraint_typeconstraint_typeDrop constraint Drop constraint constraint_name WITH CHECK | WITH NOCHECK WITH CHECK | WITH

48、NOCHECK:新加入的約束對表中現(xiàn)有的:新加入的約束對表中現(xiàn)有的數(shù)據(jù)是否進(jìn)行檢查。數(shù)據(jù)是否進(jìn)行檢查。 CONSTRAINT CONSTRAINT constraint_nameconstraint_name:強(qiáng)制起索引文件名:強(qiáng)制起索引文件名 例例1 1:創(chuàng)建列級主鍵約束,:創(chuàng)建列級主鍵約束,。 use use 學(xué)生管理數(shù)據(jù)庫學(xué)生管理數(shù)據(jù)庫 gogo create table create table 學(xué)生表學(xué)生表1 1 ( ( 學(xué)號學(xué)號 varcharvarchar(9) not null (9) not null primary keyprimary key, , 姓名姓名 varcha

49、rvarchar(8),(8), 性別性別 varcharvarchar(2),(2), 年齡年齡 tinyinttinyint, , 所在院系所在院系 varcharvarchar(10),(10), 班級名班級名 varcharvarchar(10),(10), 入學(xué)年份入學(xué)年份 datetimedatetime ) )Primary keyPrimary key約束約束例例2 2:創(chuàng)建列級主鍵約束,:創(chuàng)建列級主鍵約束,。 use use 學(xué)生管理數(shù)據(jù)庫學(xué)生管理數(shù)據(jù)庫 gogo create table create table 學(xué)生表學(xué)生表2 2 ( (學(xué)號學(xué)號 varchar(9) v

50、archar(9) constraint constraint pk_pk_學(xué)號學(xué)號 not null primary key, not null primary key, 姓名姓名 varchar(8), varchar(8), 性別性別 varchar(2), varchar(2), 年齡年齡 tinyinttinyint, , 所在院系所在院系 varchar(10), varchar(10), 班級名班級名 varchar(10), varchar(10), 入學(xué)年份入學(xué)年份 datetimedatetime, , ) )Primary keyPrimary key約束約束例例3 3:

51、創(chuàng)建列級主鍵約束,有約束名。:創(chuàng)建列級主鍵約束,有約束名。 use use 學(xué)生管理數(shù)據(jù)庫學(xué)生管理數(shù)據(jù)庫 gogo create table create table 選課表選課表 ( (學(xué)號學(xué)號 varchar(9), varchar(9), 課程號課程號 varcharvarchar( (1010),), 學(xué)分學(xué)分 tinyinttinyint, ,constraint constraint pk_pk_學(xué)號學(xué)號課程號課程號 not null primary key( not null primary key(學(xué)號學(xué)號,課程號課程號) ) ) )Primary keyPrimary key

52、約束約束例例4:課程表以創(chuàng)建,但沒有設(shè)置主鍵,請將:課程表以創(chuàng)建,但沒有設(shè)置主鍵,請將課程號設(shè)置為主鍵。課程號設(shè)置為主鍵。ALTER TABLE ALTER TABLE 課程表課程表ADD PRIMARY KEY(ADD PRIMARY KEY(課程號課程號) )ALTER TABLE ALTER TABLE 課程表課程表ADD CONSTRANT PK_ADD CONSTRANT PK_課程號課程號 PRIMARY KEY(PRIMARY KEY(課程號課程號) )Primary keyPrimary key約束約束uniqueunique約束約束例:創(chuàng)建列級唯一約束,無約束名。例:創(chuàng)建列級

53、唯一約束,無約束名。 use use 學(xué)生管理數(shù)據(jù)庫學(xué)生管理數(shù)據(jù)庫gogocreate table create table 課程表課程表3 3 ( ( 課程號課程號 varchar(4) not null primary key,varchar(4) not null primary key, 課程名課程名 varchar(12) varchar(12) uniqueunique, , 選修課選修課 varchar(4) ,varchar(4) , ) )例:創(chuàng)建列級唯一約束,有約束名。例:創(chuàng)建列級唯一約束,有約束名。 use use 學(xué)生管理數(shù)據(jù)庫學(xué)生管理數(shù)據(jù)庫 gogo create t

54、able create table 課程表課程表3 3 ( ( 課程號課程號 varcharvarchar(4) not null primary key,(4) not null primary key, 課程名課程名 varcharvarchar(12),(12), 選修課選修課 varcharvarchar(4) ,(4) , constraint u_constraint u_課程名課程名 unique(unique(課程名課程名) ) ) )uniqueunique約束約束例:向表添加列級唯一約束,有約束名。例:向表添加列級唯一約束,有約束名。 use use 學(xué)生管理數(shù)據(jù)庫學(xué)生管理

55、數(shù)據(jù)庫 gogo alter alter table table 課程表課程表3 3 add constraint add constraint u_ u_課程名課程名 unique(unique(課程名課程名) )foreign key foreign key 約束約束use use 學(xué)生管理數(shù)據(jù)學(xué)生管理數(shù)據(jù)gogocreate table create table 成績表成績表 ( ( 學(xué)號學(xué)號 varchar(9) varchar(9)constraint constraint fk_fk_學(xué)號學(xué)號 not null foreign key references not null for

56、eign key references 學(xué)生表學(xué)生表 ( (學(xué)號學(xué)號) ), , 課程號課程號 varchar(4) varchar(4) constraint constraint fk_fk_課程號課程號 not null foreign key references not null foreign key references 課程表課程表( (課程號課程號) ), ,constraint constraint pk_pk_學(xué)號學(xué)號_ _課程號課程號 primary key( primary key(學(xué)號學(xué)號, ,課程號課程號),), 成績成績 tinyinttinyint ) )例:

57、向表添加列級外鍵約束,有約束名。例:向表添加列級外鍵約束,有約束名。 use use 學(xué)生管理數(shù)據(jù)庫學(xué)生管理數(shù)據(jù)庫 gogo alter table alter table 成績表成績表1 1 with checkwith check add constraint add constraint fk_fk_課程號課程號1 foreign key(1 foreign key(課程號課程號) ) references references 課程表課程表1(1(課程號課程號) )default default 約束約束 當(dāng)用戶沒有為定義為當(dāng)用戶沒有為定義為defaultdefault約束的字段輸入數(shù)

58、據(jù)時(shí)約束的字段輸入數(shù)據(jù)時(shí), , 由由default default 約束提約束提供默認(rèn)的值。供默認(rèn)的值。 例:例:use use 學(xué)生數(shù)據(jù)庫學(xué)生數(shù)據(jù)庫gogocreate table create table 成績表成績表 ( (學(xué)號學(xué)號 varchar(9) varchar(9)constraint constraint fk_fk_學(xué)號學(xué)號 not null foreign key references not null foreign key references 學(xué)生表學(xué)生表( (學(xué)號學(xué)號),), 課程號課程號 varchar(4) varchar(4) constraint cons

59、traint fk_fk_課程號課程號 not null foreign key references not null foreign key references 課程表課程表( (課程號課程號),),constraint constraint pk_pk_學(xué)號學(xué)號_ _課程號課程號 primary key( primary key(學(xué)號學(xué)號, ,課程號課程號),), 成績成績 tinyinttinyintconstraint constraint d_d_成績成績 default 0 default 0 ) ) 例:創(chuàng)建列級核查約束,無約束名。例:創(chuàng)建列級核查約束,無約束名。use us

60、e 學(xué)生管理數(shù)據(jù)庫學(xué)生管理數(shù)據(jù)庫gogocreate table create table 成績表成績表1 1 ( ( 學(xué)號學(xué)號 varchar(9) varchar(9), , 課程號課程號 varchar(4), varchar(4), 成績成績 tinyinttinyint check(check(成績成績 between 0 and 100) between 0 and 100) ) ) checkcheck約束約束例:向表添加列級核查約束,有約束名。例:向表添加列級核查約束,有約束名。 use use 學(xué)生管理數(shù)據(jù)庫學(xué)生管理數(shù)據(jù)庫 gogo alter table alter tab

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論