表的操作與管理_第1頁
表的操作與管理_第2頁
表的操作與管理_第3頁
表的操作與管理_第4頁
表的操作與管理_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

表的操作與管理第一頁,共六十四頁,編輯于2023年,星期五5.1數(shù)據(jù)類型

在SQLServer2005中,每個列、局部變量、表達式和參數(shù)都有其各自的數(shù)據(jù)類型。指定對象的數(shù)據(jù)類型相當于定義了該對象的四個特性:(1)對象所含的數(shù)據(jù)類型,如字符、整數(shù)或二進制數(shù)。(2)所存儲值的長度或它的大小。(3)數(shù)字精度(僅用于數(shù)字數(shù)據(jù)類型)。(4)小數(shù)位數(shù)(僅用于數(shù)字數(shù)據(jù)類型)。

SQLServer提供系統(tǒng)數(shù)據(jù)類型集,定義了可與SQLServer一起使用的所有數(shù)據(jù)類型;另外用戶還可以使用Transact-SQL或.NET框架定義自己的數(shù)據(jù)類型,它是系統(tǒng)提供的數(shù)據(jù)類型的別名。每個表可以定義至多250個字段,除文本和圖像數(shù)據(jù)類型外,每個記錄的最大長度限制為1962個字節(jié)。第二頁,共六十四頁,編輯于2023年,星期五5.1.1系統(tǒng)數(shù)據(jù)類型

1、精確數(shù)字類型;2、近似數(shù)字類型;3、日期和時間類型;4、字符數(shù)據(jù)類型;5、Unicode字符數(shù)據(jù)類型;6、二進制字符數(shù)據(jù)類型;7、其它數(shù)據(jù)類型。第三頁,共六十四頁,編輯于2023年,星期五5.1.1系統(tǒng)數(shù)據(jù)類型

1、精確數(shù)字類型(1)精確數(shù)字類型包括:整數(shù)類型;Bit(位類型);Decimal和Numeric(數(shù)值類型);Money和SmallMoney(貨幣類型)。第四頁,共六十四頁,編輯于2023年,星期五5.1.1系統(tǒng)數(shù)據(jù)類型

1、精確數(shù)字類型(2)整數(shù)類型:整數(shù)類型是最常用的數(shù)據(jù)類型之一,它主要用來存儲數(shù)值,可以直接進行數(shù)據(jù)運算,而不必使用函數(shù)轉換。整數(shù)類型包括以下四類:(1)Bigint:Bigint數(shù)據(jù)類型可以存儲從(-9223372036854775808)到(9223372036854775807)范圍之間的所有整型數(shù)據(jù)。每個Bigint數(shù)據(jù)類型值存儲在8個字節(jié)中。(2)Int(Integer):Int(或integer)數(shù)據(jù)類型可以存儲從(-2147483648)到(2147483647)范圍之間的所有正負整數(shù)。每個Int數(shù)據(jù)類型值存儲在4個字節(jié)中。(3)Smallint:可以存儲從(-32768)到32767范圍之間的所有正負整數(shù)。每個smallint類型的數(shù)據(jù)占用2個字節(jié)的存儲空間。(4)Tinyint:可以存儲從0~255范圍之間的所有正整數(shù)。每個tinyint類型的數(shù)據(jù)占用1個字節(jié)的存儲空間。第五頁,共六十四頁,編輯于2023年,星期五5.1.1系統(tǒng)數(shù)據(jù)類型

1、精確數(shù)字類型(3)位數(shù)據(jù)類型Bit稱為位數(shù)據(jù)類型,其數(shù)據(jù)有兩種取值:0和1,長度為1字節(jié)。在輸入0以外的其他值時,系統(tǒng)均把它們當1看待。這種數(shù)據(jù)類型常作為邏輯變量使用,用來表示真、假或是、否等二值選擇。(4)Decimal數(shù)據(jù)類型和Numeric數(shù)據(jù)類型Decimal數(shù)據(jù)類型和Numeric數(shù)據(jù)類型完全相同,它們可以提供小數(shù)所需要的實際存儲空間,但也有一定的限制,可以用2~17個字節(jié)來存儲-1038+1到1038-1之間的固定精度和小數(shù)位的數(shù)字。也可以將其寫為Decimal(p,s)的形式,p和s確定了精確的總位數(shù)和小數(shù)位。其中p表示可供存儲的值的總位數(shù),默認設置為18;s表示小數(shù)點后的位數(shù),默認設置為0。例如:decimal(10,5),表示共有10位數(shù),其中整數(shù)5位,小數(shù)5位。第六頁,共六十四頁,編輯于2023年,星期五5.1.1系統(tǒng)數(shù)據(jù)類型

1、精確數(shù)字類型(5)貨幣數(shù)據(jù)類型貨幣數(shù)據(jù)類型包括Money和SmallMoney兩種:(1)Money:用于存儲貨幣值,存儲在money數(shù)據(jù)類型中的數(shù)值以一個正數(shù)部分和一個小數(shù)部分存儲在兩個4字節(jié)的整型值中,存儲范圍為(-9223372136854775808)到(9223372136854775807),精確到貨幣單位的千分之十。(2)Smallmoney:與money數(shù)據(jù)類型類似,但范圍比money數(shù)據(jù)類型小,其存儲范圍為-2147483468到2147483467之間,精確到貨幣單位的千分之十。當為money或smallmoney的表輸入數(shù)據(jù)時,必須在有效位置前面加一個貨幣單位符號。第七頁,共六十四頁,編輯于2023年,星期五5.1.1系統(tǒng)數(shù)據(jù)類型

2、近似數(shù)字類型近似數(shù)字類型包括Real和Float兩大類。(1)Real:可以存儲正的或者負的十進制數(shù)值,最大可以有7位精確位數(shù)。它的存儲范圍從-3.40E-38~3.40E+38。每個Real類型的數(shù)據(jù)占用4個字節(jié)的存儲空間。(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é)存儲它。

第八頁,共六十四頁,編輯于2023年,星期五5.1.1系統(tǒng)數(shù)據(jù)類型

3.日期和時間數(shù)據(jù)類型

(1)Datetime:用于存儲日期和時間的結合體,它可以存儲從公元1753年1月1日零時起~公元9999年12月31日23時59分59秒之間的所有日期和時間,其精確度可達三百分之一秒,即3.33毫秒。Datetime數(shù)據(jù)類型所占用的存儲空間為8個字節(jié),其中前4個字節(jié)用于存儲基于1900年1月1日之前或者之后日期數(shù),數(shù)值分正負,負數(shù)存儲的數(shù)值代表在基數(shù)日期之前的日期,正數(shù)表示基數(shù)日期之后的日期,時間以子夜后的毫秒存儲在后面的4個字節(jié)中。當存儲Datetime數(shù)據(jù)類型時,默認的格式是MMDDYYYYhh:mmA.M./P.M,當插入數(shù)據(jù)或者在其他地方使用Datetime類型時,需要用單引號把它括起來。默認的時間日期是January1,190012:00A.M??梢越邮艿妮斎敫袷饺缦拢篔an41999、JAN41999、January41999、Jan19994、19994Jan和1999Jan4。(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分鐘。

第九頁,共六十四頁,編輯于2023年,星期五5.1.1系統(tǒng)數(shù)據(jù)類型

4.字符數(shù)據(jù)類型字符數(shù)據(jù)類型也是SQLServer中最常用的數(shù)據(jù)類型之一,它可以用來存儲各種字母、數(shù)字符號和特殊符號。在使用字符數(shù)據(jù)類型時,需要在其前后加上英文單引號或者雙引號。(1)Char:其定義形式為Char(n),當用Char數(shù)據(jù)類型存儲數(shù)據(jù)時,每個字符和符號占用一個字節(jié)的存儲空間。n表示所有字符所占的存儲空間,n的取值為1~8000。若不指定n值,系統(tǒng)默認n的值為1。若輸入數(shù)據(jù)的字符串長度小于n,則系統(tǒng)自動在其后添加空格來填滿設定好的空間;若輸入的數(shù)據(jù)過長,將會截掉其超出部分。如果定義了一個Char數(shù)據(jù)類型,而且允許該列為空,則該字段被當作Varchar來處理。(2)Varchar:其定義形式為Varchar(n)。用Char數(shù)據(jù)類型可以存儲長達255個字符的可變長度字符串,和Char類型不同的是Varchar類型的存儲空間是根據(jù)存儲在表的每一列值的字符數(shù)變化的。例如定義Varchar(20),則它對應的字段最多可以存儲20個字符,但是在每一列的長度達到20字節(jié)之前系統(tǒng)不會在其后添加空格來填滿設定好的空間,因此使用Varchar類型可以節(jié)省空間。(3)Text:用于存儲文本數(shù)據(jù),其容量理論上為1~231-1(2,147,483,647)個字節(jié),但實際應用時要根據(jù)硬盤的存儲空間而定。

第十頁,共六十四頁,編輯于2023年,星期五5.1.1系統(tǒng)數(shù)據(jù)類型

5.Unicode字符數(shù)據(jù)類型Unicode字符數(shù)據(jù)類型包括Nchar、Nvarchar、Ntext三種:(1)Nchar:其定義形式為Nchar(n)。它與Char數(shù)據(jù)類型類似,不同的是Nchar數(shù)據(jù)類型n的取值為1~4000。Nchar數(shù)據(jù)類型采用Unicode標準字符集,Unicode標準用兩個字節(jié)為一個存儲單位,其一個存儲單位的容納量就大大增加了,可以將全世界的語言文字都囊括在內,在一個數(shù)據(jù)列中就可以同時出現(xiàn)中文、英文、法文等,而不會出現(xiàn)編碼沖突。(2)Nvarchar:其定義形式Nvarchar(n)。它與Varchchar數(shù)據(jù)類型相似,Nvarchar數(shù)據(jù)類型也采用Unicode標準字符集,n的取值范圍為1~4000。(3)Ntext:與Text數(shù)據(jù)類型類似,存儲在其中的數(shù)據(jù)通常是直接能輸出到顯示設備上的字符,顯示設備可以是顯示器、窗口或者打印機。Ntext數(shù)據(jù)類型采用Unicode標準字符集,因此其理論上的容量為230-1(1,073,741,823)個字節(jié)。

第十一頁,共六十四頁,編輯于2023年,星期五5.1.1系統(tǒng)數(shù)據(jù)類型

6.二進制字符數(shù)據(jù)類型二進制數(shù)據(jù)類型包括Binary、Varbinary、Image三種:(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。(3)Image:用于存儲照片、目錄圖片或者圖畫,其理論容量為231-1(2,147,483,647)個字節(jié)。其存儲數(shù)據(jù)的模式與Text數(shù)據(jù)類型相同,通常存儲在Image字段中的數(shù)據(jù)不能直接用Insert語句直接輸入。

第十二頁,共六十四頁,編輯于2023年,星期五5.1.1系統(tǒng)數(shù)據(jù)類型

7.其它數(shù)據(jù)類型(1)Sql_variant:用于存儲除文本、圖形數(shù)據(jù)和Timestamp類型數(shù)據(jù)外的其他任何合法的SQLServer數(shù)據(jù)。此數(shù)據(jù)類型極大地方便了SQLServer的開發(fā)工作。(2)Table:用于存儲對表或者視圖處理后的結果集。這種新的數(shù)據(jù)類型使得變量可以存儲一個表,從而使函數(shù)或過程返回查詢結果更加方便、快捷。(3)Timestamp:亦稱時間戳數(shù)據(jù)類型,它提供數(shù)據(jù)庫范圍內的惟一值,反應數(shù)據(jù)庫中數(shù)據(jù)修改的相對順序,相當于一個單調上升的計數(shù)器。當它所定義的列在更新或者插入數(shù)據(jù)行時,此列的值會被自動更新,一個計數(shù)值將自動地添加到此Timestamp數(shù)據(jù)列中。如果建立一個名為“Timestamp”的列,則該列的類型將自動設為Timestamp數(shù)據(jù)類型。(4)Uniqueidentifier:用于存儲一個16字節(jié)長的二進制數(shù)據(jù)類型,它是SQLServer根據(jù)計算機網(wǎng)絡適配器地址和CPU時鐘產(chǎn)生的全局惟一標識符代碼(GloballyUniqueIdentifier,簡寫為GUID)。此數(shù)字可以通過調用SQLServer的newid()函數(shù)獲得,在全球各地的計算機經(jīng)由此函數(shù)產(chǎn)生的數(shù)字不會相同。(5)XML:可以存儲XML數(shù)據(jù)的數(shù)據(jù)類型。利用它可以將XML實例存儲在字段中或者XML類型的變量中。注意存儲在XML中的數(shù)據(jù)不能超過2GB。(6)Cursor:這是變量或存儲過程OUTPUT參數(shù)的一種數(shù)據(jù)類型,這些參數(shù)包含對游標的引用。使用Cursor數(shù)據(jù)類型創(chuàng)建的變量可以為空。注意:對于CREATETABLE語句中的列,不能使用Cursor數(shù)據(jù)類型。

第十三頁,共六十四頁,編輯于2023年,星期五5.1.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)使用SQLServer管理平臺創(chuàng)建用戶自定義數(shù)據(jù)類型;(2)利用系統(tǒng)存儲過程創(chuàng)建用戶自定義數(shù)據(jù)類型

第十四頁,共六十四頁,編輯于2023年,星期五5.1.2自定義數(shù)據(jù)類型

(1)使用SQLServer管理平臺創(chuàng)建用戶自定義數(shù)據(jù)類型在SQLServer管理平臺中,打開指定的服務器和數(shù)據(jù)庫項,如圖5-1所示,選擇并展開“程序→類型”項,接下來用右鍵單擊“用戶自定義數(shù)據(jù)類型”選項,從彈出的快捷菜單中選擇“新建”命令,出現(xiàn)用戶定義的數(shù)據(jù)類型屬性對話框,如圖5-2所示。

圖5-1打開用戶定義的數(shù)據(jù)類型窗口

圖5-2用戶定義的數(shù)據(jù)類型屬性對話框

第十五頁,共六十四頁,編輯于2023年,星期五5.1.2自定義數(shù)據(jù)類型

(2)利用系統(tǒng)存儲過程創(chuàng)建用戶自定義數(shù)據(jù)類型

系統(tǒng)存儲過程sp_addtype為用戶提供了用T_SQL語句創(chuàng)建自定義數(shù)據(jù)類型的途徑,其語法形式如下:sp_addtype[@typename=]type,[@phystype=]system_data_type[,[@nulltype=]‘null_type’][,[@owner=]‘owner_name’]第十六頁,共六十四頁,編輯于2023年,星期五5.1.2自定義數(shù)據(jù)類型

(2)利用系統(tǒng)存儲過程創(chuàng)建用戶自定義數(shù)據(jù)類型

例5-1

自定義一個地址(address)數(shù)據(jù)類型。程序清單如下:execsp_addtypeaddress,‘varchar(80)’,‘notnull’第十七頁,共六十四頁,編輯于2023年,星期五5.2表操作

表是包含數(shù)據(jù)庫中所有數(shù)據(jù)的數(shù)據(jù)庫對象。表定義為列的集合,數(shù)據(jù)在表中是按行和列的格式組織排列的,每行代表惟一的一條記錄,而每列代表記錄中的一個域。5.2.1創(chuàng)建表

5.2.2創(chuàng)建約束5.2.3修改表5.2.4查看表5.2.5刪除表第十八頁,共六十四頁,編輯于2023年,星期五5.2.1創(chuàng)建表利用SQLServer管理平臺創(chuàng)建表在SQLServer管理平臺中,展開指定的服務器和數(shù)據(jù)庫,打開想要創(chuàng)建新表的數(shù)據(jù)庫,右擊表對象,并從彈出的快捷菜單中選擇“新建表”選項,如圖5-4所示。在圖5-4的對話框中,可以對表的結構進行更改,設置主鍵及字段屬性,使用SQLServer管理平臺可以非常直觀地修改數(shù)據(jù)庫結構和添加數(shù)據(jù)。在表中任意行上右擊,則彈出一個快捷菜單,如圖5-6所示。圖5-4新建表對話框

圖5-6設置字段屬性對話框

第十九頁,共六十四頁,編輯于2023年,星期五5.2.1創(chuàng)建表2.利用create命令創(chuàng)建表使用create命令創(chuàng)建表非常靈活,它允許對表設置幾種不同的選項,包括表名、存放位置和列的屬性等。其完整語法形式如下:CREATETABLE

[database_name.[owner].|owner.]table_name

({<column_definition>|column_nameAScomputed_column_expression|<table_constraint>}[,…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]第二十頁,共六十四頁,編輯于2023年,星期五5.2.1創(chuàng)建表2.利用create命令創(chuàng)建表其中,各參數(shù)的說明如下:database_name:用于指定所創(chuàng)建表的數(shù)據(jù)庫名稱。owner:用于指定新建表的所有者的用戶名。table_name:用于指定新建表的名稱。column_name:用于指定新建表的列名。computed_column_expression:用于指定計算列的列值表達式。ON{filegroup|DEFAULT}:用于指定存儲表的文件組名。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:用于將列指定為全局惟一標識行號列(rowglobaluniqueidentifiercolumn)。COLLATE:用于指定表的校驗方式。column_constraint和table_constraint:用于指定列約束和表約束。第二十一頁,共六十四頁,編輯于2023年,星期五5.2.1創(chuàng)建表2.利用create命令創(chuàng)建表例5-3

創(chuàng)建了一個工人信息表,它包括工人編號、姓名、性別、出生日期、職位、工資和備注信息。SQL語句的程序清單如下:

CREATETABLEworker

(numberchar(8)notnull,namechar(8)NOTNULL,sexchar(2)NULL,birthdaydatetimenull,job_titlevarchar(10)null,salarymoneynull,memontextnull

)第二十二頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

約束是SQLServer提供的自動保持數(shù)據(jù)庫完整性的一種方法,它通過限制字段中數(shù)據(jù)、記錄中數(shù)據(jù)和表之間的數(shù)據(jù)來保證數(shù)據(jù)的完整性。在SQLSERVER中,對于基本表的約束分為列約束和表約束。列約束是對某一個特定列的約束,包含在列定義中,直接跟在該列的其他定義之后,用空格分隔,不必指定列名;表約束與列定義相互獨立,不包括在列定義中,通常用于對多個列一起進行約束,與列定義用’,’分隔,定義表約束時必須指出要約束的那些列的名稱。完整性約束的基本語法格式為:

[CONSTRAINTconstraint_name(約束名)]<約束類型>

約束不指定名稱時,系統(tǒng)會給定一個名稱。在SQLServer2005中有6種約束:主鍵約束(primarykeyconstraint)、惟一性約束(uniqueconstraint)、檢查約束(checkconstraint)、默認約束(defaultconstraint)、外部鍵約束(foreignkeyconstraint)和空值(NULL)約束。

第二十三頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

主鍵(PRIMARYKEY)約束

PRIMARYKEY約束用于定義基本表的主鍵,它是惟一確定表中每一條記錄的標識符,其值不能為NULL,也不能重復,以此來保證實體的完整性。PRIMARYKEY與UNIQUE約束類似,通過建立唯一索引來保證基本表在主鍵列取值的唯一性,但它們之間存在著很大的區(qū)別:①在一個基本表中只能定義一個PRIMARYKEY約束,但可定義多個UNIQUE約束;②對于指定為PRIMARYKEY的一個列或多個列的組合,其中任何一個列都不能出現(xiàn)空值,而對于UNIQUE所約束的唯一鍵,則允許為空。注意:不能為同一個列或一組列既定義UNIQUE約束,又定義PRIMARYKEY約束。PRIMARYKEY既可用于列約束,也可用于表約束。第二十四頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

主鍵(PRIMARYKEY)約束

主鍵的創(chuàng)建操作方法有兩種:SQLServer管理平臺操作法和Transact-SQL語句操作法。(1)SQLServer管理平臺操作法,如圖5-7所示。圖5-7選擇多個字段共同做為主鍵對話框

第二十五頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

主鍵(PRIMARYKEY)約束

(2)使用Transact-SQL語句操作法設置主鍵約束,其語法形式如下:

CONSTRAINTconstraint_namePRIMARYKEY[CLUSTERED|NONCLUSTERED]

(column_name)PRIMARYKEY用于定義表約束時,即將某些列的組合定義為主鍵,其語法格式如下:

CONSTRAINTconstraint_namePRIMARYKEY[CLUSTERED|NONCLUSTERED]

(column_name[,…n])第二十六頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

主鍵(PRIMARYKEY)約束

例5-5建立一個SC表,定義SNO,CNO共同組成SC的主鍵程序清單如下:CREATETABLESC(SNOCHAR(5)NOTNULL,CNOCHAR(5)NOTNULL,SCORENUMERIC(3),CONSTRAINTSC_PRIMPRIMARYKEY(SNO,CNO))第二十七頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

2.惟一性約束

惟一性約束用于指定一個或者多個列的組合值具有惟一性,以防止在列中輸入重復的值。定義了UNIQUE約束的那些列稱為唯一鍵,系統(tǒng)自動為唯一鍵建立唯一索引,從而保證了唯一鍵的唯一性。當使用惟一性約束時,需要考慮以下幾個因素:使用惟一性約束的字段允許為空值;一個表中可以允許有多個惟一性約束;可以把惟一性約束定義在多個字段上;惟一性約束用于強制在指定字段上創(chuàng)建一個惟一性索引;默認情況下,創(chuàng)建的索引類型為非聚集索引。

第二十八頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

2.惟一性約束

創(chuàng)建惟一性約束的方法有兩種:通過SQLServer管理平臺可以完成創(chuàng)建和修改惟一性約束的操作;使用Transact-SQL語句完成惟一性約束的操作。(1)通過SQLServer管理平臺可以完成創(chuàng)建和修改惟一性約束的操作,如圖5-8所示。圖5-8創(chuàng)建惟一性約束對話框

第二十九頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

2.惟一性約束

(2)使用Transact-SQL語句完成惟一性約束的操作,其語法形式如下:CONSTRAINTconstraint_nameUNIQUE[CLUSTERED|NONCLUSTERED](column_name[,…n])例5-6

創(chuàng)建一個學生信息表,其中name字段具有惟一性。程序清單如下:Createtablestudent(idchar(8),namechar(10),sexchar(2),constraintpk_idprimarykey(id),constraintuk_identityunique(name))第三十頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

3.檢查約束

檢查約束對輸入列或者整個表中的值設置檢查條件,以限制輸入值,保證數(shù)據(jù)庫數(shù)據(jù)的完整性。當使用檢查約束時,應該考慮和注意以下幾點:一個列級檢查約束只能與限制的字段有關;一個表級檢查約束只能與限制的表中字段有關;一個表中可以定義多個檢查約束;每個CREATETABLE語句中每個字段只能定義一個檢查約束;在多個字段上定義檢查約束,則必須將檢查約束定義為表級約束;當執(zhí)行INSERT語句或者UPDATE語句時,檢查約束將驗證數(shù)據(jù);檢查約束中不能包含子查詢。第三十一頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

3.檢查約束

創(chuàng)建檢查約束常用的操作方法有如下兩種:使用SQLServer管理平臺創(chuàng)建檢查約束;用Transact-SQL語句創(chuàng)建檢查約束。(1)使用SQLServer管理平臺創(chuàng)建檢查約束,如圖5-9所示。圖5-9創(chuàng)建檢查約束對話框

第三十二頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

3.檢查約束

(2)用Transact-SQL語句創(chuàng)建檢查約束。用Transact-SQL語句創(chuàng)建檢查約束。其語法形式如下:

CONSTRAINTconstraint_nameCHECK[NOTFORREPLICATION](logical_expression)例5-8建立一個SC表,定義SCORE的取值范圍為0到100之間。程序清單如下:

CREATETABLESC(SNOCHAR(5),CNOCHAR(5),SCORENUMERIC(5,1)CONSTRAINTSCORE_CHKCHECK(SCORE>=0ANDSCORE<=100))第三十三頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

4.默認(DEFAULT)約束

默認約束指定在插入操作中如果沒有提供輸入值時,則系統(tǒng)自動指定值。默認約束可以包括常量、函數(shù)、不帶變元的內建函數(shù)或者空值。

使用默認約束時,應該注意以下幾點:(1)每個字段只能定義一個默認約束;(2)如果定義的默認值長于其對應字段的允許長度,那么輸入到表中的默認值將被截斷;(3)不能加入到帶有IDENTITY屬性或者數(shù)據(jù)類型為timestamp的字段上;(4)如果字段定義為用戶定義的數(shù)據(jù)類型,而且有一個默認綁定到這個數(shù)據(jù)類型上,則不允許該字段有默認約束。第三十四頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

4.默認(DEFAULT)約束

創(chuàng)建默認約束常用的操作方法有如下兩種:使用SQLServer管理平臺創(chuàng)建默認約束;創(chuàng)建默認約束的Transact-SQL語句操作法。(1)使用SQLServer管理平臺創(chuàng)建默認約束,如圖5-10所示。圖5-10創(chuàng)建默認約束對話框

第三十五頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

4.默認(DEFAULT)約束

(2)創(chuàng)建默認約束的Transact-SQL語句操作法。其語法形式如下:

CONSTRAINTconstraint_nameDEFAULTconstraint_expression[FORcolumn_name]例5-10

為dept字段創(chuàng)建默認約束。程序清單如下:constraintcon_deptdefault‘計算機’fordept第三十六頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

5.外部鍵約束

外鍵(FOREIGNKEY)是用于建立和加強兩個表數(shù)據(jù)之間的鏈接的一列或多列。外部鍵約束用于強制參照完整性。當使用外部鍵約束時,應該考慮以下幾個因素:外部鍵約束提供了字段參照完整性;外部鍵從句中的字段數(shù)目和每個字段指定的數(shù)據(jù)類型都必須和REFERENCES從句中的字段相匹配;外部鍵約束不能自動創(chuàng)建索引,需要用戶手動創(chuàng)建;用戶想要修改外部鍵約束的數(shù)據(jù),必須有對外部鍵約束所參考表的SELECT權限或者REFERENCES權限;參考同一表中的字段時,必須只使用REFERENCES子句,不能使用外部鍵子句;一個表中最多可以有31個外部鍵約束;在臨時表中,不能使用外部鍵約束;主鍵和外部鍵的數(shù)據(jù)類型必須嚴格匹配第三十七頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

5.外部鍵約束

創(chuàng)建外部鍵約束常用的操作方法有如下兩種:在SQLServer管理平臺中添加外部鍵約束;使用Transact-SQL語句設置外部鍵約束。(1)在SQLServer管理平臺中添加外部鍵約束,在SQLServer管理平臺中添加外部鍵約束。如圖5-11,5-12所示。圖5-11選擇創(chuàng)建外鍵約束的字段

圖5-12創(chuàng)建外鍵約束對話框

第三十八頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

5.外部鍵約束

(2)使用Transact-SQL語句設置外部鍵約束,其語法形式如下:

CONSTRAINTconstraint_nameFOREIGNKEY(column_name[,…n])

REFERENCESref_table[(ref_column[,…n])]例5-11建立一個SC表,定義SNO,CNO為SC的外部鍵。程序清單如下:

CREATETABLESC(SNOCHAR(5)NOTNULLCONSTRAINTS_FOREFOREIGNKEYREFERENCESS(SNO),CNOCHAR(5)NOTNULLCONSTRAINTC_FOREFOREIGNKEYREFERENCESC(CNO),SCORENUMERIC(3),CONSTRAINTS_C_PRIMPRIMARYKEY(SNO,CNO))第三十九頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

6.空值(NULL)約束

空值(NULL)約束用來控制是否允許該字段的值為NULL。NULL值不是0也不是空白,更不是填入字符串的“NULL”字符串,而是表示“不知道”、“不確定”或“沒有數(shù)據(jù)”的意思。當某一字段的值一定要輸入才有意義的時候,則可以設置為NOTNULL。如主鍵列就不允許出現(xiàn)空值,否則就失去了唯一標識一條記錄的作用??罩担∟ULL)約束只能用于定義列約束。創(chuàng)建空值(NULL)約束常用的操作方法有如下兩種:(1)在SQLServer管理平臺中添加空值(NULL)約束;(2)使用Transact-SQL語句設置空值(NULL)約束。第四十頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

6.空值(NULL)約束

(1)在SQLServer管理平臺中添加空值(NULL)約束。如圖5-14所示。圖5-14設置空值(NULL)約束對話框

第四十一頁,共六十四頁,編輯于2023年,星期五5.2.2創(chuàng)建約束

6.空值(NULL)約束

(2)使用Transact-SQL語句設置空值(NULL)約束,其語法形式如下:

[CONSTRAINT<約束名>][NULL|NOTNULL]例5-13建立一個S表,對SNO字段進行NOTNULL約束。程序清單如下:

CREATETABLES(SNOCHAR(10)CONSTRAINTS_CONSNOTNULL,SNVARCHAR(20),AGEINT,SEXCHAR(2)DEFAULT’男’,DEPTVARCHAR(20))第四十二頁,共六十四頁,編輯于2023年,星期五5.2.3修改表

當數(shù)據(jù)庫中的表創(chuàng)建完成后,可以根據(jù)需要改變表中原先定義的許多選項,以更改表的結構。用戶可以增加、刪除和修改列,增加、刪除和修改約束,更改表名以及改變表的所有者等。1、修改列屬性修改列屬性包括以下一些內容:(1)修改列的數(shù)據(jù)類型;(2)修改列的數(shù)據(jù)長度;(3)修改列的精度;(4)修改列的小數(shù)位數(shù);(5)修改列的為空性。第四十三頁,共六十四頁,編輯于2023年,星期五5.2.3修改表

2、添加和刪除列

在SQLServer2005中,如果列允許空值或對列創(chuàng)建DEFAULT約束,則可以將列添加到現(xiàn)有表中。將新列添加到表時,SQLServer2005數(shù)據(jù)庫引擎在該列為表中的每個現(xiàn)有數(shù)據(jù)行插入一個值。因此,在向表中添加列時向列添加DEFAULT定義會很有用。如果新列沒有DEFAULT定義,則必須指定該列允許空值。數(shù)據(jù)庫引擎將空值插入該列,如果新列不允許空值,則返回錯誤。反之,可以刪除現(xiàn)有表中的列,但具有下列特征的列不能被刪除:(1)用于索引;(2)用于CHECK、FOREIGNKEY、UNIQUE或PRIMARYKEY約束;(3)與DEFAULT定義關聯(lián)或綁定到某一默認對象;(4)綁定到規(guī)則;(5)已注冊支持全文;(6)用作表的全文鍵。第四十四頁,共六十四頁,編輯于2023年,星期五5.2.3修改表

3、增加、修改和刪除約束

(1)增加、修改和刪除PRIMARYKEY約束。(2)增加、修改和刪除UNIQUE約束。(3)增加、修改和刪除CHECK約束。(4)增加、修改和刪除DEFAULT約束。(5)增加、修改和刪除FOREIGNKEY約束。(6)增加和修改標識符列。只能為每個表創(chuàng)建一個標識符列和一個GUID列。第四十五頁,共六十四頁,編輯于2023年,星期五5.2.3修改表

例5-14

創(chuàng)建一個雇員信息表,然后在表中增加一個salary字段,刪除表中的age字段,并且修改memo字段的數(shù)據(jù)類型。SQL語句的程序清單如下:createtableemployees(idchar(8)primarykey,namechar(20)notnull,departmentchar(20)null,memochar(30)null,ageintnull,)altertableemployeesaddsalaryintnull,dropcolumnage,altercolumnmemovarchar(200)null第四十六頁,共六十四頁,編輯于2023年,星期五5.2.3修改表

例5-15在S表中增加一個班號列和住址列。SQL語句的程序清單如下:ALTERTABLESADDCLASS_NOCHAR(6),ADDRESSCHAR(40)注意:使用此方式增加的新列自動填充NULL值,所以不能為增加的新列指定NOTNULL約束。例5-16在SC表中增加完整性約束定義,使SCORE在0-100之間。SQL語句的程序清單如下:ALTERTABLESCADDCONSTRAINTSCORE_CHKCHECK(SCOREBETWEEN0AND100)第四十七頁,共六十四頁,編輯于2023年,星期五5.2.4查看表

當在數(shù)據(jù)庫中創(chuàng)建了表后,有時需要查看表的有關信息。比如表的屬性、定義、數(shù)據(jù)、字段屬性和索引等。尤其重要的是查看表內存放的數(shù)據(jù),另外有時需要查看表與其他數(shù)據(jù)庫對象之間的依賴關系。1.查看表的定義

,如圖5-15,5-16所示。圖5-15選擇表格屬性對話框

圖5-16表格屬性對話框

第四十八頁,共六十四頁,編輯于2023年,星期五5.2.4查看表

2.查看表中存儲的數(shù)據(jù),如圖5-17,5-18所示。圖5-17選擇打開表對話框圖5-18顯示表格數(shù)據(jù)對話框

第四十九頁,共六十四頁,編輯于2023年,星期五5.2.4查看表

3.查看表與其他數(shù)據(jù)庫對象的依賴關系,如圖5-19所示。圖5-19顯示相關性對話框

第五十頁,共六十四頁,編輯于2023年,星期五5.2.4查看表

4.利用系統(tǒng)存儲過程查看表的信息系統(tǒng)存儲過程Sp_help可以提供指定數(shù)據(jù)庫對象的信息,也可以提供系統(tǒng)或者用戶定義的數(shù)據(jù)類型的信息,其語法形式如下:

sp_help[[@objname=]name]例5-17

(1)顯示當前數(shù)據(jù)庫中所有對象的信息;(2)顯示表Person.Contact的信息。在SQLServer管理平臺的查詢窗口中,它們對應的語句和運行結果如圖5-20和圖5-21所示圖5-20所有數(shù)據(jù)庫對象顯示窗口

圖5-21當前數(shù)據(jù)庫對象顯示窗口

第五十一頁,共六十四頁,編輯于2023年,星期五5.2.5刪除表

1.利用管理平臺刪除表在SQLServer管理平臺中,展開指定的數(shù)據(jù)庫和表,右擊要刪除的表,從彈出的快捷菜單中選擇“刪除”選項,則出現(xiàn)除去對象對話框,如圖5-25所示。圖5-25刪除表對話框

第五十二頁,共六十四頁,編輯于2023年,星期五5.2.5刪除表

2.利用DROPTABLE語句刪除表DROPTABLE語句可以刪除一個表和表中的數(shù)據(jù)及其與表有關的所有索引、觸發(fā)器、約束、許可對象。DROPTABLE語句的語法形式如下:

DROPTABLEtable_name要刪除的表如果不在當前數(shù)據(jù)庫中,則應在table_name中指明其所屬的數(shù)據(jù)庫和用戶名。在刪除一個表之前要先刪除與此表相關聯(lián)的表中的外部關鍵字約束。當刪除表后,綁定的規(guī)則或者默認值會自動松綁。例5-18

刪除company數(shù)據(jù)庫中的表employee。程序如下:droptablecompany.dbo.employee第五十三頁,共六十四頁,編輯于2023年,星期五5.3索引操作

索引是數(shù)據(jù)庫隨機檢索的常用手段,它實際上就是記錄的關鍵字與其相應地址的對應表。通過索引可大大提高查詢速度。此外,在SQLSERVER中,行的唯一性也是通過建立唯一索引來維護的。使用索引可以大大提高系統(tǒng)的性能,其具體表現(xiàn)在:(1)通過創(chuàng)建惟一索引,可以保證數(shù)據(jù)記錄的惟一性。(2)可以大大加快數(shù)據(jù)檢索速度。(3)可以加速表與表之間的連接,這一點在實現(xiàn)數(shù)據(jù)的參照完整性方面有特別的意義。(4)在使用ORDERBY和GROUPBY子句進行檢索數(shù)據(jù)時,可以顯著減少查詢中分組和排序的時間。(5)使用索引可以在檢索數(shù)據(jù)的過程中使用優(yōu)化隱藏器,提高系統(tǒng)性能第五十四頁,共六十四頁,編輯于2023年,星期五5.3.1創(chuàng)建索引

SQLServer2005提供了如下幾種創(chuàng)建索引的方法:

1.利用SQLServer管理平臺創(chuàng)建索引;

2.利用Transact-SQL語句中的CREATEINDEX命令創(chuàng)建索引。另外,可以在創(chuàng)建表的PRIMARYKEY或UNIQUE約束時自動創(chuàng)建索引。第五十五頁,共六十四頁,編輯于2023年,星期五5.3.1創(chuàng)建索引

1.利用SQLServer管理平臺創(chuàng)建索引。(1)展開指定的服務器和數(shù)據(jù)庫,選擇要創(chuàng)建索引的表,展開該表,選擇“索引”選項(如圖5-26所示),右鍵單擊索引,從彈出的快捷菜單中選擇“新建索引”,就會出現(xiàn)新建索引對話框,如圖5-27所示。圖5-26選擇新建索引選項對話框

圖5-27創(chuàng)建索引對話框

第五十六頁,共六十四頁,編輯于2023年,星期五5.3.1創(chuàng)建索引

1.利用SQLServer管理平臺創(chuàng)建索引。(2)點擊“添加”按鈕,可選擇用于創(chuàng)建索引的字段,如圖5-28所示。(3)打開創(chuàng)建索引對話框的選項頁框,在此還可以設定索引的屬性,如圖5-29所示。

圖5-28選擇用于創(chuàng)建索引的字段

圖5-29索引對話框的選項頁框

第五十七頁,共六十四頁,編輯于2023年,星期五5.3.1創(chuàng)建索引

2.利用Transact-SQL語句中的CREATEINDEX命令創(chuàng)建索引

CREATEINDEX命令既可以創(chuàng)建一個可改變表的物理順序的聚集索引,也可以創(chuàng)建提高查詢性能的非聚集索引,其語法形式如下:

CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEXindex_nam

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論