![第3章數(shù)據(jù)表及其應(yīng)用_第1頁](http://file4.renrendoc.com/view/0c3de2990c5a30c2e4bf81fe064544a1/0c3de2990c5a30c2e4bf81fe064544a11.gif)
![第3章數(shù)據(jù)表及其應(yīng)用_第2頁](http://file4.renrendoc.com/view/0c3de2990c5a30c2e4bf81fe064544a1/0c3de2990c5a30c2e4bf81fe064544a12.gif)
![第3章數(shù)據(jù)表及其應(yīng)用_第3頁](http://file4.renrendoc.com/view/0c3de2990c5a30c2e4bf81fe064544a1/0c3de2990c5a30c2e4bf81fe064544a13.gif)
![第3章數(shù)據(jù)表及其應(yīng)用_第4頁](http://file4.renrendoc.com/view/0c3de2990c5a30c2e4bf81fe064544a1/0c3de2990c5a30c2e4bf81fe064544a14.gif)
![第3章數(shù)據(jù)表及其應(yīng)用_第5頁](http://file4.renrendoc.com/view/0c3de2990c5a30c2e4bf81fe064544a1/0c3de2990c5a30c2e4bf81fe064544a15.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章SQL中的表及其應(yīng)用3.1表的基礎(chǔ)知識3.2表的創(chuàng)建3.3表的操作3.4數(shù)據(jù)完整性控制第3章SQL中的表及其應(yīng)用教學(xué)重點:(1)T-SQL的數(shù)據(jù)類型(2)使用對象資源管理器實現(xiàn)表的創(chuàng)建和操作(3)使用T-SQL語言實現(xiàn)表的創(chuàng)建和操作3.1表的基礎(chǔ)知識3.1.1表的定義3.1.2數(shù)據(jù)類型3.1.3約束3.1.1表的定義表是一系列行和列的集合。在表中,數(shù)據(jù)成二維行列格式,每一行代表一個惟一的記錄,每一列代表一個域。1.表的概念(1)關(guān)系數(shù)據(jù)庫中的所有數(shù)據(jù)存儲在表對象中,表是數(shù)據(jù)庫中最重要的對象,每個表代表著一個實體集或?qū)嶓w集之間的聯(lián)系。(2)創(chuàng)建一個表最有效的方法是將表中所需的信息一次定義完成,包括數(shù)據(jù)約束和附加成份。也可以先創(chuàng)建一個基礎(chǔ)表,向其中添加一些數(shù)據(jù)并使用一段時間,再根據(jù)應(yīng)用情況定義其它成份。(3)在SQLServer中創(chuàng)建表有如下限制:①每個數(shù)據(jù)庫里最多有20億個表;每個表最多可以包含1024個字段;每條記錄最多可以占用8060字節(jié),但不包括text字段和image字段。②每個表上最多可以創(chuàng)建一個聚集索引和249個非聚集索引;2.創(chuàng)建表的步驟(1)定義表結(jié)構(gòu):確定表的各字段的名稱,并為每個字段確定數(shù)據(jù)類型、數(shù)據(jù)長度、是否可以為空等。(2)設(shè)置約束:設(shè)置約束是為了限制字段輸入值的取值范圍,以保證數(shù)據(jù)的完整性。(3)添加數(shù)據(jù):表結(jié)構(gòu)建立完成之后,就可以向表中輸入數(shù)據(jù)了。
3.1.2T-SQL的數(shù)據(jù)類型
數(shù)據(jù)類型是指數(shù)據(jù)所代表信息的類型,是數(shù)值型、字符型、日期型,還是貨幣型、圖像型等其它的類型數(shù)據(jù),它關(guān)系到SQLServer2005系統(tǒng)在內(nèi)存或磁盤上開辟相應(yīng)的存儲空間。定義表的各字段時必須說明該字段的數(shù)據(jù)類型,數(shù)據(jù)類型定義了該字段可接受的數(shù)據(jù)值及其占用的內(nèi)存空間,同時也決定訪問、顯示、更新數(shù)據(jù)的方法。T-SQL的數(shù)據(jù)類型包括系統(tǒng)數(shù)據(jù)類型及用戶自定義的數(shù)據(jù)類型兩大類SQLServer的九種數(shù)據(jù)類型
1)整型數(shù)據(jù)類型(Integer)2)精確數(shù)字?jǐn)?shù)據(jù)類型(ExactNumeric)3)近似數(shù)字?jǐn)?shù)據(jù)類型(ApproximateNumeric)4)貨幣數(shù)據(jù)類型(Money)5)日期和時間數(shù)據(jù)類型(DateTime)6)字符數(shù)據(jù)類型(Character)7)二進(jìn)制數(shù)據(jù)類型8)特殊數(shù)據(jù)類型9)自定義數(shù)據(jù)類型(UDT)字符型數(shù)據(jù)類型主要用來存儲由字母、數(shù)字和符號組成的字符串。SQLServer提供了三種字符型數(shù)據(jù)類型:
char、varchar和text。char用于存儲長度固定的字符串;varchar用于存儲長度可變的字符串;text用于存儲無限長的字符串(每行可達(dá)2GB)。系統(tǒng)數(shù)據(jù)類型--字符型系統(tǒng)數(shù)據(jù)類型--字符型
字符型對每個字符都使用一個字節(jié)進(jìn)行存儲:
char[(n)],n的取值為1~8000,固定長度的字符串,長度從1到8000,如果省略了長度,則缺省值為1。存儲字節(jié)數(shù)為N字節(jié),若實際輸入的字符個數(shù)不足N個,在輸入的數(shù)據(jù)后面填充空格補足到N個
varchar[(n)],n的取值為1~8000。可變長度的字符串,最大長度從1到8000,如果省略了長度,則缺省值為1。存儲字節(jié)數(shù)為輸入的實際字符長度,不會填充額外的空格。系統(tǒng)數(shù)據(jù)類型--字符型
text數(shù)據(jù)類型用于存儲數(shù)據(jù)量龐大且變長的字符文本數(shù)據(jù),如簡歷信息等。最多達(dá)到2GB,行中存儲指向第一個數(shù)據(jù)頁的指針,實際文本以b-樹數(shù)據(jù)頁來存儲。不能使用”=”運算,也不能使用很多系統(tǒng)函數(shù)。Varchar(Max):SQLServer2005引入代替text數(shù)據(jù)類型,最多可存儲2GB數(shù)據(jù),對使用Varchar(Max)數(shù)據(jù)類型的操作或函數(shù)沒有限制二進(jìn)制型是指數(shù)據(jù)是由二進(jìn)制值組成,如程序代碼或圖像數(shù)據(jù)。SQLServer提供了三種二進(jìn)制數(shù)據(jù)類型:binary、varbinary和image:
binary用于存儲長度固定的二進(jìn)制字符串;
varbinary用于存儲長度可變的二進(jìn)制字符串;
image用于存儲大的字符串。系統(tǒng)數(shù)據(jù)類型--二進(jìn)制型系統(tǒng)數(shù)據(jù)類型--二進(jìn)制binary型數(shù)據(jù)類似于字符型數(shù)據(jù),當(dāng)實際的二進(jìn)制數(shù)據(jù)長度小于定義長度時,binary類型會在實際數(shù)據(jù)的尾部添加二進(jìn)制的0,而不是空格。image型數(shù)據(jù)的存儲長度為0~231-1個字節(jié),可以用來存儲照片、圖片或者圖畫。SQLServer支持兩種日期時間數(shù)據(jù)類型:
datetime和smalldatetime:datetime類型用于存儲從1753年1月1日到9999年12月31日的日期和時間數(shù)據(jù),精確到3%秒(或30毫秒)。存儲長度為8字節(jié),日期和時間各用4字節(jié)存儲。第一個四字節(jié)存儲自1900年1月1日之前或之后的天數(shù)(1900年1月1日之前的日期天數(shù)小于0,1900年1月1日之后的日期天數(shù)大于0),另外一個4字節(jié)存儲以午夜(00:00:00.000)后毫秒數(shù)所代表的每天的時間系統(tǒng)數(shù)據(jù)類型--日期型系統(tǒng)數(shù)據(jù)類型--日期型smalldatetime類型用于存儲從1900年1月1日到2079年6月6日的日期和時間數(shù)據(jù),精確到分鐘。它只需4個字節(jié)的存儲空間,第一個2字節(jié)存儲自1900年1月1日之后的天數(shù),另外一個2字節(jié)存儲以午夜(00:00:00.000)后的分鐘數(shù)。精度小于datetime類型,包含的日期范圍較窄,但占用的空間小。對于定義為日期時間數(shù)據(jù)類型的字段,并不需要同時輸入日期和時間,可省略其中的一個。如果只指定時間,則日期默認(rèn)為1900年1月1日;如果只指定日期,則時間默認(rèn)為12:00AM默認(rèn)情況下,日期型數(shù)據(jù)的格式是按照“月/日/年”的順序來設(shè)定的。系統(tǒng)數(shù)據(jù)類型--日期型英文+數(shù)字:月份可用英文命名或縮寫,不區(qū)分大小寫,年月日之間可不用逗號。年份可4位或兩位。若為兩位,小于50為2000年后的年份,大于或等于50則為1900年后的年份,若日部分省略,則為當(dāng)月1日。如:‘1980mar5’數(shù)字+分隔符可使用斜杠(/)、連字符(-)或句號(.)作為分隔符來指定月、日、年。如:‘4/15/1998’,‘1978-04-15’,’1998.04.15’、常見的日期類型輸入格式:整型數(shù)據(jù)類型存儲不帶小數(shù)的精確數(shù)字,包括年齡、數(shù)量等,有4種整數(shù)數(shù)據(jù)類型用于存儲不同范圍的值:數(shù)據(jù)類型存儲字節(jié)數(shù)取值范圍使用說明Bigint8-263~263-1存儲非常大的正負(fù)整數(shù),如科學(xué)計算Int4-231~231-1存儲正負(fù)整數(shù)Smallint2-215~215-1存儲正負(fù)整數(shù)Tinyint10~255存儲小范圍正整數(shù)系統(tǒng)數(shù)據(jù)類型—整型數(shù)據(jù)類型精確數(shù)值數(shù)據(jù)類型存儲帶小數(shù)的精確數(shù)字,有兩種精確的數(shù)值數(shù)據(jù)類型:decimal和numeric。格式如下:decimal[(p[,s])]
numeric[(p[,s])]其中:p指定精度,即可存儲的十進(jìn)制數(shù)字的最大位數(shù),即除小數(shù)點之外的位數(shù)。s指定小數(shù)位數(shù),即小數(shù)點右邊可以存儲的十進(jìn)制數(shù)字的最大位數(shù)。P默認(rèn)值為18,S默認(rèn)值為0,最大可存儲38位十進(jìn)制數(shù)。系統(tǒng)數(shù)據(jù)類型—精確數(shù)值數(shù)據(jù)類型近似數(shù)據(jù)類型用來存儲系統(tǒng)所能提供的最大精度的實數(shù)數(shù)據(jù),由于是一種近似數(shù)據(jù),存在誤差,故不能用于需要固定精度的運算,如貨幣數(shù)據(jù)的運算中,可存儲非常大或小的數(shù)字,如恒星的質(zhì)量與大小。近似數(shù)據(jù)類型有兩種:real和float或float(n)real數(shù)據(jù)類型默認(rèn)精確到第7位小數(shù)。每個real類型的數(shù)據(jù)占用4個字節(jié)的存儲空間。float數(shù)據(jù)類型默認(rèn)精確到第15位小數(shù)。每個float類型的數(shù)據(jù)占用8個字節(jié)的存儲空間。系統(tǒng)數(shù)據(jù)類型—近似數(shù)據(jù)類型(實數(shù))
float數(shù)據(jù)類型可寫成float(n)的形式,n指定float數(shù)據(jù)尾數(shù)的位數(shù),為1~53之間的整數(shù)。當(dāng)n取1~24時實際上定義了一個real類型的數(shù)據(jù),系統(tǒng)用4個字節(jié)存儲。當(dāng)n取25~53時系統(tǒng)認(rèn)為是float類型的數(shù)據(jù),用8個字節(jié)存儲。注意:Unicode字符型是基于SQL-92標(biāo)準(zhǔn)中的NationalCharacter數(shù)據(jù)類型的。Unicode字符串常量的前面有一個大寫N
,例如,'Student',是字符串常量,而N'Student',則是Unicode字符型常量。
SQLServer允許使用多國語言,可采用Unicode
標(biāo)準(zhǔn)字符集。Unicode
字符串的格式與普通字符串相似,但Unicode
數(shù)據(jù)中的每個字符都使用兩個字節(jié)進(jìn)行存儲。Unicode字符型有nchar、nvarchar和ntext三種系統(tǒng)數(shù)據(jù)類型--Unicode字符型nvarchar[(n)]存放可變長度的Unicode字符類型,n的取值為1~4000。nchar[(n)]存放固定長度的Unicode字符類型,n的取值為1~4000。ntext
、Nvarchar(Max)最多存放包含個230-1個Unicode字符。注意:nchar、nvarchar和ntext的用法分別與char、varchar和text相同,只是Unicode支持的字符范圍更大,存儲Unicode字符所需的空間更大(Unicode數(shù)據(jù)中的每個字符都使用兩個字節(jié)進(jìn)行存儲)。
Unicode字符數(shù)據(jù)類型貨幣數(shù)據(jù)類型包括money和smallmoney兩種。money用于存儲貨幣值,存儲在money數(shù)據(jù)類型中的數(shù)值以一個正數(shù)部分和一個小數(shù)部分存儲在兩個4字節(jié)的整型值中,存儲范圍-9223372136854775808~9223372136854775807,精確到貨幣單位的1%
。smallmoney與money數(shù)據(jù)類型類似,但范圍比money數(shù)據(jù)類型小,其存儲范圍為-2147483468到2147483467之間,精確到貨幣單位的1%。系統(tǒng)數(shù)據(jù)類型--貨幣型位數(shù)據(jù)類型bit位數(shù)據(jù)類型,其數(shù)據(jù)有兩種取值:0和1,長度為1字節(jié)。在輸入0以外的其他值時,系統(tǒng)均把它們當(dāng)1看待。適用于判斷真/假的場合,通常用來存放布爾數(shù)據(jù)。
Uniqueidentifier用于存儲一個16字節(jié)長的二進(jìn)制數(shù)據(jù)類型,它是SQLServer根據(jù)計算機網(wǎng)卡地址和CPU時鐘使用NewId()函數(shù)產(chǎn)生的全局惟一標(biāo)識符代碼(GloballyUniqueIdentifier,簡寫為GUID)?Timestamp時間戳數(shù)據(jù)類型,它提供數(shù)據(jù)庫范圍內(nèi)的惟一值,反應(yīng)數(shù)據(jù)庫中數(shù)據(jù)修改的相對順序,相當(dāng)于一個單調(diào)上升的計數(shù)器。當(dāng)它所定義的列在更新或插入數(shù)據(jù)時會被自動更新,一個計數(shù)值將自動地添加到此Timestamp數(shù)據(jù)列中,該值大于以前的值。用戶不能直接設(shè)置timestamp列的值,一個表只能有一個timestamp列??梢允褂胻imestamp列的值判斷自從上次檢索之后是否有其他進(jìn)程修改數(shù)據(jù)行。系統(tǒng)數(shù)據(jù)類型--其它數(shù)據(jù)類型Table用于存儲對表或者視圖處理后的臨時結(jié)果集。Sql_variant(可變數(shù)據(jù)類型):通配符數(shù)據(jù)類型,用于存儲除文本、圖形數(shù)據(jù)和Timestamp類型數(shù)據(jù)外的其他SQLServer數(shù)據(jù)。
XML可以存儲可擴展標(biāo)記文本數(shù)據(jù)的數(shù)據(jù)類型。利用它可以將XML實例存儲在表列中或者XML類型的變量中。
Cursor這是變量或存儲過程OUTPUT參數(shù)的一種數(shù)據(jù)類型,表示對游標(biāo)的引用,不能用于列定義。系統(tǒng)數(shù)據(jù)類型--其它數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型SQLSERVER允許用戶自定義數(shù)據(jù)類型,用戶自定義數(shù)據(jù)類型是建立在SQLServer系統(tǒng)數(shù)據(jù)類型基礎(chǔ)上的。當(dāng)多個表的列中要存儲同樣類型的數(shù)據(jù),且想確保這些列具有完全相同的數(shù)據(jù)類型、長度和為空性時,可使用用戶定義數(shù)據(jù)類型。例如,可以基于smalldatetime
數(shù)據(jù)類型創(chuàng)建名為birthday的用戶定義數(shù)據(jù)類型,用來刻畫“出生日期”字段。定義用戶自定義數(shù)據(jù)類型時,需要指定該類型的名稱,依賴的系統(tǒng)數(shù)據(jù)類型,及是否允許為空值。創(chuàng)建用戶定義的數(shù)據(jù)類型的方法有兩種:(1)使用對象資源管理器(2)使用系統(tǒng)存儲過程sp_addtype
通過對象資源管理器創(chuàng)建用戶定義的數(shù)據(jù)類型在“對象資源管理器”窗口中,選擇“數(shù)據(jù)庫”節(jié)點在選擇要在其中創(chuàng)建用戶定義數(shù)據(jù)類型的數(shù)據(jù)庫”studentCourse”“可編程性”節(jié)點“類型”節(jié)點“用戶定義數(shù)據(jù)類型”節(jié)點,右擊“用戶定義數(shù)據(jù)類型”,在彈出的快捷菜單中選擇“新建用戶定義數(shù)據(jù)類型"命令。輸入新建數(shù)據(jù)類型的名稱。在“數(shù)據(jù)類型”列表中,選擇基礎(chǔ)數(shù)據(jù)類型。如“精度”處于活動狀態(tài),若要更改此數(shù)據(jù)類型可存儲的最大數(shù)據(jù)長度,請鍵入另外的值。若要允許此數(shù)據(jù)類型接受空值,請選擇“允許空值”命令。在"規(guī)則"和"默認(rèn)值"列表中選擇一個規(guī)則或默認(rèn)值(若有)以將其綁定到用戶定義數(shù)據(jù)類型上。語法如下:sp_addtype
type_name,phystype[(length)|([precision,scale]),null|notnull|identity]其中:type_name,用戶定義的數(shù)據(jù)類型的名字;Phystype,用戶自定義數(shù)據(jù)類型所基于的系統(tǒng)數(shù)據(jù)類型,可以包括長度、精度、標(biāo)度;null|notnull|identity,用戶自定義數(shù)據(jù)類型的性質(zhì),分別為允許空值、不允許為空值、具有標(biāo)識列性質(zhì)。默認(rèn)為notnull。利用系統(tǒng)存儲過程創(chuàng)建用戶定義數(shù)據(jù)類型下面創(chuàng)建一個名為birthday的用戶定義數(shù)據(jù)類型(基于smalldatetime),不允許取空值。USEStudentCourseEXECsp_addtypebirthday,datetime,‘NOTNULL'下面的示例為國內(nèi)及國際電話和傳真號碼分別創(chuàng)建兩個用戶定義的數(shù)據(jù)類型telephone和fax。USEStudentCourseEXECsp_addtypetelephone,'varchar(24)','NOTNULL'EXECsp_addtypefax,'varchar(24)','NULL'注意用戶定義的數(shù)據(jù)類型名稱在數(shù)據(jù)庫中必須是唯一的,但是名稱不同的用戶定義的數(shù)據(jù)類型可以有相同的定義。執(zhí)行sp_addtype
創(chuàng)建的用戶定義的數(shù)據(jù)類型,會添加到當(dāng)前數(shù)據(jù)庫的systypes
系統(tǒng)表中。如果想在所有新創(chuàng)建的數(shù)據(jù)庫中都可使用這一用戶定義的數(shù)據(jù)類型,可將其添加到model數(shù)據(jù)庫中。在創(chuàng)建了用戶數(shù)據(jù)類型之后,可在CREATETABLE或ALTERTABLE中使用它,也可以將默認(rèn)值和規(guī)則綁定到用戶定義的數(shù)據(jù)類型。不能使用timestamp數(shù)據(jù)類型來定義用戶定義的數(shù)據(jù)類型。刪除用戶定義的數(shù)據(jù)類型如果沒有任何表或其它數(shù)據(jù)庫對象引用某用戶定義數(shù)據(jù)類型時,可除去這種數(shù)據(jù)類型。(1)使用對象資源管理器
“數(shù)據(jù)庫”節(jié)點在選擇要在其中刪除用戶定義數(shù)據(jù)類型的數(shù)據(jù)庫”studentCourse”“可編程性”節(jié)點“類型”節(jié)點“用戶定義數(shù)據(jù)類型”節(jié)點,選中要刪除的用戶定義數(shù)據(jù)類型,右擊在彈出的快捷菜單中選擇“刪除"命令。(2)使用系統(tǒng)存儲過程查看、重命名、刪除用戶定義的數(shù)據(jù)類型。 sp_helptype_name查看用戶自定義數(shù)據(jù)類型的特征;sp_rename
oldname,newname
給用戶自定義數(shù)據(jù)類型重新命名;sp_droptypetype_name刪除一個已經(jīng)定義且未被使用的用戶自定義數(shù)據(jù)類型。例如:USEStudentCourseEXECsp_droptype'birthday'字段數(shù)據(jù)類型的確定原則為一個字段選擇數(shù)據(jù)類型時,應(yīng)選擇能支持用戶可能在該字段存儲的所有數(shù)據(jù)的數(shù)據(jù)類型,同時所需的空間量最小。可參照以下原則:為字段選擇一個合適的長度,如果字段值的長度不需要大幅改變,就使用固定長度數(shù)據(jù)類型(char和Nchar),例如學(xué)號、課程號等。如果屬性值的長度需要大幅改變,就使用可變長度數(shù)據(jù)類型(Varchar和Nvarchar),例如存儲學(xué)生簡歷等。如果用戶存儲的字符串來源于不同的國家,就使用Unicode數(shù)據(jù)類型。3.1.3約束的類型(1)非空值約束(NotNull):限制字段不接受NULL值,即當(dāng)對表進(jìn)行插入(INSERT)操作時,非空值約束的字段必須給出確定的值??罩凳侵肝刺顚?、未知、不可用或?qū)⒃谝院筇砑拥臄?shù)據(jù),并不等價于空字符串或數(shù)值0。(2)默認(rèn)約束(Default):為字段定義一個默認(rèn)值,輸入數(shù)據(jù)時若沒有為該字段提供值,則將所定義的默認(rèn)值提供給該列。默認(rèn)值可以是常量,也可以是表達(dá)式。(3)惟一性約束(Unique):限制約束的字段,不允許有兩條記錄具有相同的非空值。但該字段可以出現(xiàn)多個空值。(4)主鍵約束(PrimaryKey):標(biāo)識字段或字段的組合為主鍵,主鍵的值惟一標(biāo)識表中的每一條記錄。在一個表中,不能有兩條記錄包含相同的主鍵值,主鍵的各組成字段的值也不能為NULL。(5)外鍵約束(ForeignKey):通常是根據(jù)從另一個表中某字段(通常是主鍵)獲得的數(shù)據(jù)集合來進(jìn)行有效性判定。這時,被約束字段所在的表稱為外鍵表,提供數(shù)據(jù)的表稱為主鍵表或引用表,提供數(shù)據(jù)的字段稱為引用字段,所提供的數(shù)據(jù)稱為鍵值。外鍵常用來標(biāo)識表與表之間的關(guān)系。外鍵與關(guān)系中的外關(guān)鍵字是等價的。
(6)檢查約束(check):一個檢查約束由一個關(guān)鍵字CHECK后面跟著一個放在圓括弧里的布爾表達(dá)式組成。檢查約束允許用戶聲明該字段里的數(shù)值必須滿足該布爾表達(dá)式。3.2表的創(chuàng)建兩種方法:1.使用對象資源管理器創(chuàng)建表2.使用CREATETABLE語句創(chuàng)建表使用CREATETABLE語句創(chuàng)建表創(chuàng)建一個基本表要對基本表命名,定義表的每個列,并定義表的完整性約束條件。CREATETABLE語句格式如下:
CREATETABLE<表名>(<列定義>,…,<列定義>[,<表約束定義>,…,<表約束定義>]);定義基本表—列定義<列定義>定義每個列的名稱、類型、缺省值和列上的約束條件:
<列定義>::=<列名><數(shù)據(jù)類型>[DEFAULT<缺省值>][<列約束定義>,…,<列約束定義>]可選短語“DEFAULT<缺省值>”定義列上的缺省值,<缺省值>是一個特定值或NULL;每個列上可定義零個或或多個約束條件,約束列的取值定義基本表—列約束定義<列約束定義>
::=
[CONSTRAINT<約束名>]<列約束><列約束>
::={NOTNULL|PRIMARYKEY|UNIQUE|
CHECK(<條件>)}其中:NOTNULL:該列不允許取空值,不加NOTNULL限制時,該列可以取空值。PRIMARYKEY:指明該列是主碼,其值非空、惟一。UNIQUE:該列上的值必須惟一,相當(dāng)于說明該列為候選碼CHECK(<條件>):<條件>是一個涉及該列的布爾表達(dá)式,指明該列的值必須滿足的條件,
定義基本表—表約束定義
一個表可包含零個或多個<表約束定義>,用于定義主碼、候選碼、外碼和表上的其它約束。表約束定義定義形式如下:[CONSTRAINT<約束名>]<表約束><表約束>::={PRIMARYKEY(A1,…,Ak)|
UNIQUE(A1,…,Ak)|
CHECK(<條件>)|FOREIGNKEY(A1,…,Ak)REFERENCES<外表名>(<外表主碼>)<參照觸發(fā)動作>]
}表約束定義說明PRIMARYKEY(A1,…,Ak):說明屬性列A1,…,Ak構(gòu)成該關(guān)系的主碼。當(dāng)主碼只包含一個屬性時,通常用列約束定義主碼。UNIQUE(A1,…,Ak):說明屬性列A1,…,Ak上的值必須惟一;相當(dāng)于說明A1,…,Ak構(gòu)成該關(guān)系的候選碼。當(dāng)候選碼只包含一個屬性時,通常用列約束定義候選碼。CHECK(<條件>):說明該表上的一個完整性約束條件。通常<條件>是涉及該表一個或多個列的布爾表達(dá)式表約束定義說明外碼比較復(fù)雜:
FOREIGNKEY(A1,…,Ak)REFERENCES<外表名>(<外表主碼>)[<參照觸發(fā)動作>]屬性A1,…,Ak是關(guān)系(表)的外碼<外表名>給出被參照關(guān)系的表名<外表主碼>給出被參照關(guān)系的主碼<參照觸發(fā)動作>說明違反參照完整性時需要采取的措施:其中<參照動作>可以是CASCADE、SETNULL、SETDEFAULT和NOACTION
之一,例4.1下面的語句創(chuàng)建教師表TeacherCREATETABLETeacher
(教師號 CHAR(7)PRIMARYKEY,
姓名 CHAR(10)NOTNULL,
性別CHAR(2)CHECK(性別=‘男’OR性別=‘女’),
出生日期DATETIME,
職稱 CHAR(6),
所在系號 CHAR(4),
FOREIGNKEY(所在系號)REFERENCES系(系號));CREATETABLE語句的較完整格式CREATETABLE[數(shù)據(jù)據(jù)庫名.]數(shù)據(jù)庫表名(列名數(shù)據(jù)類型[NOTNULL][identity(初值,步長)][DEFAULT默認(rèn)值][UNIQUE][PRIMARYKEY]
[CLUSTERED|NONCLUSTERED]
[,...n][,列名AS計算列值的表達(dá)式[,…n]][,[CONSTRAINT約束名]PRIMARYKEY(屬性名)[ASC|DESC][,...n]][,[CONSTRAINT約束名]CHECK(邏輯表達(dá)式)[,n]][,[CONSTRAINT約束名]FOREIGNKEY(外鍵屬性)REFERENCES參照表(參照屬性)
[ONDELETE{CASCADE|NOACTION}]
[ONUPDATE{CASCADE|NOACTION}][,...n][,[CONSTRAINT約束名]UNIQUE(屬性名)[,...n])[ON{文件組名|DEFAULT}]【例】創(chuàng)建數(shù)據(jù)表book,由書號、書名、出版社、出版日期、單價、數(shù)量、總價(單價*數(shù)量)、電子郵件地址字段組成。其中:書號列定義為主鍵并且為系統(tǒng)自動編號即標(biāo)識列,種子值(起始值)為1000,增量為1。要求出版社字段的值只能是高教、浙大、電子和中央四個之一。電子郵件字段中必須包含@符號。單價必須大于0,數(shù)量必須大于等于0,出版日期的默認(rèn)值設(shè)置為當(dāng)前日期函數(shù)。說明(1)Identity屬性:可將表中的某列指定為自動增長列,當(dāng)表中新增行時,系統(tǒng)自動為新行在該列上填充新值。標(biāo)識屬性有兩個參數(shù):初值和增量(步長)。每個表只能有一個自動增長列,該列的數(shù)據(jù)類型必須定義為整型或不帶小數(shù)的decimal和numeric型。設(shè)置book表中的屬性“書號”為Identity屬性CREATETABLEbook(書號intidentity(1000,1),……)(2)計算所得的列該列由同一個表中其他列通過“計算列值的表達(dá)式”計算得到,并不存儲具體數(shù)據(jù)注意:計算列的值不能修改計算列不能使用默認(rèn)值約束、外鍵約束及非空值約束例如:設(shè)置book表中屬性“總價”為計算所得到的列CREATETABLEbook(……總價AS單價*數(shù)量,……)(3)Cheak約束:每個列可有一個或多個check約束,約束條件是邏輯表達(dá)式。列級check約束只能引用該列本身,表級check約束可引用同一個表中的列。CREATETABLEbook(……單價smallintcheck(單價>0),數(shù)量smallintcheck(數(shù)量>=0),電子郵件地址varchar(25)check(電子郵件地址like'%@%'),check(出版社in('高教','浙大','電子','中央'),……)Like的匹配方式LIKE:主要用于在邏輯表達(dá)式中對字符串進(jìn)行比較,它的否定形式為NOTLIKE。語法格式匹配表達(dá)式
[NOT]LIKE模式[ESCAPEescape_character
]ESCAPE
子句定義轉(zhuǎn)義符:搜索包含一個或多個特殊通配符的字符串4種字符串匹配方式見下表通配符描述示例%包含零個或更多字符的任意字符串WHEREtitlelike‘%computer%’將查找書名包含單詞computer的所有書名_(下劃線)任何單個字符WHEREau_fnamelike‘_ean’將查找以ean
結(jié)尾的所有4個字母的名字(Dean、Sean等)[]范圍([a-d])或集合([abcd])中的任何單個字符WHEREau_lnamelike‘[C-P]arsen’將查找以arsen
結(jié)尾且以介于C與P之間的任何單個字符開始的作者姓氏,例如Carsen、Larsen等[^]不屬于指定范圍([a-d])或集合([abcd)中任何單個字符WHEREau_lnamelike‘de[^i]%’將查找以de開始且其后的字母不為i的所有作者的姓氏。創(chuàng)建book表的完整命令如下:CREATETABLEbook(書號intidentity(1000,1)PRIMARYKEY,書名varchar(20)notnull,出版社varchar(20),出版日期datetimeDEFAULT(getdate()),單價smallintcheck(單價>0),數(shù)量smallintcheck(數(shù)量>=0),總價as單價*數(shù)量,電子郵件varchar(25),check(電子郵件like'%@%'),check(出版社in('高教','浙大','電子','中央')))示例為studentCourse數(shù)據(jù)庫定義如下三個關(guān)系數(shù)據(jù)表:列名數(shù)據(jù)類型長度允許空默認(rèn)值是否主鍵學(xué)號char5√姓名char8性別char2男出生日期datetime1980-01-01系varchar20電話
char8√學(xué)生基本信息表S列名數(shù)據(jù)類型長度允許空默認(rèn)值是否主鍵課程號char3
√課程名varchar20學(xué)分smallint√預(yù)選課程號char3√教師char8√課程數(shù)據(jù)表C學(xué)生選課數(shù)據(jù)表SC列名數(shù)據(jù)類型長度允許空默認(rèn)值是否主鍵學(xué)號char5√課程號char3成績SMALLINT2√數(shù)據(jù)庫的完整性定義
列名UNIQUECHECKFOREIGN學(xué)號由a-z間字母開頭,后面只能取0-9之間的數(shù)字,限5位性別性別的值只能取‘男’或‘女’電話
電話的格式為021-7777學(xué)生基本信息表S約束列名UNIQUECHECKFOREIGN課程號由字母C開頭,后2位只能取0-9之間的數(shù)字預(yù)選課程號參照C.課程號課程數(shù)據(jù)表C約束列名UNIQUECHECKFOREIGN課程號√參照C.課程號學(xué)號參照S.學(xué)號成績成績只能在0到100之間或者是空值學(xué)生選課數(shù)據(jù)表SC約束1)創(chuàng)建學(xué)生基本信息表S的語句如下:CREATETABLES(
學(xué)號Char(5)
NOTNULL,
姓名Char(8)
NOTNULL,
性別Char(2)
NOTNULL
default('男'),
出生日期
DatetimeNOTNULLDEFAULT('19800101'),
系
Varchar(20),
電話
Char(8),
CHECK(學(xué)號
Like'[A-Z][0-9][0-9][0-9][0-9]'),
CHECK(性別='女'OR性別='男'),
CHECK(電話
Like'[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'),CONSTRAINTPK_SPRIMARYKEYCLUSTERED(學(xué)號ASC))ON[PRIMARY]2)創(chuàng)建課程表C的語句如下:CREATETABLEC(
課程號Char(3)NOTNULL,
課程名Varchar(20)
NOTNULL,
學(xué)分
Smallint
NULL,
預(yù)選課程號
Char(3)
NULL,
教師
Char(8)
NULL,
CONSTRAINTFK_PcnoFOREIGNKEY(預(yù)選課程號)
REFERENCESC(課程號),CONSTRAINTCK_CnoCHECK(課程號
Like'C[0-9][0-9]'),CONSTRAINTPK_CPRIMARYKEYCLUSTERED(課程號ASC))ON[PRIMARY]3)創(chuàng)建學(xué)生選課數(shù)據(jù)表SC的語句如下:CREATETABLESC
(
學(xué)號Char(5)NOTNULL,課程號Char(3)NOTNULL,成績SmallintNULL,FOREIGNKEY(課程號)REFERENCESC(課程號),FOREIGNKEY(學(xué)號)REFERENCESS(學(xué)號),CHECK(成績>=(0)AND成績<=(100)OR成績
ISNULL),PRIMARYKEYCLUSTERED(學(xué)號ASC,課程號
ASC)
)也可將約束定義在列級,各約束名由系統(tǒng)自動產(chǎn)生:1)創(chuàng)建學(xué)生基本信息表S的語句如下:CREATETABLES(
學(xué)號Char(5)
NOTNULL
CHECK(學(xué)號
Like'[A-Z][0-9][0-9][0-9][0-9]')
PrimarykeyClustered,
姓名Char(8)
NOTNULL,
性別Char(2)
NOTNULL
default('男')
CHECK(性別='女'
OR性別='男'),
出生日期
DatetimeNOTNULLDEFAULT('19800101'),
系
Varchar(20)
NOTNULL,
電話
Char(8)
NULL
CHECK(電話
Like'[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'))ON[PRIMARY]2)創(chuàng)建課程表C的語句如下:CREATETABLEC(
課程號Char(3)NOTNULL
CHECK(課程號
Like'C[0-9][0-9]')
PRIMARYKEYCLUSTERED,
課程名Varchar(20)
NOTNULL,
學(xué)分
Smallint
NULL,
預(yù)選課程號
Char(3)
NULL
FOREIGNKEY(預(yù)選課程號)
REFERENCESC(課程號),
教師
Char(8)
NULL,)ON[PRIMARY]3)創(chuàng)建學(xué)生選課數(shù)據(jù)表SC的語句如下:CREATETABLESC(
學(xué)號Char(5)NOTNULL
FOREIGNKEY(學(xué)號)REFERENCESS(學(xué)號),課程號Char(3)NOTNULL
FOREIGNKEY(課程號)REFERENCESC(課程號),
成績SmallintNULL
CHECK(成績>=(0)AND成績<=(100)OR成績
ISNULL),PRIMARYKEYCLUSTERED(學(xué)號ASC,課程號
ASC))使用對象資源管理器創(chuàng)建表步驟如下:1、在【對象資源管理器】窗口中,展開的“數(shù)據(jù)庫”節(jié)點,右擊需在其中創(chuàng)建數(shù)據(jù)表的數(shù)據(jù)庫studentcourse的【表】項,在出現(xiàn)的快捷菜單中選擇【新建表】,出現(xiàn)表設(shè)計器窗口。2、在【列名】中依次輸入列名,在【數(shù)據(jù)類型】中選擇數(shù)據(jù)類型,并選擇各個列是否允許空值,也可在下部的【列屬性】對話框中修改某列的屬性:包括標(biāo)識identity屬性、計算所得到的列、默認(rèn)值等,如下圖示3、選中要設(shè)為主鍵的行,單擊工具欄上的【設(shè)置主鍵】按鈕或右擊并在彈出的快捷菜單中選擇【設(shè)置主鍵】命令。4、單擊工具欄上的【管理check約束】按鈕或在表設(shè)計器中右擊在彈出的快捷菜單中選擇【check約束】命令,在彈出的“check約束”對話框中設(shè)置check約束(添加、刪除,關(guān)閉)。5、單擊工具欄中的【保持】按鈕,出現(xiàn)【選擇名稱】對話框,輸入表名,單擊【確定】,該表出現(xiàn)在【對象資源管理器】窗口的【表】項下【例】創(chuàng)建數(shù)據(jù)表book【例】創(chuàng)建數(shù)據(jù)庫“studentcourse”的學(xué)生基本信息表S、課程表C、選課表SC6、若要在多個表中設(shè)置外鍵關(guān)系,可單擊工具欄上的【關(guān)系】按鈕或在表設(shè)計器中右擊在彈出的快捷菜單中選擇【關(guān)系】命令,設(shè)置各表之間的外鍵關(guān)系7、單擊【外鍵關(guān)系】對話框中【表和列規(guī)范】右邊的按鈕,在彈出的【表和列】對話框中選擇主鍵表和外鍵表,設(shè)置外鍵關(guān)系,返回【外鍵關(guān)系】對話框,在該對話框的【標(biāo)識】中更改外鍵的名稱,完成外鍵的設(shè)置。查看表信息和屬性1.查看表數(shù)據(jù)啟動SQLServerManagementStudio,選擇數(shù)據(jù)庫,右擊要打開的表,選擇“打開表”命令,在右邊區(qū)域中將顯示表中所有的數(shù)據(jù)。2.查看表屬性啟動SQLServerManagementStudio,選擇數(shù)據(jù)庫,右擊要打開的表,選擇“屬性”命令,在右邊區(qū)域中將顯示表的屬性信息?;騟xecsp_help
表名修改數(shù)據(jù)表結(jié)構(gòu)1.利用對象資源管理器增加(刪除)列和修改列增加列操作步驟:(1)右擊要修改的表,選擇“修改”命令,打開【表設(shè)計器】窗口。(2)若要在固定列之前加入新屬性,可在該列上右擊,選擇“插入列”。然后輸入列名以及相關(guān)設(shè)置。
2)刪除列操作選擇要刪除的列,右擊彈出的快捷菜單中選擇“刪除列”命令:3)修改列:在【表設(shè)計器】中選擇要修改的列,更改數(shù)據(jù)類型,設(shè)置identity屬性,及默認(rèn)值等2.利用T-SQL語言修改表【格式】:
ALTERTABLE<表名>{ALTERCOLUMN<列名>數(shù)據(jù)類型(寬度)
[NULL|NOTNULL]|ADD<列名>數(shù)據(jù)類型(寬度)[NULL|NOTNULL][約束][,…n]|ADD列名AS計算列值的表達(dá)式|DROPCOLUMN[<列名>[CASCADE︱RESTRICT]][,…n]|ADD
<table_constraint>|DROP[CONSTRAINT<約束名>|ALL][,…n]}2)說明ALTERCOLUMN:修改指定列。列的修改不能與列或表的其他定義相沖突。如某列的默認(rèn)值為字符串,則數(shù)據(jù)類型不能更改為非字符串類型,要想修改必須先刪除默認(rèn)約束。DROPCOLUMN[<列名>[CASCADE︱RESTRICT]刪除指定列:CASCADE表示級聯(lián)刪除,即依賴于該列的數(shù)據(jù)庫對象(如涉及該列的視圖)一并刪除RESTRICT表示受限,僅當(dāng)沒有依賴于該列的數(shù)據(jù)庫對象時刪除才能成功【例】數(shù)據(jù)庫“studentcourse”中S表的系屬性修改為char(25),增加一個入學(xué)時間字段,它的數(shù)據(jù)類型為datetime,并設(shè)置默認(rèn)值為getdate(),最后刪除入學(xué)時間字段。方法一:使用SQLServerManagementStudio方法二:使用T-SQL命令。ALTERTABLESALTERCOLUMN系char(25)GoALTERTABLESADD入學(xué)時間datetime
DEFAULT(getdate())Go【例】數(shù)據(jù)庫“studentcourse”中的S表增加一個年齡字段,該字段由出生日期字段,結(jié)合當(dāng)前系統(tǒng)日期計算產(chǎn)生。Add年齡
asyear(getdate())-year(出生日期)將學(xué)生表S的性別默認(rèn)值修改為‘女’AltertableSALTERCOLUMN性別default('女')修改表的名稱方法一:使用對象資源管理器右擊要重命名的表,選擇【重命名】命令,在彈出的【重命名】窗口中輸入新表名。方法二:使用T-SQL命令:
sp_rename<原數(shù)據(jù)表名>,<新數(shù)據(jù)表名>如:EXECsp_rename'book','書籍資料'刪除表1.使用對象資源管理器刪除表右擊要刪除的表,選擇“刪除”命令。
2.使用DROPTABLE語句刪除表:DROPTABLE表名[,…n]例如:droptables刪除表時,表上的規(guī)則或默認(rèn)值將解除綁定,任何與表關(guān)聯(lián)的約束或觸發(fā)器將自動刪除。定義有外鍵約束的表必須先刪除外鍵約束,才能刪除系統(tǒng)表不能使用DROPTABLE語句刪除。3.3數(shù)據(jù)表的操作使用對象資源管理器插入、修改與刪除表中的數(shù)據(jù)選中要插入數(shù)據(jù)的表名,單擊鼠標(biāo)右鍵,在出現(xiàn)的快捷菜單中選中【打開表】,將會出現(xiàn)一個窗口供用戶按行輸入數(shù)據(jù)。輸入結(jié)束后,直接關(guān)閉該窗口就能將用戶輸入寫入數(shù)據(jù)庫中。2.使用T-SQL語句插入、修改與刪除表中的數(shù)據(jù)1)插入數(shù)據(jù)【格式】INSERTINTO數(shù)據(jù)表名(列名表)VALUES(元組值)INSERTINTO數(shù)據(jù)表名(列名表)SELECT查詢語句2)功能向指定數(shù)據(jù)表的屬性列插入數(shù)據(jù),VALUES后跟的元組值為屬性列提供數(shù)據(jù)。其中列名表中的屬性排列順序和VALUES后跟的元組值的排列順序要一致。對應(yīng)的數(shù)據(jù)類型要一致。如果沒有指定列名表,則表示數(shù)據(jù)表中的所有屬性列?!纠?】使用屬性列顯示指定插入到每個列的值
INSERTINTOs(學(xué)號,姓名,性別,出生日期,系)VALUES('L0401','張云龍','男','1987-11-11',‘IS')Go【例2】將查詢結(jié)果插入數(shù)據(jù)表INSERTINTOSCSELECT'L0401',課程號,80FROMCGo2)修改數(shù)據(jù)【格式】UPDATE表名SET列名=值表達(dá)式[,列名=值表達(dá)式…][WHERE條件表達(dá)式]【功能】將指定表中滿足WHERE子句條件的記錄的修改為指定屬性值。其中值表達(dá)式可以是常量、變量、表達(dá)式。若缺省WHERE,則修改表中的所有元組。但在進(jìn)行修改操作時,需注意數(shù)據(jù)庫的一致性。【例】更新S表中的出生日期列中的值變?yōu)樵錾掌谥导?UPDATESSET出生日期=出生日期+1【例】將選C01課程的學(xué)號是L0401的學(xué)生的成績改成85分UPDATESCSET成績=85WHERE課程號='C01'AND學(xué)號='L0401‘GO【例】將張云龍學(xué)生的成績減少5分UPDATESCSET成績=成績-5WHERE學(xué)號IN(SELECT學(xué)號FROMSWHERE姓名='張云龍')3)刪除數(shù)據(jù)【格式】DELETEFROM表名[WHERE條件表達(dá)式]【例】刪除學(xué)號為L0401的學(xué)生選課信息DELETEFROMSCWhere學(xué)號='L0401’【例】從SC表中刪除所有行DELETEFROMSC4)清空表中數(shù)據(jù)TruncateTable表名3.4數(shù)據(jù)完整性概述1.完整性的概念數(shù)據(jù)完整性是指數(shù)據(jù)的正確性、有效性、一致性和相容性。由于數(shù)據(jù)庫是一個動態(tài)的集合,數(shù)據(jù)不斷地被插入和被修改,因此由于主觀或客觀的原因,可能破壞數(shù)據(jù)庫的數(shù)據(jù)完整性。2.完整性分類
在SQLServer2005中,數(shù)據(jù)完整性分成四類:實體完整性、域完整性、參照完整性和用戶自定義完整性域完整性域完整性也可稱為列完整性。關(guān)系中每個屬性列都必須在一個值域上取值。保證該列具有正確的數(shù)據(jù)類型、格式以及有效的數(shù)據(jù)范圍。
例如,向SelectCourse庫的SC表的成績列輸入數(shù)據(jù)時,不能出現(xiàn)字符,也不能輸入小于0或大于100的數(shù)值。域完整性要求DBMS對新插入的值進(jìn)行域完整性檢查,還要對查詢進(jìn)行檢測,從而保證比較是有意義的域完整性在原理上類似于編程語言中變量的類型,就像不同的變量可以有相同的數(shù)據(jù)類型一樣,不同的屬性可以有相同的域。域完整性SQLSERVER提供了一些標(biāo)準(zhǔn)數(shù)據(jù)類型(域),也允許用戶根據(jù)需要定義新的域,聲明一個域包括(1)域值類型:包括數(shù)據(jù)的類型、長度、單位、精度等例如,可以規(guī)定PersonName(人名)域的數(shù)據(jù)類型是字符型,長度為8;RMB(人民幣)域和Dollars(美元)域的類型都是長度為12位十進(jìn)制數(shù),小數(shù)點后有兩位(2)缺省值。例如可以規(guī)定RMB和Dollars域的缺省值為0.00(3)域值的格式。例如可以規(guī)定出生日期的格式為:YYYY.MM.DD(4)對取值范圍或取值集合的約束例如,可以規(guī)定性別域的取值集合為{男,女},學(xué)生成績域的取值范圍為[0,100]。域完整性由于域完整性規(guī)定不同域上的值不能比較,故可使用用戶自定義的域說明屬性防止無意義的比較:例如,如果用字符串類型說明屬性Dname(部門名)和Ename(職工名),則比較Dname=Ename是合法的,但這種比較沒有實際意義如果Dname說明為部門域,Ename說明為人名域,則系統(tǒng)可以通過域約束檢查,發(fā)現(xiàn)比較Dname=Ename不合法。完整性機制
為了保證數(shù)據(jù)完整性,DBMS應(yīng)能對數(shù)據(jù)庫進(jìn)行數(shù)據(jù)完整性控制。在SQLServer2005中,提供了如下機制對數(shù)據(jù)完整性進(jìn)行控制:約束默認(rèn)值規(guī)則觸發(fā)器等定義約束是SQLServer2005實現(xiàn)數(shù)據(jù)完整性的主要手段:
定義主鍵約束——實體完整性default約束——域完整性定義外鍵約束——參照完整性CHECK約束——用戶自定義完整性默認(rèn)值在SQLServer2005中,在表中插入數(shù)據(jù)行時,系統(tǒng)自動為沒有指定數(shù)據(jù)的列提供事先定義的默認(rèn)值。使用默認(rèn)值有兩種方法:(1)在創(chuàng)建表時指定默認(rèn)值(DEFAULT約束)(2)使用CREATEDEFAULT語句創(chuàng)建默認(rèn)值對象,然后使用存儲過程將該默認(rèn)值對象綁定到指定的列上。
創(chuàng)建默認(rèn)值語法格式如下:CREATEDEFAULT默認(rèn)值名稱AS常量表達(dá)式
與DEFAULT約束不同的是,使用CREATEDEFAULT語句創(chuàng)建的默認(rèn)值是一種數(shù)據(jù)庫對象,在數(shù)據(jù)庫中只需定義一次后,就可以被一次或多次應(yīng)用于任意表中的一列或多列,還可以用于用戶自定義的數(shù)據(jù)類型。綁定默認(rèn)值對象默認(rèn)值對象創(chuàng)建后必須將其綁定到某列或用戶自定義的數(shù)據(jù)類型上才能使用。綁定可用存儲過程sp_bindefault,語法格式如下:
sp_bindefault[@defname=]'default',[@objname=]'object_name'[,[@futureonly=]'futureonly_flag']【功能】把默認(rèn)值對象default綁定到object_name指定的列上或用戶自定義數(shù)據(jù)類型上。【例】為studentCourse數(shù)據(jù)庫創(chuàng)建一個名為Sex_Default的默認(rèn)值對象,值為“男”。然后把該默認(rèn)值對象綁定到S表的性別字段上。CREATEDefaultSex_DefaultAs'男'GOEXECsp_bindefault'Sex_Default','S.性別'GOEXECsp_bindefault'Sex_Default','Teachers.性別'GO綁定默認(rèn)對象—參數(shù)說明[@futureonly=]‘futureonly_flag‘選項僅在將默認(rèn)值對象綁定到用戶定義的數(shù)據(jù)類型時才使用。將此參數(shù)設(shè)置為futureonly
時,它會防止現(xiàn)有的屬于此數(shù)據(jù)類型的列采用新的默認(rèn)值。示例【例】如已創(chuàng)建了用戶定義的數(shù)據(jù)類型birthday,且表S中的‘出生日期’字段使用birthday數(shù)據(jù)類型,創(chuàng)建一默認(rèn)值birth_default,取值為“1981-1-1”。然后把該默認(rèn)值對象綁定到birthday數(shù)據(jù)類型上。--創(chuàng)建了用戶定義的數(shù)據(jù)類型birthday,USEStudentcourseEXECsp_addtypebirthday,datetime,'NOTNULL'--將S表中的‘出生日期’字段修改為birthday數(shù)據(jù)類型altertablesaltercolumn出生日期
birthday--創(chuàng)建一默認(rèn)值birth_default,將它綁定到birthday數(shù)據(jù)類型上CREATEDefaultbirth_DefaultAs'1981-1-1'GOEXECsp_bindefault'birth_Default','birthday'GO--給s表插入一新行,不提供出生日期值,觀察該字段的取值情況??insertintos(學(xué)號,姓名)values('a1234','aaa')Goselect*froms
where學(xué)號='a1234'當(dāng)某列上同時定義了default約束、并綁定了默認(rèn)值對象時,default約束優(yōu)先。分析--若再創(chuàng)建一新默認(rèn)值birth_default2,取值為“1982-1-1”將它綁定birthday數(shù)據(jù)類型上CREATEDefaultbirth_Default2As'1982-1-1'GOEXECsp_bindefault'birth_Default2','birthday'--給s表插入一新行,不提供出生日期值,觀察該字段的取值情況??insertintos(學(xué)號,姓名)values('b1234','bbb')Goselect*froms
where學(xué)號='b1234'
可以使用sp_bindefault
在不取消現(xiàn)有默認(rèn)值綁定的情況下,將新默認(rèn)值綁定到列或者綁定到用戶定義的數(shù)據(jù)類型,原有默認(rèn)值將被替代。分析--若再創(chuàng)建一新默認(rèn)值birth_default3,取值為“1983-1-1”使用‘futureonly’選項將它綁定birthday數(shù)據(jù)類型上CREATEDefaultbirth_Default3As'1983-1-1'GOEXECsp_bindefault'birth_Default3','birthday','futureonly'--給s表插入一新行,不提供出生日期值,觀察該字段的取值情況??insertintos(學(xué)號,姓名)values('c1234','bbb')Goselect*froms
where學(xué)號='c1234'分析創(chuàng)建如下teacher數(shù)據(jù)表,其中的出生日期字段使用用戶定義的數(shù)據(jù)類型BIRTHDAY:CREATETABLETeacher
(教師號 CHAR(7)PRIMARYKEY,
姓名 CHAR(10)NOTNULL,
性別CHAR(2)CHECK(性別='男'OR性別='女'),
出生日期BIRTHDAY,
職稱 CHAR(6));--給TEACHER表插入一新行,不提供出生日期值,觀察該字段的取值情況??insertintoTEACHER(教師號,姓名)values(‘t1234',‘ttt')Goselect*fromteacher
where學(xué)號=‘t1234'
如果默認(rèn)值和要綁定的列不兼容,那么在試圖插入默認(rèn)值時(不是在綁定時),SQLServer將返回錯誤信息。如:CREATEDefaultScore_DefaultAs
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 華師大版數(shù)學(xué)八年級下冊17.1《變量與函數(shù)》(第2課時)聽評課記錄
- 湘教版數(shù)學(xué)八年級上冊2.3《等腰(邊)三角形的性質(zhì)》聽評課記錄2
- 浙教版數(shù)學(xué)七年級上冊5.4《一元一次方程的應(yīng)用》聽評課記錄
- 人教版地理八年級上冊《土地資源》聽課評課記錄
- 人教版九年級數(shù)學(xué)上冊聽評課記錄本《一元二次方程 四種解法》
- 五年級上冊數(shù)學(xué)口算500題
- 青島版八年級上冊數(shù)學(xué)聽評課記錄《5-1定義與命題》
- 企業(yè)煤氣管道工程安裝合同范本
- 高檔小區(qū)豪華裝修房屋買賣合同范本
- 2025年度企業(yè)內(nèi)部停車位使用及管理協(xié)議模板
- 復(fù)旦中華傳統(tǒng)體育課程講義05木蘭拳基本技術(shù)
- GB/T 13234-2018用能單位節(jié)能量計算方法
- (課件)肝性腦病
- 北師大版五年級上冊數(shù)學(xué)教學(xué)課件第5課時 人民幣兌換
- 工程回訪記錄單
- 住房公積金投訴申請書
- 高考物理二輪專題課件:“配速法”解決擺線問題
- 檢驗科生物安全風(fēng)險評估報告
- 京頤得移動門診產(chǎn)品輸液
- 如何做一名合格的帶教老師PPT精選文檔
- ISO9001-14001-2015內(nèi)部審核檢查表
評論
0/150
提交評論