版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第5章管理數(shù)據(jù)表5.1數(shù)據(jù)表概述5.2SQLServer數(shù)據(jù)類型5.3在企業(yè)管理器中管理數(shù)據(jù)表5.4用Transact-SQL命令創(chuàng)建、修
改和刪除數(shù)據(jù)表結構
5.5用Transact-SQL命令操作表中數(shù)據(jù)5.6數(shù)據(jù)的完整性與約束
5.7設計數(shù)據(jù)表5.8實戰(zhàn)訓練小結
思考題
有了數(shù)據(jù)庫,還不能存儲數(shù)據(jù),只有建好了數(shù)據(jù)表,才可以存儲數(shù)據(jù)。有了數(shù)據(jù)表,還要對其中的數(shù)據(jù)進行管理,確保數(shù)據(jù)有效。本章任務:認識數(shù)據(jù)類型,學會創(chuàng)建數(shù)據(jù)表,管理表中數(shù)據(jù),驗證數(shù)據(jù)完整性。5.1數(shù)?據(jù)?表?概?述數(shù)據(jù)表是存放數(shù)據(jù)的容器,是數(shù)據(jù)庫中最受關注的對象。5.1.1數(shù)據(jù)表的概念數(shù)據(jù)表是一種二維數(shù)據(jù)對象,由行和列組成,用于存儲關系數(shù)據(jù)庫中的數(shù)據(jù),是數(shù)據(jù)庫中最重要的對象。整個數(shù)據(jù)庫中的全部數(shù)據(jù)都存儲在各個數(shù)據(jù)表中。例如,某個教育數(shù)據(jù)庫具有一個教師表、一個學生表和一個課程表。
(1)數(shù)據(jù)表中的一列稱為一個字段(Field)。
(2)每個字段的標題名稱稱為列名或字段名,如“姓名”就是該列的字段名,一個數(shù)據(jù)表中的字段名必須是唯一的。
(3)一個字段中存放同一類型的數(shù)據(jù),不同字段存放的數(shù)據(jù)類型可以不同。(4)一個字段中所存放的數(shù)據(jù)類型、數(shù)值大小及字段長度等稱為該字段的屬性值。數(shù)據(jù)表中的一行稱為一條記錄,由表中各個字段的數(shù)據(jù)項組成,是一組相關數(shù)據(jù)的集合。例如,學生表中的一條記錄是一個學生相關數(shù)據(jù)的集合。每個表都有一個主鍵,主鍵字段的數(shù)據(jù)可以唯一標識表中的一條記錄。例如,各個學生的編號是唯一的,可將“學號”字段指定為主鍵。設置了主鍵的數(shù)據(jù)表中,各條記錄是唯一的(即沒有完全相同的行)。
在數(shù)據(jù)庫中設計表的結構就是告訴數(shù)據(jù)庫系統(tǒng)該表中各列的屬性,包括各列的列標題(字段名稱)、每列中所要存放數(shù)據(jù)的類型(字段類型)、存放數(shù)據(jù)的大小或字符個數(shù)(字段長度)以及其他說明。在每個數(shù)據(jù)庫中都有系統(tǒng)表與用戶表。系統(tǒng)表是數(shù)據(jù)庫系統(tǒng)管理和存放系統(tǒng)中對象的容器,構成SQLServer的系統(tǒng)目錄的內(nèi)置表。系統(tǒng)表存儲SQLServer實例的所有元數(shù)據(jù),包括實例的配置信息及其所有數(shù)據(jù)庫和數(shù)據(jù)庫對象的定義。用戶可以查看系統(tǒng)表,但不應直接修改任何系統(tǒng)表。
下面簡要介紹幾個最重要的系統(tǒng)表。有關系統(tǒng)表的詳細信息,可以查看SQLServer的聯(lián)機叢書。
(1)?Sysobjects表:SQLServer的主系統(tǒng)表,出現(xiàn)在每個數(shù)據(jù)庫中。它對每個數(shù)據(jù)庫對象都有一行記錄。
(2)?Syscolumns表:出現(xiàn)在master數(shù)據(jù)庫和每個用戶自定義的數(shù)據(jù)庫中,對基表或者視圖的每個列和存儲過程中的每個參數(shù)都有一行記錄。用戶表是用戶建立的用于存放數(shù)據(jù)的表,例如學生表、教師表、課程表等。5.1.2查看數(shù)據(jù)表對于數(shù)據(jù)庫中已經(jīng)建立的數(shù)據(jù)表,經(jīng)常需要查看其有關信息,比如表內(nèi)的數(shù)據(jù)、表的屬性、定義、字段屬性和索引等。尤其重要的是查看表內(nèi)存放的數(shù)據(jù),另外,有時也需要查看表與其他數(shù)據(jù)庫對象之間的依賴關系。
1.查看表的定義在企業(yè)管理器中,打開指定的服務器和數(shù)據(jù)庫,展開表項,并在右欄的窗口中右擊要查看的表,如圖5-1所示,然后從彈出的快捷菜單中選擇“屬性”選項,將出現(xiàn)“表屬性”對話框,如圖5-2所示。在該對話框中,顯示該表的定義,如各個字段的名稱、類型、長度等屬性。注意,該對話框中顯示的屬性不能修改。單擊“權限”按鈕,還可以查看和修改表的權限。圖5-1選擇表格屬性圖5-2“表屬性”對話框2.查看表中的數(shù)據(jù)在企業(yè)管理器中,打開指定的數(shù)據(jù)庫并展開表項,在右欄的窗口中右擊要操作的表格,并從彈出的快捷菜單中選擇“打開表”選項。該選項還有三個子選項(如圖5-3所示):“返回所有行”(用于顯示所有記錄)、“返回首行”(用于顯示表的前N條記錄,N可以自己輸入,如圖5-4所示)、“查詢”(用于查詢具體某行記錄)。這里右擊學生表,并依次選擇“打開表”→“返回所有行”,將會出現(xiàn)顯示學生表中數(shù)據(jù)的對話框,如圖5-5所示。
3.查看表與其他數(shù)據(jù)庫對象的依賴關系在企業(yè)管理器中,右擊要查看的表格,從彈出的快捷菜單中選擇“所有任務”選項,再從子菜單中選擇“顯示相關性”選項,將出現(xiàn)“相關性”對話框,如圖5-6所示。該對話框的左欄用于顯示依賴于此表格的對象,右欄用于顯示此表格依賴的對象。圖5-3選擇打開表選項圖5-4輸入行數(shù)對話框圖5-5顯示表格數(shù)據(jù)對話框圖5-6“相關性”對話框4.利用系統(tǒng)存儲過程sp_help查看表的信息通過系統(tǒng)存儲過程sp_help可以獲得指定數(shù)據(jù)庫對象的信息,也可以獲得系統(tǒng)或者用戶定義的數(shù)據(jù)類型的信息。其語法形式如下:
sp_help[[@objname=]name]sp_help存儲過程只用于當前的數(shù)據(jù)庫,其中,[@objname=]name子句用于指定對象的名稱。如果不指定對象名稱,則sp_help存儲過程就會列出當前數(shù)據(jù)庫中的所有對象名稱、對象的所有者和對象的類型?!纠?-1】顯示當前數(shù)據(jù)庫中所有對象的信息。程序清單如下:
usecollegegoexecsp_help
命令運行后如圖5-7所示。
【例5-2】顯示確定的學生表的信息。程序清單如下:
usecollegegoexecsp_help學生表運行上述命令,將顯示學生表的類型、創(chuàng)建時間、字段名及其數(shù)據(jù)類型等信息。命令運行后如圖5-8所示。圖5-7當前數(shù)據(jù)庫中所有對象的信息圖5-8顯示學生表的相關信息5.2SQLServer數(shù)據(jù)類型數(shù)據(jù)表用來存儲數(shù)據(jù)。實際的數(shù)據(jù)千差萬別,不同類型的數(shù)據(jù)代表了各種不同的信息類型,需要不同的存儲格式。SQLServer2000提供了豐富的數(shù)據(jù)類型,包括系統(tǒng)數(shù)據(jù)類型和用戶自定義數(shù)據(jù)類型。規(guī)定數(shù)據(jù)表字段的數(shù)據(jù)類型不僅可以避免大的錯誤,而且還可以通過選擇合適的數(shù)據(jù)類型來充分利用表空間。5.2.1系統(tǒng)數(shù)據(jù)類型系統(tǒng)數(shù)據(jù)類型是SQLServer預先定義好的,可以直接使用。在實際使用中,SQLServer會自動限制每個系統(tǒng)數(shù)據(jù)類型的值的范圍。當插入數(shù)據(jù)表中的值超過了數(shù)據(jù)類型允許的范圍時,SQLServer就會報錯。SQLServer2000提供的系統(tǒng)數(shù)據(jù)類型有以下幾大類,共25種。1.整型數(shù)據(jù)類型整型數(shù)據(jù)類型是最常用的數(shù)據(jù)類型之一,它主要用來存儲整數(shù),可以直接進行數(shù)據(jù)運算,而不必使用函數(shù)轉(zhuǎn)換。
(1)?int(integer):每個int(或integer)數(shù)據(jù)類型值存儲在4個字節(jié)中,其中一個二進制位表示整數(shù)值的正負號,其他31個二進制位表示整數(shù)值的長度和大小。int數(shù)據(jù)類型可以存儲在-231(-2147483648)~231-1(2147483647)范圍之間的所有整數(shù)。
(2)?smallint:每個smallint類型的數(shù)據(jù)占用2個字節(jié)的存儲空間,其中一個二進制位表示整數(shù)值的正負號,其他15個二進制位表示整數(shù)值的長度和大小。smallint數(shù)據(jù)類型可以存儲在-215(-32768)~215-1(32767)范圍之間的所有整數(shù)。(3)?tinyint:每個tinyint類型的數(shù)據(jù)占用1個字節(jié)的存儲空間。Tinyint數(shù)據(jù)類型可以存儲在0~255范圍之間的所有整數(shù)。
2.浮點數(shù)據(jù)類型浮點數(shù)據(jù)類型用于存儲十進制小數(shù)。浮點數(shù)值的數(shù)據(jù)在SQLServer中采用只入不舍的方式進行存儲,即當(且僅當)要舍入的數(shù)是一個非零數(shù)時,對其保留的數(shù)字部分的最低有效位上的數(shù)值加1,并進行必要的進位。
(1)?real:每個real類型的數(shù)據(jù)占用4個字節(jié)的存儲空間。real類型可以存儲正的或者負的十進制數(shù)值,最大可以有7位精確位數(shù)。它的存儲范圍為-3.40E+38~3.40E+38。
(2)?float:可以精確到第15位小數(shù),其范圍為-1.79E-308~1.79E+308。如果不指定float數(shù)據(jù)類型的長度,則它占用8個字節(jié)的存儲空間。float數(shù)據(jù)類型也可以寫為float(n)的形式,n指定float數(shù)據(jù)的精度,n為1~15之間的整數(shù)值。當n取1~7時,實際是定義了一個real類型的數(shù)據(jù),系統(tǒng)用4個字節(jié)存儲它;當n取8~15時,系統(tǒng)認為其是float類型,用8個字節(jié)存儲它。
(3)?decimal和numeric:decimal數(shù)據(jù)類型和numeric數(shù)據(jù)類型完全相同,分為兩種是為了保持與ANSI標準兼容。這兩種數(shù)據(jù)類型可以提供小數(shù)所需的實際存儲空間,可以用2~17個字節(jié)來存儲-1038-1~1038-1之間的數(shù)值。也可以將其寫為decimal(p,s)的形式。其中,p表示可供存儲的數(shù)值的總位數(shù),默認設置為18;s表示小數(shù)點后的位數(shù),默認設置為0。注意:數(shù)值類型的總位數(shù)不包括小數(shù)點。例如,decimal(10,5),表示共有10位數(shù),其中整數(shù)5位,小數(shù)5位。3.字符數(shù)據(jù)類型字符數(shù)據(jù)類型也是SQLServer中最常用的數(shù)據(jù)類型之一,它可以用來存儲各種字母、數(shù)字符號和特殊符號。在使用字符數(shù)據(jù)類型時,需要用英文單引號或者雙引號將其括起來。
(1)?char:當用char數(shù)據(jù)類型存儲數(shù)據(jù)時,每個字符和符號占用1個字節(jié)的存儲空間。其定義形式為:char(n)。其中,n表示所有字符所占的存儲空間,n的取值范圍為1~8000。若不指定n值,則系統(tǒng)默認n的值為1。若輸入數(shù)據(jù)的字符串長度小于n,則系統(tǒng)自動在其后添加空格來填滿設定好的空間;若輸入的數(shù)據(jù)過長,則會截掉其超出部分。如果定義了一個char數(shù)據(jù)類型,而且允許該列為空,則該字段被當作varchar來處理。(2)?varchar:用varchar數(shù)據(jù)類型可以存儲長達8000個字符的可變長度字符串。和char類型不同的是,varchar類型的存儲空間根據(jù)輸入數(shù)據(jù)的實際長度而變化。其定義形式為:varchar(n)。例如,若定義varchar(20),則它對應的字段最多可以存儲20個字符,如果數(shù)據(jù)的實際長度不到20個字節(jié),則系統(tǒng)不會在其后添加空格,因此使用varchar類型可以節(jié)省空間。
(3)?nchar:nchar數(shù)據(jù)類型采用Unicode(統(tǒng)一字符編碼標準)字符集。Unicode標準用于支持國際上的非英語語種。每個Unicode字符用兩個字節(jié)作為一個存儲單位,所以Unicode數(shù)據(jù)類型所占用的存儲空間是非Unicode數(shù)據(jù)類型的兩倍。其定義形式為:nchar(n)。其中,n表示所有字符所占的存儲空間,n的取值范圍為1~4000。(4)?nvarchar:nvarchar是使用Unicode字符集的varchar數(shù)據(jù)類型。其定義形式為:nvarchar(n)。其中,n表示所有字符所占的存儲空間,n的取值范圍為1~4000。
4.日期和時間數(shù)據(jù)類型
(1)?datetime:用于存儲日期和時間的結合體,它可以存儲在公元1753年1月1日零時到公元9999年12月31日23時59分59秒之間的所有日期和時間,其精確度可達1/300s,即3.33ms。datetime數(shù)據(jù)類型所占用的存儲空間為8個字節(jié),其中前4個字節(jié)用于存儲基于1900年1月1日之前或者之后的日期數(shù),數(shù)值分正負,負數(shù)存儲的數(shù)值代表在基數(shù)日期之前的日期,正數(shù)表示在基數(shù)日期之后的日期,時間以子夜后的毫秒形式存儲在后面的4個字節(jié)中。(2)?smalldatetime:與datetime數(shù)據(jù)類型類似,但其日期時間范圍較小,它存儲在1900年1月1日到2079年6月6日之間的日期。smalldatetime數(shù)據(jù)類型使用4個字節(jié)存儲數(shù)據(jù),SQLServer2000用2個字節(jié)存儲日期1900年1月1日以后的天數(shù),時間以子夜后的分鐘數(shù)形式存儲在另外兩個字節(jié)中。smalldatetime的精度為1分鐘。
5.文本和圖形數(shù)據(jù)類型
(1)?text:用于存儲大容量文本數(shù)據(jù)。當要存儲的字符型數(shù)據(jù)非常巨大,char和varchar已經(jīng)不能滿足其存儲要求(大于8000字符)時,應該選擇text數(shù)據(jù)類型。text數(shù)據(jù)類型的容量可以在1~231-1(2147483647)個字節(jié)范圍之內(nèi),但實際應用時要根據(jù)硬盤的存儲空間而定。在定義text數(shù)據(jù)類型時,不需要指定數(shù)據(jù)長度,SQLServer會根據(jù)數(shù)據(jù)的長度自動為其分配空間。(2)?ntext:ntext數(shù)據(jù)類型采用Unicode標準字符集,用于存儲大容量文本數(shù)據(jù)。其理論上的容量為230-1(1073741823)個字節(jié)。
(3)?image:用于存儲照片、目錄圖片或者圖畫,其理論容量為231-1(2?147?483?647)個字節(jié)。
6.貨幣數(shù)據(jù)類型
(1)?money:用于存儲貨幣值,money數(shù)據(jù)類型的數(shù)值以一個正數(shù)部分和—個小數(shù)部分存儲在兩個4字節(jié)的整型值中,存儲范圍為-922?337?213?685?477.5808~922?337?213?685?477.580?7,精度為貨幣單位的萬分之一。
(2)?smallmoney:與money數(shù)據(jù)類型類似,但范圍比money數(shù)據(jù)類型小,其存儲范圍為-214748.3468~214748.3467。
當為money或smallmoney的表輸入數(shù)據(jù)時,必須在有效位置前面加一個貨幣單位符號(如$或其他貨幣單位的記號)。
7.位數(shù)據(jù)類型
bit稱為位數(shù)據(jù)類型,其數(shù)據(jù)有兩種取值:0和1。SQLServer在存儲bit數(shù)據(jù)類型時做了優(yōu)化。當一個表中有8個或更少的bit列時,用1個字節(jié)存放;當有9~16個bit列時,用2個字節(jié)存放。在輸入0以外的其他值時,系統(tǒng)均把它們當1看待。這種數(shù)據(jù)類型常作為邏輯變量使用,用來表示真、假或是、否等二值選擇。8.二進制數(shù)據(jù)類型
(1)?binary:其定義形式為binary(n),數(shù)據(jù)的存儲長度是固定的,即n+4個字節(jié),當輸入的二進制數(shù)據(jù)長度小于n時,余下部分填充0。二進制數(shù)據(jù)類型的最大長度(即n的最大值)為8000,常用于存儲圖像等數(shù)據(jù)。
(2)?varbinary:其定義形式為varbinary(n),數(shù)據(jù)的存儲長度是變化的,它是實際輸入數(shù)據(jù)的長度加上4字節(jié)。其他含義同binary。在輸入二進制常量時,需在該常量前面加一個前綴0x,后面是十六進制數(shù)。例如,二進制數(shù)據(jù)1aa2bb3cc4共40位5個字節(jié),可表示為0x1aa2bb3cc4。9.特殊數(shù)據(jù)類型
(1)?timestamp:也稱做時間戳數(shù)據(jù)類型。timestamp是一種自動記錄時間的數(shù)據(jù)類型,主要用于在數(shù)據(jù)表中記錄其數(shù)據(jù)的修改時間。它提供數(shù)據(jù)庫范圍內(nèi)的唯一值,反映數(shù)據(jù)庫中數(shù)據(jù)修改的相對順序,相當于一個單調(diào)上升的計數(shù)器。當用timestamp定義的列更新或者插入數(shù)據(jù)行時,此列的值會被自動更新,一個計數(shù)值將自動添加到此timestamp數(shù)據(jù)列中。
(2)?uniqueidentifier:也稱做唯一標識符數(shù)據(jù)類型。uniqueidentifier用于存儲一個16字節(jié)長的二進制數(shù)據(jù)類型,它是SQLServer根據(jù)計算機網(wǎng)絡適配器地址和CPU時鐘產(chǎn)生的全局唯一標識符代碼(GloballyUniqueIDentifier,GUID),因此該數(shù)據(jù)類型可以保證全球范圍內(nèi)不同的計算機所產(chǎn)生的標識符是唯一的。10.新增數(shù)據(jù)類型
SQLServer2000與SQLServer7相比,新增了3種數(shù)據(jù)類型:bigint、sql_variant和table。
(1)?bigint:用于存儲在-263(-9223372036854775807)~263-1(9223372036854775807)之間的所有整數(shù)。每個bigint類型的數(shù)據(jù)占用8個字節(jié)的存儲空間。
(2)?sql_variant:用于存儲除文本、圖形數(shù)據(jù)和timestamp類型數(shù)據(jù)外的其他任何合法的SQLServer數(shù)據(jù)。此數(shù)據(jù)類型極大地方便了SQLServer的開發(fā)工作。
(3)?table:用于存儲對表或者視圖處理后的結果集。5.2.2用戶自定義數(shù)據(jù)類型
SQLServer允許用戶自定義數(shù)據(jù)類型。用戶自定義數(shù)據(jù)類型是建立在SQLServer系統(tǒng)數(shù)據(jù)類型基礎上的。當用戶定義一種數(shù)據(jù)類型時,需要指定該類型的名稱、建立在其上的系統(tǒng)數(shù)據(jù)類型以及是否允許為空等。SQLServer為用戶提供了兩種方法來創(chuàng)建自定義數(shù)據(jù)類型。1.使用企業(yè)管理器創(chuàng)建用戶自定義數(shù)據(jù)類型在企業(yè)管理器中,打開指定的服務器和數(shù)據(jù)庫項,選擇要創(chuàng)建用戶自定義數(shù)據(jù)類型的數(shù)據(jù)庫,右擊該數(shù)據(jù)庫,從彈出的快捷菜單中選擇“新建”命令中的“用戶定義的數(shù)據(jù)類型”選項,出現(xiàn)“用戶定義的數(shù)據(jù)類型屬性”對話框,如圖5-9所示。在該對話框中,可以指定要定義的數(shù)據(jù)類型的名稱和要繼承的系統(tǒng)數(shù)據(jù)類型。對于某些數(shù)據(jù)類型,還可以選擇長度以及設置是否允許為NULL值等屬性。最后,單擊“確定”按鈕,即可把用戶自定義的數(shù)據(jù)類型對象添加到指定的數(shù)據(jù)庫中。圖5-9“用戶定義的數(shù)據(jù)類型屬性”對話框2.使用系統(tǒng)存儲過程創(chuàng)建用戶自定義數(shù)據(jù)類型系統(tǒng)存儲過程sp_addtype為用戶提供了用Transact-SQL語句創(chuàng)建自定義數(shù)據(jù)類型的途徑。其語法形式如下:
sp_addtype[@typename=]type,
[@phystype=]system_data_type[,[@nulltype=]'null_type'][,[@owner=]'owner_name']
命令中各參數(shù)的說明如下:●?type:指定用戶定義的數(shù)據(jù)類型的名稱?!?system_data_type:指定相應的系統(tǒng)提供的數(shù)據(jù)類型的名稱及定義。注意:不能使用timestamp數(shù)據(jù)類型,當對所使用系統(tǒng)的數(shù)據(jù)類型有額外說明時,需要用單引號將其括起來,例如'varchar(80)'。●null_type:?指定用戶自定義數(shù)據(jù)類型的NULL屬性,其值可以為NULL、NOTNULL或者NONULL。默認時,null_type與系統(tǒng)默認的NULL屬性相同?!駉wner_name:指定用戶自定義數(shù)據(jù)類型的所有者。用戶自定義數(shù)據(jù)類型的名稱在數(shù)據(jù)庫中應該是唯一的,但不同名稱的用戶自定義數(shù)據(jù)類型可以有相同的類型定義。
【例5-3】在pubs數(shù)據(jù)庫中自定義一個地址(address)數(shù)據(jù)類型。 程序清單如下:
usepubsgoexecsp_addtypeaddress,'varchar(60)'
其運行結果如下:
(所影響的行數(shù)為1行)
類型已添加。同樣,刪除用戶自定義數(shù)據(jù)類型的方法也有兩種,即利用企業(yè)管理器和系統(tǒng)存儲過程sp_droptype。
在企業(yè)管理器中,右擊用戶自定義的數(shù)據(jù)類型,從彈出的快捷菜單中選擇“刪除”選項,就會出現(xiàn)“除去對象”對話框,如圖5-10所示。在該對話框中可以單擊“顯示相關性”按鈕查看數(shù)據(jù)庫內(nèi)是否有對象依賴此數(shù)據(jù)類型,如果沒有,則可以單擊“全部除去”按鈕刪除該數(shù)據(jù)類型。使用系統(tǒng)存儲過程sp_droptype刪除自定義數(shù)據(jù)類型的語法如下:
sp_droptype[@typename=]'type'圖5-10“除去對象”對話框
【例5-4】在pubs數(shù)據(jù)庫中刪除自定義的地址(address)數(shù)據(jù)類型。程序清單如下:
usepubsgoexecsp_droptypeaddress
其運行結果如下:
(所影響的行數(shù)為1行)(所影響的行數(shù)為0行)
類型已除去。5.3在企業(yè)管理器中管理數(shù)據(jù)表5.3.1新建數(shù)據(jù)表結構在SQLServer2000中,每個數(shù)據(jù)庫里最多可以有20億個表。每個表最多可以設置1024個字段(列)。每條記錄最多占8060個字節(jié),不包括text、ntext和image字段。在企業(yè)管理器中創(chuàng)建college數(shù)據(jù)庫的“學生表”的步驟如下所述。
1.打開“表設計器”窗口打開企業(yè)管理器,展開企業(yè)管理器控制臺根目錄,找到college數(shù)據(jù)庫,右擊該數(shù)據(jù)庫中的表節(jié)點,在快捷菜單中單擊“新建表”命令,隨即打開“表設計器”窗口。2.輸入相關字段
(1)表設計器上半部分的表格用于描述表的結構,設計器表格的每一行描述數(shù)據(jù)表的一個字段,四列參數(shù)分別描述該字段的“列名”、“數(shù)據(jù)類型”、“長度”和“允許空”?!窳忻?字段名):同一表中的字段名必須唯一。列名可以由字母、漢字、數(shù)字和下劃線組成,不能以數(shù)字開頭,不能是關鍵字,長度不超過128個字符?!駭?shù)據(jù)類型:是一個下拉列表框,其中包括了當前數(shù)據(jù)庫的全部類型,也包括用戶自定義的數(shù)據(jù)類型,可直接從中選擇?!耖L度:對需要設置數(shù)據(jù)類型長度的字段輸入長度值。對于默認長度的類型,系統(tǒng)自動取固定長度,不允許用戶設置?!裨试S空:用“√”表示允許為空值,取消“√”表示不允許為空值。默認狀態(tài)為“√”,即允許為空,單擊鼠標可以切換。(2)“表設計器”下半部分用來描述字段的附加屬性。當鼠標選中哪個字段(標志塊中有三角標志)時,即可為該字段設置附加屬性?!衩枋觯狠斎朐撟侄蔚恼f明性文字?!衲J值:當輸入記錄時,如果該字段沒有輸入數(shù)據(jù),則自動使用該默認值。默認值可以在此直接輸入,也可事先單獨設置默認約束對象,在這個下拉列表中選取已定義好的默認值約束對象?!窬?、小數(shù)位數(shù):對numeric(p,s)和decimal(p,s)類型,需在此處設置精度p和小數(shù)位數(shù)s的值?!駱俗R(是/否):選擇是否將該字段設置為自動編號字段(identity,輸入記錄時系統(tǒng)根據(jù)“標識種子”和“遞增量”自動產(chǎn)生該字段的值)。只有bigint、int、smallint等整數(shù)類型的字段在清除了“允許空”的“√”后才可以設置為該項。●標識種子(初始值):為數(shù)據(jù)表第一條記錄的自動編號設置初始值,只有“標識”設為“是”才允許設置該項。例如,要給學生表加一個“序號”字段,并設為自動編號,若第一個學生的序號是10001,則可將該值設置為“標識種子”。●標識遞增量:設置自動編號字段每增加一條記錄時編號的增長量。標識遞增量默認為1。3.保存空數(shù)據(jù)表“學生表”結構輸入完畢后必須進行保存,單擊文件菜單的“保存”或工具欄中的“保存”按鈕,在彈出的“選擇名稱對話框”中輸入表名“學生表”(默認為TABLE1),單擊“確定”關閉表設計器,“學生表”的結構即設計創(chuàng)建完成,此時在數(shù)據(jù)庫中創(chuàng)建了一個沒有數(shù)據(jù)的空“學生表”。5.3.2修改數(shù)據(jù)表結構若沒有關閉“表設計器”,則可直接在設計器中反復設置和修改各個字段,為各個字段設置約束。若已經(jīng)關閉(創(chuàng)建完成),則可隨時再打開要修改表的“表設計器”,對表結構進行修改并設置各種約束,也可以使用SQL語句修改表的結構和創(chuàng)建約束。1.打開已有表的“表設計器”打開企業(yè)管理器,依次展開要修改的數(shù)據(jù)庫,單擊“表”對象展開數(shù)據(jù)表,選擇要修改的數(shù)據(jù)表,右鍵單擊,在彈出的快捷菜單中選擇“設計表”命令,即可打開該表的“表設計器”。
2.修改字段屬性在設計器中可以自由地修改各字段的“列名”、“數(shù)據(jù)類型”、“字段長度”、“允許空”以及其他附加屬性。
3.添加新字段如果在最后追加一個新字段,則將光標移到(或用鼠標單擊)最下面的空白行中,即可輸入一個定義新字段的新行。如果要在某個字段前插入一個新字段,則右擊插入位置的字段,在彈出的快捷菜單中選擇“插入列”,將會在該列之前出現(xiàn)一行空白,即可插入一個字段。4.刪除字段右擊要刪除的字段,在彈出的快捷菜單中選擇“刪除列”命令即可刪除該字段。
5.移動字段順序單擊要移動字段左方(最前端)的標志塊,出現(xiàn)一個“三角”標志,左鍵按下不松開,然后拖動該字段到所需要的位置再松開即可。
6.修改字段約束右擊要修改約束的字段,在彈出的快捷菜單中選擇“屬性”,即可在彈出的“屬性”對話框中設置或修改該字段的約束,具體方法將在5.6節(jié)介紹。
7.關閉“表設計器”修改完畢,單擊“保存”工具按鈕,保存修改后的表結構并關閉“表設計器”。5.3.3管理數(shù)據(jù)表數(shù)據(jù)
(1)在企業(yè)管理器中,打開指定的數(shù)據(jù)庫并展開表格項,在右欄的窗口中右擊要操作的表格,并從彈出的快捷菜單中選擇“打開表”選項,選擇“返回所有行”,如圖5-11所示。
(2)在表末添加新數(shù)據(jù),如圖5-12所示。
(3)選擇表中已存在的數(shù)據(jù)進行修改,如圖5-13所示。
(4)選擇表中已存在的數(shù)據(jù)進行刪除,如圖5-14所示。圖5-11學生表信息圖5-12添加新數(shù)據(jù)后的學生表信息圖5-13修改后的學生表信息圖5-14刪除后的學生表信息5.4用Transact-SQL命令創(chuàng)建、修改和刪除數(shù)據(jù)表結構5.4.1創(chuàng)建數(shù)據(jù)表結構
1.利用Transact-SQL語言創(chuàng)建表使用CREATE命令創(chuàng)建表非常靈活,它允許對表設置幾種不同的選項,包括表名、存放位置和列的屬性等。其語法形式如下:
CREATETABLE
[database_name.[owner].|owner.]table_name
{<column_definition>
|column_nameAScomputed_column_expression
|<table_constraint>::=[CONSTRAINTconstraint_name]}|[{PRIMARYKEY|UNIQUE}[,...n]
][ON{filegroup|DEFAULT}]
[TEXTIMAGE_ON{filegroup|DEFAULT}]<column_definition>::={column_namedata_type}
[COLLATE<collation_name>]
[[DEFAULTconstant_expression]
|[IDENTITY[(seed,increment)[NOTFORREPLICATION]]]
]
[ROWGUIDCOL]
[<column_constraint>][,...n]
<column_constraint>::=[CONSTRAINTconstraint_name]
{[NULL|NOTNULL]
|[{PRIMARYKEY|UNIQUE}
[CLUSTERED|NONCLUSTERED]
[WITHFILLFACTOR=fillfactor]
[ON{filegroup|DEFAULT}]]
}|[[FOREIGNKEY]
REFERENCESref_table[(ref_column)]
[ONDELETE{CASCADE|NOACTION}]
[ONUPDATE{CASCADE|NOACTION}]
[NOTFORREPLICATION]
]
|CHECK[NOTFORREPLICATION]
(logical_expression)
<table_constraint>::=[CONSTRAINTconstraint_name]
{[{PRIMARYKEY|UNIQUE}
[CLUSTERED|NONCLUSTERED]
{(column[ASC|DESC][,...n])}
[WITHFILLFACTOR=fillfactor]
[ON{filegroup|DEFAULT}]]
|FOREIGNKEY
[(column[,...n])]
REFERENCESref_table[(ref_column[,...n])]
[ONDELETE{CASCADE|NOACTION}]
[ONUPDATE{CASCADE|NOACTION}]
[NOTFORREPLICATION]
|CHECK[NOTFORREPLICATION]
(search_conditions)
}其中,各參數(shù)的說明如下:●?database_name:用于指定所創(chuàng)建表的數(shù)據(jù)庫名稱。database_name必須是現(xiàn)有數(shù)據(jù)庫的名稱。如果不指定數(shù)據(jù)庫,則database_name默認為當前數(shù)據(jù)庫?!?owner:用于指定新建表的所有者的用戶名。owner必須是database_name所指定的數(shù)據(jù)庫中的現(xiàn)有用戶名。owner默認為當前注冊用戶名。●?table_name:用于指定新建表的名稱。表名必須符合標識符規(guī)則。對于數(shù)據(jù)庫來說,database_name、owner_name、object_name必須是唯一的。表名最多不能超過128個字符?!?column_name:用于指定新建表的列名?!?computed_column_expression:用于指定計算列的列值表達式?!馩N{filegroup|DEFAULT}:用于指定存儲表的文件組名。如果指定filegroup,則表將存儲在指定的文件組中。數(shù)據(jù)庫中必須存在該文件組。如果使用了DEFAULT選項,或者省略了ON子句,則新建的表會存儲在默認的文件組中?!?TEXTIMAGE_ON:用于指定text、ntext和image列的數(shù)據(jù)存儲的文件組。如果表中沒有text、ntext或image列,則不能使用TEXTIMAGE_ON。如果沒有指定TEXTIMAGE_ON子句,則text、ntext和image列的數(shù)據(jù)將與表存儲在相同的文件組中?!?data_type:用于指定列的數(shù)據(jù)類型。●?DEFAULT:用于指定列的默認值?!?constant_expression:用于指定列的默認值的常量表達式,可以為一個常量、NULL或系統(tǒng)函數(shù)。●?IDENTITY:用于將列指定為標識列?!?seed:用于指定標識列的初始值?!?increment:用于指定標識列的增量值。●NOTFORREPLICATION:用于指定列的IDENTITY屬性,當把從其他表中復制的數(shù)據(jù)插入到表中時不發(fā)生作用,即不生成列值,使得復制的數(shù)據(jù)行保持原來的列值?!?ROWGUIDCOL:用于將列指定為全局唯一標識符列?!?COLLATE:用于指定排序規(guī)則?!?column_constraint和table_constraint:用于指定列約束和表約束。
【例5-5】在college數(shù)據(jù)庫中創(chuàng)建一個學生表,在該數(shù)據(jù)表中,還定義了“性別”字段的默認值為“男”。創(chuàng)建該數(shù)據(jù)表的具體操作步驟如下:
(1)單擊“開始”→“程序”→“MicrosoftSQLServer”→“查詢分析器”,打開查詢分析器。(2)在查詢分析器的查詢窗口中輸入如下代碼:
--打開數(shù)據(jù)庫
USEcollegeGO--創(chuàng)建數(shù)據(jù)表
CREATETABLE學生表
--定義“學號”不可為空
(學號intnotnull,
--定義“身份證”不可為空身份證char(18)NOTNULL,班級編號varchar(25),
--定義“姓名”列不可為空姓名varchar(8)NOTNULL,
性別char(2)NOTNULLdefault'男',出生年月smalldatetime,電話varchar(50),地址varchar(50))(3)執(zhí)行該代碼。
(4)單擊“開始”→“程序”→“MicrosoftSQLServer”→“企業(yè)管理器”,打開企業(yè)管理器。
(5)展開相應的服務器和數(shù)據(jù)庫,展開數(shù)據(jù)庫college和表文件夾,從詳細列表中右擊數(shù)據(jù)表(即“學生表”),從快捷菜單中選擇“屬性”,此時將顯示如圖5-15所示的“表屬性”窗口。圖5-15“表屬性”窗口【例5-6】在數(shù)據(jù)庫college中創(chuàng)建一個課程表,表中各列的要求如表5-1所示。程序清單如下:
USEcollegeGOCREATETABLE課程表
(
課程號char(8)notnull,課程名稱varchar(20)notnull,課時tinyint,學分tinyint,備注varchar(50))GO表5-1課程表的建表要求5.4.2修改數(shù)據(jù)表結構修改數(shù)據(jù)表要使用的語句是ALTERTABLE。使用該語句修改數(shù)據(jù)表的語法如下:
ALTERTABLEtable{[ALTERCOLUMNcolumn_name{new_data_type[(precision[,scale])][COLLATE<collation_name>][NULL|NOTNULL]|{ADD|DROP}ROWGUIDCOL}
]|ADD
{[<column_definition>]|column_nameAScomputed_column_expression
}[,...n]|[WITHCHECK|WITHNOCHECK]ADD
{<table_constraint>}[,...n]|DROP
{[CONSTRAINT]constraint_name
|COLUMNcolumn}[,...n]|{CHECK|NOCHECK}CONSTRAINT{ALL|constraint_name[,...n]}|{ENABLE|BISABLE}TRIGGER{ALL|trigger_name[,…n]}其中,各部分代碼的具體功能如下:●?ALTERCOLUMN:用于修改數(shù)據(jù)表中字段的定義?!?ADD{[column_definition]|[column_nameAScomputed_column_expression]}:用于添加字段?!?<table_constraint:用于添加約束?!?DROPCOLUMNcolumn_name[,…n]:用于刪除字段。●?DROPCONSTRAINTconstraint_name[,...n]:用于刪除約束。在使用這些代碼時,需要將下列參數(shù)替換為相應的內(nèi)容,如表5-2所示。表5-2參數(shù)說明5.4.3刪除數(shù)據(jù)表結構刪除數(shù)據(jù)表使用DROPTABLE語句,其語法形式如下:
DROPTABLEtable[,…n]其中,table需要替換為要刪除的數(shù)據(jù)表名稱。利用下的語句我們可以刪除5.4.1節(jié)建立的學生表:
DROPTABLE學生表5.5用Transact-SQL命令操作表中數(shù)據(jù)5.5.1添加數(shù)據(jù)
INSERT語句用于向數(shù)據(jù)庫表或者視圖中加入一行數(shù)據(jù)。INSERT語句的基本語法格式如下:
INSERT[INTO]{table_name|view_name}[(column_list)]{VALUES({DEFAULT|NULL|expression}[,...n])|derived_table}
其中,各參數(shù)的說明如下:●?INTO:一個可選的關鍵字,使用這個關鍵字可以使語句的意義清晰。●?table_name:要插入數(shù)據(jù)的表名稱。●?view_name:要插入數(shù)據(jù)的視圖名稱。●?column_list:要插入數(shù)據(jù)的一列或多列的列表,說明INSERT語句只為指定的列插入數(shù)據(jù)。其他沒指定列的取值情況如下:如果該列具有IDENTITY屬性,則使用下一個增量標識值;如果該列具有默認值,則使用列的默認值;如果該列具有timestamp數(shù)據(jù)類型,則使用當前的時間戳值;如果該列允許為空,則使用空值。column_list的內(nèi)容必須用圓括號括起來,并且用逗號進行分隔。●?VALUES:插入的數(shù)據(jù)值的列表。注意:必須用圓括號將值列表括起來,并且數(shù)值的順序和類型要與column_list中的數(shù)據(jù)相對應。●?DEFAULT:使用默認值填充?!?NULL:使用空值填充。●?expression:常量、變量或表達式。表達式不能包含SELECT或EXECUTE語句。●?derived_table:任何有效的SELECT語句,它返回后將插入到表中的數(shù)據(jù)行。
【例5-7】利用INSERT語句向課程表中插入一些數(shù)據(jù)行,這些行只有部分列包含值。
程序清單如下:
USEcollegeGO--無省略插入語句
INSERTINTO課程表
(課程號,課程名稱,課時,學分)VALUES('059001','C語言',100,5)--部分省略插入語句
INSERT課程表VALUES('059002','高等數(shù)學',80,3)--多記錄插入語句
INSERTINTO課程表(課程號,課程名稱)SELECT課程號,課程名稱FROM課程表25.5.2修改數(shù)據(jù)
UPDATE語句用于修改數(shù)據(jù)庫表中特定記錄或者字段的值。其基本語法格式如下:
UPDATE{table_name|view_name}SETcolumn_name={expression|DEFAULT|NULL}[,…n][WHERE<search_condition>]
【例5-8】一個帶有WHERE條件的修改語句。程序清單如下:
USEcollegeGOUPDATE課程表
SET課程號='059004',課時='120'WHERE課程名稱='C語言'【例5-9】一個簡單的修改語句。程序清單如下:
USEcollegeGOUPDATE課程表
SET課程號='059005',課時='120'
說明:如果沒有WHERE子句,則UPDATE將會修改表中所有行的數(shù)據(jù)。5.5.3使用DELETE語句刪除數(shù)據(jù)
DELETE語句用于刪除數(shù)據(jù)庫表中的數(shù)據(jù)。其基本語法格式如下:
DELETE[FROM]{table_name|view_name}[WHERE<search_condition>]【例5-10】一個簡單的刪除語句,從學生表中刪除姓名為“王安”的學生。程序清單如下:
USEcollegeGODELETEFROM學生表
WHERE姓名='王安'【例5-11】一個沒有WHERE條件的刪除語句,刪除學生表的全部記錄。程序清單如下:
USEcollegeGODELETEFROM學生表說明:當不指定WHERE子句時,將刪除表中所有行的數(shù)據(jù)。5.5.4使用TRUNCATE語句刪除數(shù)據(jù)要清除表中的所有數(shù)據(jù),而只留下表格的定義,還可以使用TRUNCATE語句。與DELETE語句相比,TRUNCATE通常速度更快,因為TRUNCATE是不記錄日志的操作。其語句格式為:TRUNCATEtable_name【例5-12】使用TRUNCATE語句清空學生表中的數(shù)據(jù)。程序清單如下:
USEcollegeGOTRUNCATE學生表5.6數(shù)據(jù)的完整性與約束5.6.1完整性的概念數(shù)據(jù)完整性就是指存儲在數(shù)據(jù)庫中的數(shù)據(jù)正確無誤并且相關數(shù)據(jù)具有一致性。數(shù)據(jù)庫中是否存在完整的數(shù)據(jù),關系到數(shù)據(jù)庫系統(tǒng)能否真實地反映現(xiàn)實世界。例如,在“學生”表中學生的學號要具有唯一性,其性別只能是男或女,其所在系部、專業(yè)、班級必須是存在的,否則就會出現(xiàn)數(shù)據(jù)庫中的數(shù)據(jù)與現(xiàn)實不符的現(xiàn)象。如果數(shù)據(jù)庫中總存在不完整的數(shù)據(jù),那么它就沒有存在的必要了,因此實現(xiàn)數(shù)據(jù)的完整性在數(shù)據(jù)庫管理系統(tǒng)中十分重要。
根據(jù)數(shù)據(jù)完整性機制所作用的數(shù)據(jù)庫對象和范圍的不同,數(shù)據(jù)完整性可分為實體完整性、域完整性、參照完整性和用戶定義的完整性4種類型。
1.實體完整性這里的實體是指表中的記錄,一個實體就是表中的一條記錄。實體完整性要求在表中不能存在完全相同的記錄,而且每條記錄都要具有一個非空且不重復的主鍵值。這樣就可以保證數(shù)據(jù)所代表的任何事物都不存在重復,可以區(qū)分。例如,“學生”表中的學號必須唯一,并且不能為空,這樣就可以保證學生記錄的唯一性。實現(xiàn)實體完整性的方法主要有主鍵約束、唯一約束和指定IDENTITY屬性等。2.域完整性域完整性也可稱為列完整性。域完整性要求向表中指定列輸入的數(shù)據(jù)必須具有正確的數(shù)據(jù)類型、格式以及有效的數(shù)據(jù)范圍。例如,在“成績”表中,對學生成績列輸入數(shù)據(jù)時,不能出現(xiàn)字符,也不能輸入小于0或大于100的數(shù)值。實現(xiàn)域完整性的方法主要有CHECK約束、默認約束、非空定義、規(guī)則以及在建表時設置數(shù)據(jù)類型。3.參照完整性參照完整性又稱為引用完整性。參照完整性是指作用于有關聯(lián)的兩個或兩個以上的表,通過使用主鍵和外鍵或主鍵和唯一鍵之間的關系,使表中的鍵值在相關表中保持一致。例如,在“學生”表中的“班級編號”列的值必須是在“班級”表的“班級編號”列中存在的值,以防止在錄入學生記錄時將學生分配到一個不存在的班級中。又如,在成績表中的“學號”列不能輸入學生表中沒有的“學號”,以防止將成績記錄給不存在的學生。實現(xiàn)參照完整性的方法主要是外鍵約束。4.用戶定義的完整性用戶定義的完整性是應用領域需要遵守的約束條件,允許用戶定義不屬于其他任何完整性分類的特定業(yè)務規(guī)則。所有的完整性類型都支持用戶定義的完整性。約束是SQLServer提供的自動保持數(shù)據(jù)庫完整性的一種方法,它通過限制字段中數(shù)據(jù)、記錄中數(shù)據(jù)和表之間的數(shù)據(jù)來保證數(shù)據(jù)的完整性。在SQLServer2000中,約束有主鍵約束(PrimaryKeyConstraint)、唯一性約束(UniqueConstraint)、檢查約束(CheckConstraint)、默認約束(DefaultConstraint)、外鍵約束(ForeignKeyConstraint)、非空和自動編號。
約束可以分為表級約束和列級約束兩種:
(1)列級約束:列級約束是行定義的一部分,只能夠應用在一列上。
(2)表級約束:表級約束的定義獨立于列的定義,可以應用在一個表中的多列上。5.6.2主鍵約束主鍵能夠唯一地確定表中的每一條記錄,主鍵不能取空值。主鍵約束可以保證實體的完整性,是最重要的一種約束。如果表中有一列被指定為主鍵,則該列不允許指定為NULL屬性,且image和text類型的列不能被指定為主鍵。如果主鍵約束定義在多列上,則其中一列中的值可以重復,但所有列的組合值必須唯一。每個表最多只能有一個主鍵。
主鍵的添加、刪除和修改操作方法有兩種:企業(yè)管理器操作法和Transact-SQL語句操作法。
1.通過企業(yè)管理器完成添加、刪除和修改主鍵的操作在企業(yè)管理器中,右擊要操作的數(shù)據(jù)庫表,從彈出的快捷菜單中選擇“設計表”選項,如圖5-16所示,出現(xiàn)“設計表”對話框,如圖5-17所示。在該對話框中,選擇要設定為主鍵的字段。如果有多個字段作為主鍵,則在按住Ctrl鍵的同時,用鼠標單擊每個要選的字段,然后右擊選中的某個字段,從彈出的快捷菜單中選擇“設置主鍵”選項,如圖5-18所示?;蛘咄ㄟ^單擊工具欄上的按鈕來設定主鍵,被設定為主鍵的字段左端都有標志。圖5-16“設計表”選項圖5-17“設計表”對話框圖5-18“設置主鍵”選項
在企業(yè)管理器中既可以刪除已經(jīng)設定的主鍵,也可以設定其他字段為主鍵。右擊某個字段,從彈出的快捷菜單中選擇“屬性”選項,則出現(xiàn)“屬性”對話框。在該對話框中選擇“索引/鍵”選項卡,如圖5-19所示,在“選定的索引”選項欄中選擇主鍵的名稱,單擊“刪除”按鈕就可以刪除了。圖5-19“索引/鍵”選項卡2.使用Transact-SQL語句設置主鍵約束其語法形式如下:
CONSTRAINTconstraint_namePRIMARYKEY[CLUSTERED|NONCLUSTERED](column_name[,…n])
其中,各參數(shù)的說明如下:●?constraint_name:用于指定約束的名稱。約束的名稱在數(shù)據(jù)庫中應該是唯一的。如果不指定,則系統(tǒng)會自動生成一個約束名?!?CLUSTERED|NONCLUSTERED:用于指定索引的類型,即聚集索引或者非聚集索引,CLUSTERED為默認值?!?column_name:用于指定主鍵的列名。主鍵最多由16個列組成。
【例5-13】在數(shù)據(jù)庫college中創(chuàng)建一個班級表,并定義班級編號為主鍵。增加主鍵后,就限定了該記錄中不能插入編號相同的兩個或者多個數(shù)據(jù)信息,從而保證了表中的記錄信息是唯一的。.程序清單如下:
USEcollegeGOCREATETABLE班級表(
班級編號char(10)NOTNULLPRIMARYKEY,班級名稱char(20),班主任char(8),專業(yè)char(20),系部名稱char(20))
或者
USEcollegeGOCREATETABLE班級表(
班級編號char(10)NOTNULL,班級名稱char(20),班主任char(8),專業(yè)char(20),系部名稱char(20),
constraintcons_pkPRIMARYKEY(班級編號))5.6.3唯一性約束唯一性約束用于指定一個或多個列的組合值具有唯一性,以防止在列中輸入重復的值。如前所述,每個表中只能有一個主鍵,因此當表中已經(jīng)有一個主鍵值時,如果還要保證其他的標識符唯一,則可以使用唯一性約束。當使用唯一性約束時,需要考慮以下幾個因素:●使用唯一性約束的字段允許為空值?!褚粋€表中允許有多個唯一性約束?!窨梢园盐ㄒ恍约s束定義在多個字段上(單一字段不唯一,多個字段聯(lián)合起來是唯一的)?!裎ㄒ恍约s束用于在指定字段上強制創(chuàng)建一個唯一性索引。創(chuàng)建唯一性約束的方法通常有如下兩種。1.通過企業(yè)管理器完成創(chuàng)建和修改唯一性約束的操作其步驟如下:
(1)在企業(yè)管理器中,展開指定的服務器和要操作的數(shù)據(jù)庫,選擇“表格”選項,然后在右欄窗口中單擊選定的表格,并從彈出的菜單中選擇“設計表”選項,就出現(xiàn)“設計表”對話框。
(2)在該對話框中右擊某個字段,從彈出的快捷菜單中選擇“屬性”選項,則出現(xiàn)“屬性”對話框。
(3)在屬性對話框中選擇“索引/鍵”選項卡,然后單擊“新建”按鈕,在“列名”選項欄中選擇字段名稱,選擇復選框“創(chuàng)建UNIQUE”和“約束”。
(4)創(chuàng)建完成后單擊“關閉”按鈕。
(5)在表格編輯對話框中選擇“保存”按鈕,即可使數(shù)據(jù)庫的上述修改生效。2.使用Transact-SQL語句完成唯一性約束的操作其語法形式如下:
CONSTRAINTconstraint_nameUNIQUE[CLUSTERED|NONCLUSTERED](column_name[,…n])
其中,各參數(shù)說明如下:●?constraint_name:唯一性約束的名稱。●?UNIQUE:指定通過唯一索引為給定的一列或多列提供實體完整性約束。●?CLUSTERED:指定創(chuàng)建簇索引。●?NONCLUSTERED:指定創(chuàng)建非蔟索引?!纠?-14】創(chuàng)建一個學生表,其中身份證字段具有唯一性。程序清單如下:
USEcollegeGOCREATETABLE學生表
(
學號char(10)NOTNULLPRIMARYKEY,
姓名char(8),性別char(2)DEFAULT'男',生日datetime,身份證char(50),
constraintuk_idunique(身份證))5.6.4檢查約束檢查約束是指對輸入列或者整個表中的值設置檢查條件,以限制輸入值,保證數(shù)據(jù)庫數(shù)據(jù)的完整性。當使用檢查約束時,應該考慮和注意以下幾點:
(1)一個列級檢查約束只能與限制的列中字段有關,一個表級檢查約束只能與限制的表中字段有關。
(2)一個表中可以定義多個檢查約束。
(3)每個CREATETABLE語句中的每個字段只能定義一個檢查約束。
(4)若在多個字段上定義檢查約束,則必須將檢查約束定義為表級約束。(5)當執(zhí)行INSERT語句或者UPDATE語句時,檢查約束將驗證數(shù)據(jù)。
(6)檢查約束中不能包含子查詢。創(chuàng)建檢查約束常用的操作方法有如下兩種。
1.使用企業(yè)管理器創(chuàng)建檢查約束與創(chuàng)建唯一性約束類似,在打開“表格設計”對話框后,右擊要設置檢查約束的字段,從彈出的快捷菜單中選擇“屬性”選項,出現(xiàn)“屬性”對話框。在該對話框中選擇“CHECK約束”選項卡,單擊“新建”按鈕后,就可以在約束表達式欄中輸入檢查約束的表達式,如圖5-20所示。輸入完檢查約束后,在“約束名”文本框中輸入該約束的名稱,然后單擊“關閉”按鈕。最后,在退出表格設計對話框時保存所做的修改。圖5-20“CHECK約束”選項卡2.使用Transact-SQL語句創(chuàng)建檢查約束其語法形式如下:.
CONS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度危險化學品儲存安全合同書模板3篇
- 教育領域中的農(nóng)業(yè)科技應用與實踐
- 二零二五年度車庫門行業(yè)信息化建設與支持合同4篇
- 生物醫(yī)學工程專業(yè)人才需求與培養(yǎng)方案
- 二零二五年度尊享不過戶二手房買賣合同3篇
- 2025年度個人所得稅贍養(yǎng)老人專項附加扣除協(xié)議執(zhí)行細則3篇
- 2025年度個人二手房購房合同范本及稅費代繳服務協(xié)議3篇
- AI驅(qū)動的智能醫(yī)療設備進展報告
- 科技驅(qū)動的小學道德與法治教育變革
- 珠海廣東珠海市斗門區(qū)人民法院特邀調(diào)解員招聘10人筆試歷年參考題庫附帶答案詳解
- 口腔醫(yī)學中的人工智能應用培訓課件
- 工程質(zhì)保金返還審批單
- 【可行性報告】2023年電動自行車項目可行性研究分析報告
- 五月天歌詞全集
- 商品退換貨申請表模板
- 實習單位鑒定表(模板)
- 六西格瑪(6Sigma)詳解及實際案例分析
- 機械制造技術-成都工業(yè)學院中國大學mooc課后章節(jié)答案期末考試題庫2023年
- 數(shù)字媒體應用技術專業(yè)調(diào)研方案
- 2023年常州市新課結束考試九年級數(shù)學試卷(含答案)
- 正常分娩 分娩機制 助產(chǎn)學課件
評論
0/150
提交評論