第03講chp3-表的創(chuàng)建+數(shù)據(jù)+約束_第1頁
第03講chp3-表的創(chuàng)建+數(shù)據(jù)+約束_第2頁
第03講chp3-表的創(chuàng)建+數(shù)據(jù)+約束_第3頁
第03講chp3-表的創(chuàng)建+數(shù)據(jù)+約束_第4頁
第03講chp3-表的創(chuàng)建+數(shù)據(jù)+約束_第5頁
已閱讀5頁,還剩80頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2023/3/31第3章表的創(chuàng)建

(參見第五版教材P82)22023/3/3學習要點數(shù)據(jù)類型

1表結構的創(chuàng)建、修改和刪除2向表中插入、修改和刪除數(shù)據(jù)3約束

4實現(xiàn)數(shù)據(jù)完整性532023/3/33.1表的概念數(shù)據(jù)庫中包含一個或多個表。表是數(shù)據(jù)的集合,是用來存儲數(shù)據(jù)和操作數(shù)據(jù)的邏輯結構。數(shù)據(jù)在表中是按照行和列的格式來組織排列的,每一行代表一條唯一的記錄,每一列代表記錄的一個屬性。例如,一個包含銷售員基本信息的數(shù)據(jù)表,表中每一行代表一名銷售員,每一列分別代表該銷售員的信息,如編號、姓名、性別等。

42023/3/33.2數(shù)據(jù)類型在SQLServer的數(shù)據(jù)表中,列的類型既可以是系統(tǒng)提供的數(shù)據(jù)類型,也可以是用戶自定義的數(shù)據(jù)類型。系統(tǒng)數(shù)據(jù)類型1.二進制數(shù)據(jù)類型2.整數(shù)數(shù)據(jù)類型3.浮點數(shù)據(jù)類型4.精確小數(shù)數(shù)據(jù)類型5.貨幣數(shù)據(jù)類型6.日期/時間數(shù)據(jù)類型7.字符數(shù)據(jù)類型8.unicode數(shù)據(jù)類型9.特殊數(shù)據(jù)類型52023/3/31.二進制數(shù)據(jù)類型binary[n]:固定長度為n個字節(jié)的二進制數(shù)。varbinary[n]:n個字節(jié)可變長的二進制數(shù)。image:可變長的二進制數(shù),用于存儲超過8KB的數(shù)據(jù)。如:word文檔、excel圖表以及圖像等數(shù)據(jù)。最大長度231-1個字符62023/3/32.整數(shù)數(shù)據(jù)類型bit:數(shù)據(jù)的值只能是0或1。int:存儲空間占4個字節(jié)。bigint:存儲空間占8個字節(jié)。smallint:存儲空間占2個字節(jié)。tinyint:存儲空間占1個字節(jié)。

72023/3/33.浮點數(shù)據(jù)類型浮點數(shù)據(jù)類型用于存儲范圍較大的實數(shù)。容易發(fā)生舍入誤差,貨幣運算一般不用它。float:存儲空間占8個字節(jié)。real:存儲空間占4個字節(jié)。82023/3/34.精確小數(shù)數(shù)據(jù)類型decimal(p,s):取值范圍-1038+1~1038-1??梢灾付偽粩?shù)p和小數(shù)位數(shù)s。numeric(p,s):表示范圍最多可達38位??梢灾付偽粩?shù)p和小數(shù)位數(shù)s。例:decimal(6,2)表示最多可存放6位數(shù)字,小數(shù)點后有2位。區(qū)別:numeric類型的可以帶IDENTITY關鍵字。92023/3/35.貨幣數(shù)據(jù)類型money:占8個字節(jié)。精度為19,小數(shù)4位。smallmoney:占4個字節(jié)。精度為10,小數(shù)4位。102023/3/36.日期/時間數(shù)據(jù)類型Datetime:用于存儲日期和時間。占8個字節(jié)。Smalldatetime:日期時間范圍較小。占4字節(jié)。112023/3/37.字符數(shù)據(jù)類型char(n):存放固定長度的字符,每個字符占一個字節(jié),n值不能超過8000。varchar(n):存放可變長度的字符,n值不能超過8000。text:存放數(shù)量龐大的變長字符,最大長度可達231-1個字符。122023/3/38.unicode數(shù)據(jù)類型nchar(n):存放固定長度的Unicode字符,n值不能超過4000。nvarchar(n):存放可變長度的Unicode字符,n值不能超過4000。ntext:存放可多達230-1個可變長Unicode字符。132023/3/39.特殊數(shù)據(jù)類型timestamp:時間戳,是由數(shù)據(jù)庫自動生成的不重復的二進制數(shù)字。uniqueidentifier:全局唯一標識符。在表的多個副本中唯一地標識行table:只能用于定義局部變量或函數(shù)返回值。xml:存儲xml數(shù)據(jù)。142023/3/33.2數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型是基于SQLServer系統(tǒng)提供的數(shù)據(jù)類型。當多個表的列中要存儲相同類型的數(shù)據(jù),且想確保這些列具有完全相同的數(shù)據(jù)類型、長度和是否為空屬性時,可以使用用戶自定義數(shù)據(jù)類型。創(chuàng)建用戶自定義數(shù)據(jù)類型時必須提供名稱、新數(shù)據(jù)類型所依據(jù)的系統(tǒng)數(shù)據(jù)類型、數(shù)據(jù)類型是否允許空值。使用SQLServerManagementStudio152023/3/33.2數(shù)據(jù)類型例3.1為數(shù)據(jù)庫“sales”定義一個基于varchar型的數(shù)據(jù)類型“telephone_code”(長度為15,允許為空值),用于說明表中電話號碼列的數(shù)據(jù)類型。操作步驟如下:1)啟動SQLServerManagementStudio,在“對象資源管理器”中,依次展開“數(shù)據(jù)庫”節(jié)點、“sales數(shù)據(jù)庫”節(jié)點、“可編程性”節(jié)點。2)右鍵單擊“類型”,從彈出的快捷菜單中選擇“新建”菜單下的“用戶定義數(shù)據(jù)類型”命令。在“名稱”文本框中輸入類型名稱“telephone_code”;在“數(shù)據(jù)類型”下拉列表框中選擇“varchar”數(shù)據(jù)類型;在“長度”數(shù)值框中輸入“15”;選中“允許空值”復選框。162023/3/33.2數(shù)據(jù)類型使用Transact-SQL語句創(chuàng)建用戶自定義數(shù)據(jù)類型

使用CREATETYPE創(chuàng)建用戶自定義數(shù)據(jù)類型,格式為:CREATETYPEtype_name

{FROMsystem_type[NULL|NOTNULL]}其中:type_name:是用戶自定義數(shù)據(jù)類型的名字。system_type:是用戶自定義數(shù)據(jù)類型所基于的系統(tǒng)數(shù)據(jù)類型名,如varchar、int等。NULL|NOTNULL:是否可以為空值。如果缺省該項,則默認為NULL。例3.2為sales數(shù)據(jù)庫創(chuàng)建一個用戶自定義數(shù)據(jù)類型zip,定長字符型,長度為15,不允許為空。CREATETYPEzipFROMchar(15)NOTNULL172023/3/33.2數(shù)據(jù)類型使用DROPTYPE可以刪除用戶自定義的數(shù)據(jù)類型。其語法格式為:DROPTYPEtype_name

其中,參數(shù)type_name表示已經(jīng)定義好的用戶自定義的數(shù)據(jù)類型例3.3刪除在例3.1中定義的數(shù)據(jù)類型telephone_code。DROPTYPEtelephone_code注意:只能刪除已經(jīng)定義但未被使用的用戶自定義數(shù)據(jù)類型,正在被表或其他數(shù)據(jù)庫對象使用的用戶自定義數(shù)據(jù)類型不能被刪除。182023/3/33.3表結構的創(chuàng)建、修改和刪除表結構的創(chuàng)建使用SQLServerManagementStudio創(chuàng)建表結構

啟動SQLServerManagermentStudio,在“對象資源管理器”窗口中,依次展開“數(shù)據(jù)庫”節(jié)點、“sales”數(shù)據(jù)庫節(jié)點。右鍵單擊“表”,從彈出的快捷菜單中選擇“新建表”命令,系統(tǒng)彈出表設計器窗口,在該窗口中進行表結構的創(chuàng)建。最后,需保存表格。192023/3/33.3表結構的創(chuàng)建、修改和刪除使用Transact-SQL語句創(chuàng)建表格的語法格式CREATETABLE[database_name.[schema_name].|schema_name.]table_name(column_name1data_type[DEFAULTconstant_expression][IDENTITY(SEED,INCREMENT)][NULL|NOTNULL][,…n])[ON{filegroup|DEFAULT}]202023/3/33.3表結構的創(chuàng)建、修改和刪除例3.4為sales數(shù)據(jù)庫創(chuàng)建一個銷售人員表Seller,它包含銷售員編號(SaleID)、姓名(SaleName)、性別(Gender)、出生日期(Birthady)、雇用日期(HireDate)、地址(Address)、電話(Telephone)、備注(Note),其中SaleID、SaleName這兩列不允許為空。212023/3/33.3表結構的創(chuàng)建、修改和刪除CREATETABLESeller(SaleIDchar(3)NOTNULL,SaleNamechar(8)NOTNULL,Genderchar(2),Birthdaydatetime,HireDatedatetime,Addresschar(60),Telephonechar(13),Notechar(200))222023/3/33.3表結構的創(chuàng)建、修改和刪除例3.5為sales數(shù)據(jù)庫創(chuàng)建訂單表Orders,包括OrderID、CustomerID、SaleID和OrderDate字段,其中OrderID為標識列,起始值為10248,增量為1;CustomerID和SaleID字段不允許為空值;OrderDate字段的默認值為當前日期。CREATETABLEOrders(OrderIDintIDENTITY(10248,1),CustomerIDchar(3)NOTNULL,SaleIDchar(3)NOTNULL,OrderDatedatetimeDEFAULTgetdate())232023/3/33.3表結構的創(chuàng)建、修改和刪除例3.6為sales數(shù)據(jù)庫在文件組USER1上創(chuàng)建Category種類表CREATETABLECategory(CategoryIDintNOTNULL,CategoryNamenvarchar(15),Descriptionnvarchar(200))ONUSER1242023/3/33.3表結構的創(chuàng)建、修改和刪除表結構的修改

修改的操作包括:增加或刪除列、修改列的數(shù)據(jù)類型、數(shù)據(jù)長度等。使用SQLServerManagermentStudio修改表結構:

右鍵單擊要修改結構的表Seller,選擇“修改”命令,在表設計器中對表的結構進行修改。使用Transact-SQL語句修改表結構252023/3/33.3表結構的創(chuàng)建、修改和刪除ALTERTABLEtable_name{ADDcolumn_namedate_type[DEFAULTcontant_expression][IDENTITY(SEED,INCREMENT)][NULL|NOTNULL][,…n]|DROPCOLUMNcolumn_name|ALTERCOLUMNcolumn_namenew_datetype[NULL|NOTNULL]}262023/3/33.3表結構的創(chuàng)建、修改和刪除例3.7sales數(shù)據(jù)庫中的Customer表包含CustomerID、ConpanyName和ConnectName三個字段,現(xiàn)為該表添加地址(Address)、郵政編碼(ZipCode)和電話號碼(Telephone)字段。272023/3/3ALTERTABLECustomerADDAddresschar(40),ZipCodechar(6),Telephonevarchar(15)NOTNULL282023/3/3例3.8將表Seller中的Sex列刪除ALTERTABLESellerDROPCOLUMNSex例3.9將Seller表中的Address字段的長度改為30,且不能為空ALTERTABLESellerALTERCOLUMNAddressvarchar(30)NOTNULL292023/3/33.3表結構的創(chuàng)建、修改和刪除刪除表使用SQLServerManagermentStudio刪除表的步驟:1)打開SQLServerManagermentStudio,在“對象資源管理器”窗口中,依次展開“數(shù)據(jù)庫”節(jié)點、“sales”數(shù)據(jù)庫節(jié)點、“表”節(jié)點。2)選擇要刪除的表,單擊鼠標右鍵,從彈出的快捷菜單中選擇“刪除”命令。3)系統(tǒng)會打開“刪除對象”對話框,在該對話框中列出了將被刪除的表。單擊“確定”按鈕即可完成指定表的刪除操作。302023/3/33.3表結構的創(chuàng)建、修改和刪除使用DROPTABLE命令刪除表格,語法格式:

DROPTABLEtable_name1[,…n]例3.10將Customer表從sales數(shù)據(jù)庫中刪除。DROPTABLECustomer312023/3/33.4向表中插入、修改和刪除數(shù)據(jù)向表中插入數(shù)據(jù)(參見第五版教材P115)

使用的Transact-SQL語句完成插入操作,語法格式:

INSERT[INTO]table_name[(column_name[,…n])]

VALUES(expression|NULL|DEFAULT[,…n])

其中:table_name:要插入數(shù)據(jù)的表名。column_name:要插入數(shù)據(jù)的列名。expression:與column_name相對應的字段的值,字符型和日期型值插入時要加單引號。322023/3/33.4向表中插入、修改和刪除數(shù)據(jù)例3.11向Category表中添加數(shù)據(jù)。 INSERTINTOCategory(CategoryID,CategoryName,Description)VALUES(1,'飲料','軟飲料、咖啡、茶、啤酒和淡啤酒')例3.12向Seller表中插入一行數(shù)據(jù),其中Sex字段使用默認值為‘男’,HireDate等字段均取空值。332023/3/33.4向表中插入、修改和刪除數(shù)據(jù)INSERTINTOSeller(SaleID,SaleName,Sex,Birthday,HireDate,Address,Telephone,Notes)VALUES('s11','趙宇飛',DEFAULT,'1974-07-25',NULL,NULL,NULL,NULL)或INSERTINTOSeller(SaleID,SaleName,Birthday)VALUES('s11','趙宇飛','1974-07-25')342023/3/33.4向表中插入、修改和刪除數(shù)據(jù)注意:(1)在插入數(shù)據(jù)時,對允許為空的列可使用NULL插入空值;對具有默認值的列可使用DEFAULT插入默認值。(2)當向表中所有列都插入新數(shù)據(jù)時,可以省略列名表,但必須保證VALUES后的各數(shù)據(jù)項位置同表定義時的順序一致,否則系統(tǒng)會報錯。352023/3/33.4向表中插入、修改和刪除數(shù)據(jù)例3.13在例3.11和例3.12中,由于是對表中所有列插入數(shù)據(jù),則可省略列名表,寫成如下形式:INSERTINTOCategoryVALUES(1,'飲料','軟飲料、咖啡、茶、啤酒和淡啤酒')INSERTINTOSellerVALUES('s11','趙宇飛',DEFAULT,'1974-07-25',

NULL,NULL,NULL,NULL)362023/3/33.4向表中插入、修改和刪除數(shù)據(jù)例3.14向OrderDetail表中插入一行數(shù)據(jù)。INSERTINTOOrderDetailVALUES('10254','P01003')正確形式為:INSERTINTOOrderDetailVALUES('10254','P01003',NULL)INSERTINTOOrderDetail(OrderID,ProductID)

VALUES('10254','P01003')在后一種形式中,系統(tǒng)將Quantity字段的值自動設為空值。錯誤372023/3/33.4向表中插入、修改和刪除數(shù)據(jù)例3.15向Orders表中插入一行數(shù)據(jù)。INSERTINTOOrders(CustomerID,SaleID)Values('c01','s11')注意:具有IDENTITY屬性的列,其值由系統(tǒng)給出,用戶不必向表中插入數(shù)據(jù)。382023/3/33.4向表中插入、修改和刪除數(shù)據(jù)使用INSERTINTO語句一次只能插入一行數(shù)據(jù),若想一次插入多行數(shù)據(jù),則需在INSERTINTO語句中加入查詢子句:INSERT[INTO]dest_table_name[(column_name[,…n])]SELECTcolumn_name[,…n]FROMsource_table_name[WHEREsearch_conditions]392023/3/33.4向表中插入、修改和刪除數(shù)據(jù)例3.16創(chuàng)建employee表,包含三個字段EmployeeID、EmployeeName和Address。將Seller表中的女銷售人員的數(shù)據(jù)插入到employee表中。CREATETABLEEmployee(EmployeeIDchar(3),EmployeeNamechar(8),Addresschar(60))GOINSERTINTOEmployeeSELECTSaleID,SaleName,AddressFROMSellerWHEREGender='女'402023/3/33.4向表中插入、修改和刪除數(shù)據(jù)修改表中數(shù)據(jù)使用UPDATE語句來實現(xiàn)。其語法格式為:UPDATEtable_nameSETcolumn_name=expression[,…n][WHEREsearch_conditions]table_name:要更新數(shù)據(jù)的表名。column_name:要更新數(shù)據(jù)的列名。expression:更新后的數(shù)據(jù)值。search_conditions:更新條件,只對表中滿足該條件的記錄進行更新。412023/3/33.4向表中插入、修改和刪除數(shù)據(jù)例3.17將Product表中‘啤酒’的價格改為4元。UPDATEProductSETPrice=4WHEREProductName='啤酒'422023/3/33.4向表中插入、修改和刪除數(shù)據(jù)例3.18將Seller表中趙宇飛的地址改為‘東直門外大街108號’,電話改為‘(010)60486658’。UPDATESellerSETAddress='東直門外大街108號',Telephone='(010)60486658'WHERESaleID='s11'432023/3/33.4向表中插入、修改和刪除數(shù)據(jù)例3.19將Product表中CategoryID為2的所有產(chǎn)品的價格下調10%UPDATEProductSETPrice=Price*(1-0.1)WHERECategoryID=2442023/3/33.4向表中插入、修改和刪除數(shù)據(jù)刪除表中數(shù)據(jù)

刪除表中數(shù)據(jù)使用的是DELETE語句,其語法格式為:

DELETE[FROM]table_name

[WHEREsearch_conditions]

功能:刪除表中符合search_conditions的數(shù)據(jù);缺省WHERE子句時,表示刪除該表中的所有數(shù)據(jù)。452023/3/33.4向表中插入、修改和刪除數(shù)據(jù)例3.20將例3.12插入的數(shù)據(jù)從Seller表中刪除。DELETEFROMSellerWHERESaleID=’s11’462023/3/33.4向表中插入、修改和刪除數(shù)據(jù)在SQLServerManagementStudio插入、修改和刪除數(shù)據(jù)

選中要進行插入、更新或刪除數(shù)據(jù)操作的表,單擊鼠標右鍵,在彈出的快捷菜單選擇“打開表”命令,出現(xiàn)表數(shù)據(jù)窗口。在該窗口中完后數(shù)據(jù)的插入、修改和刪除。472023/3/33.5約束約束定義了必須遵循的用于維護數(shù)據(jù)一致性和正確性的規(guī)則,是強制實現(xiàn)數(shù)據(jù)完整性的主要途徑。(完整性

參見第五版教材P158)約束有5種類型:主鍵約束、唯一約束、檢查約束、默認約束、外鍵約束(參照約束)。約束可以在兩個層次上實施:(1)列級:用戶定義的約束只對表中的一列起作用;(2)表級:用戶定義的約束對表中的多列起作用。482023/3/33.5約束約束的創(chuàng)建、修改和刪除約束可以用Transact-SQL的CREATETABLE語句或ALTERTABLE語句來創(chuàng)建。(1)使用CREATETABLE語句創(chuàng)建約束創(chuàng)建表時定義約束,約束是表格定義的一部分。語法格式:CREATETABLEtable_name(column_namedata_type[[CONSTRAINTconstraint_name]constraint_type][,…n])492023/3/33.5約束(2)使用ALTERTABLE語句創(chuàng)建約束在已有的表上創(chuàng)建、修改約束。語法格式為:ALTERTABLEtable_name[WITHCHECK|WITHNOCHECK]ADD[CONSTRAINTconstraint_name]constraint_typeWITHCHECK|WITHNOCHECK

:對表中現(xiàn)有的數(shù)據(jù)是否進行檢查。502023/3/33.5約束(3)使用ALTERTABLE語句還可刪除約束,語法格式為:ALTERTABLEtable_nameDROPCONSTRAINTconstraint_name注意:只刪除了表中的指定約束,并沒有刪除表。但是,當表被刪除時,在該表上定義的所有約束將自動取消。512023/3/33.5約束主鍵約束主鍵用于唯一地標識表中每一條記錄。可以定義表中的一列或多列為主鍵。主鍵列的值不能重復,也不能為空值。每張表都應該有且只有一個主鍵。(1)創(chuàng)建主鍵約束的語法格式:[CONSTRAINTconstraint_name]PRIMARYKEY[CLUSTERED|NONCLUSTERED](col_name[,…n])522023/3/33.5約束例3.21創(chuàng)建Orders表,包括四個字段,其中OrderID字段設為主鍵。CREATETABLEOrders(OrderIDintCONSTRAINTpk_orderid

PRIMARYKEY,CustomerIDchar(3),SaleIDchar(3),OrderDatedatetime)如果沒有提供主鍵約束的名字,SQLServer會自動為該約束提供一個名字。例3.22修改表添加主鍵約束。createtablestudent(snoint,snamevarchar(20),sageint)altertablestudentaltercolumnsnointnotnullaltertablestudentaddprimarykey(sno)542023/3/33.5約束(2)在SQLServerManagementStudio中創(chuàng)建、修改、刪除主鍵約束。1)選中需要添加約束的表,右鍵單擊,選擇“修改”。2)右鍵單擊要設置為主鍵的字段(一個或多個),右鍵單擊,選擇“設置主鍵”。這時主鍵列的左邊會顯示“黃色鑰匙”的圖標。3)點擊工具欄上的“保存”按鈕,完成主鍵的設置。552023/3/33.5約束唯一(UNIQUE)約束用來限制在指定列上不允許有相同的值。一個表上可以有多個UNIQUE約束。唯一約束和主鍵約束的區(qū)別:唯一約束允許在該列上存在NULL值,而主鍵約束限制更為嚴格,不但不允許有重復,而且也不允許有空值。在創(chuàng)建唯一約束和主鍵約束時可以創(chuàng)建聚集索引和非聚集索引,但在缺省情況下主鍵約束產(chǎn)生聚集索引,而唯一約束產(chǎn)生非聚集索引。562023/3/33.5約束(1)創(chuàng)建唯一約束的語法格式為:[CONSTRAINTconstraint_name]UNIQUE[CLUSTERED|NONCLUSTERED](col_name[,…n])572023/3/33.5約束例3.25創(chuàng)建表Department,包含三個字段,并在dep_name字段上創(chuàng)建唯一約束。CREATETABLEDepartment(dep_idintPRIMARYKEY,dep_namechar(20)CONSTRAINTunq_dname

UNIQUE,dep_headchar(5))582023/3/33.5約束例3.26在Seller表的Telephone字段建立唯一約束。ALTERTABLESellerADDCONSTRAINTunq_telephone

UNIQUE(Telephone)592023/3/33.5約束(2)在SQLServerManagementStudio下創(chuàng)建唯一約束的操作步驟為:1)選中需要添加唯一性約束的表,右鍵單擊,選擇“修改”。2)右鍵單擊上方窗格,選擇“索引/鍵”命令。3)點擊“添加”按鈕添加新的主/唯一鍵或索引;在(常規(guī))的“類型”右邊選擇“唯一鍵”,在“列”的右邊單擊省略號按鈕“…”,選擇列名“Cname”和排序規(guī)律ASC(升序)或DESC(降序)。4)點擊“關閉”按鈕即可。602023/3/33.5約束CHECK約束用來指定某列的可取值的范圍??梢栽趩瘟猩隙x多個CHECK約束。(1)用T-SQL語句創(chuàng)建檢查約束,語法格式:[CONSTRAINTconstraint_name]CHECK(exp)exp是一個表達式,定義要對列進行檢查的條件。612023/3/33.5約束例3.27創(chuàng)建學生表Student,包含sid(學號)、sname(姓名)、sage(年齡)以及scity(城市)四個字段,并在sage字段創(chuàng)建一個CHECK約束,使得sage的值在18~30歲之間。CREATETABLEStudent(sidintPRIMARYKEY,snamechar(20),sageintCONSTRAINTcheck_age

CHECK(sage>=18ANDsage<=30),

scitychar(10))622023/3/33.5約束該語句還可寫成:CREATETABLEStudent(sidintPRIMARYKEY,snamechar(20),sageintCONSTRAINTcheck_age

CHECK(sageBETWEEN18AND30),scitychar(10))注意:當向該表執(zhí)行插入或更新操作時,SQLServer會檢查插入的新列值是否滿足CHECK約束的條件,若不滿足,系統(tǒng)會報錯,并拒絕執(zhí)行插入或更新操作。632023/3/33.5約束例3.28修改學生表Student,在scity字段創(chuàng)建一個CHECK約束,以限制只能輸入有效的城市。ALTERTABLEStudentWITHNOCHECKADDCONSTRAINTcheck_city

CHECK(scityIN('北京','上海','天津','重慶'))642023/3/33.5約束例3.29修改Seller表,在Telephone字段創(chuàng)建CHECK約束,使得該字段的值的格式為11位數(shù)字。ALTERTABLESellerADDCONSTRAINTcheck_telephone

CHECK(TelephoneLIKE'([0-9][0-9][0-9])[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')注意:不能在具有IDENTITY屬性的列上設置CHECK約束。652023/3/33.5約束(2)在SQLSeerverManagementStudio下創(chuàng)建CHECK約束的操作步驟為:1)選中需要添加CHECK約束的表,右鍵單擊,選擇“修改”命令。2)在彈出窗口中,右鍵單擊上方窗格,選擇“CHECK約束”命令。3)單擊“添加”按鈕,系統(tǒng)給出默認的約束名CK_Producs,在(常規(guī))的“表達式”文本框中輸入約束條件。662023/3/33.5約束若要修改已有的CHECK約束,可以在“選定的CHECK約束”下拉列表中選擇要修改的CHECK約束。4)“表設計器”中的“在創(chuàng)建或重新啟用時檢查現(xiàn)有數(shù)據(jù)”決定在創(chuàng)建CHECK約束時是否檢測現(xiàn)存數(shù)據(jù)。5)單擊“關閉”按鈕,完成CHECK約束的創(chuàng)建或修改。672023/3/33.5約束DEFAULT約束

給表中指定列賦予默認值,當向該表插入數(shù)據(jù)時,如果用戶沒有明確給出該列的值,SQLServer會自動為該列輸入默認值。每列只能有一個DEFAULT約束。(1)使用Transact-SQL語句創(chuàng)建默認約束(P63)[CONSTRAINTconstraint_name]DEFAULT(expression|NULL)FORcolumn_name例3.30給student表的ssex列添加默認值altertablestudent

adddefault('男')forssex(2)使用SQLSeerverManagementStudio創(chuàng)建默認約束

(在表設計器的下半部分,“默認值與綁定”欄設置。)692023/3/33.5約束外鍵約束

Foreignkey用于與其他表(主鍵表)中的列(稱為主鍵列)建立連接。例如:702023/3/33.5約束(1)創(chuàng)建外鍵約束的語法格式為:[CONSTRAINTconstraint_name]FOREIGNKEY(col_name1[,…n])REFERENCEStable_name(column_name1[,…n])其中:col_name1[,…n]:是要實現(xiàn)外鍵約束的列。table_name:是主鍵表(參照表)表名。column_name1[,…n]:是主鍵列(參照列)列名。712023/3/33.5約束例3.31若sales數(shù)據(jù)庫中包含Seller表和Customer表。Seller(SaleID、SaleName)Customer(CustomerID、Company)新建表Orders(OrderID、CustomerID、SaleID,OrderDate)其中CustomerID、SaleID為外鍵。CREATETABLEOrders(OrderidintPRIMARYKEY,CustomerIDchar(3)REFERENCESCustomer(CustomerID),SaleIDchar(3)CONSTRAINTfk_sidREFERENCESSeller(SaleID),OrderDatedatetimeDEFAULTgetdate())722023/3/33.5約束例3.32修改OrderDetail表,在OrderID列上創(chuàng)建外鍵約束。ALTERTABLEOrderDetailADDCONSTRAINTfk_orderidFOREIGNKEY(OrderID)REFERENCESOrders(OrderID)或者:ALTERTABLEOrderDetailWITHNOCHECKADDCONSTRAINTfk_orderidFOREIGNKEY(OrderID)REFERENCESOrders(OrderID)732023/3/33.5約束(2)在SQLSeerverManagementStudio下同樣可以創(chuàng)建外鍵約束,操作步驟如下:1)中需要添加外鍵約束的表,右鍵單擊,選擇“修改”命令。2)右鍵單擊上方窗格,選擇“關系…”命令。3)點擊“添加”按鈕,系統(tǒng)給出默認的關系名,單擊“表和列規(guī)范”內容框中右邊的省略號按鈕,從彈出的“表和列”對話框中選擇外鍵約束的表和列。單擊“確定”按鈕,返回到“外鍵關系”對話框。742023/3/33.5約束4)設置“在創(chuàng)建或重新啟用時檢查現(xiàn)有數(shù)據(jù)”為“是”,指定對于在創(chuàng)建或重新啟用約束之前就存在于表中的所有數(shù)據(jù),根據(jù)約束進行驗證。5)將“強制外鍵約束”或“強制用于復制”設置為“是”,則能確保任何數(shù)據(jù)添加、修改或刪除操作都不會違背外鍵關系。6)展開“Insert和Update規(guī)范”,可設置“更新規(guī)則”和“刪除規(guī)則”。右邊的下拉列表可選擇“層疊”表示級聯(lián)更新或級聯(lián)刪除。(詳見下頁)752023/3/33.5約束如果對主鍵表進行更新(Update)或刪除(Delete)一行數(shù)據(jù)的操作,會檢查主鍵表的主鍵是否被從表的外鍵引用:若沒有被引用,則更新或刪除。若被引用,可能發(fā)生如下4種操作之一:無操作:拒絕更新或刪除主鍵表,SQLServer將顯示一條錯誤消息,告知用戶不允許執(zhí)行該操作;層疊:級聯(lián)更新或刪除從表中相應的所有行;設置空:將外鍵表中相對應的外鍵值設置為NULL;設置默認值:如果外鍵表的所有外鍵列均已定義默認值,則將該列設置為默認值。762023/3/33.5約束7)單擊“關閉”按鈕即可完成外鍵約束的創(chuàng)建。8)如要刪除外鍵約束,則在該對話框的“選定的關系”列表框中選擇要刪除的關系,單擊“刪除”按鈕即可。查看約束名:sp_helpstudent或者:sp_helpconstraintstudent刪除約束:altertablestudentdropconstraintUQ_student_7D8A782023/3/33.5.2學生-課程數(shù)據(jù)庫有以下三個表:(參見第五版教材P79)

學生表:Student(Sno,Sname,Ssex,Sage,Sdept)

課程表:Course(Cno,Cname,Cpno,Ccredit)

學生選課表:SC(Sno,Cno,Grade)

792023/3/3Student表學號Sno姓名Sname性別

Ssex年齡

溫馨提示

  • 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

提交評論