版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2023/7/271第3章表的創(chuàng)建
(參見第五版教材P82)22023/7/27學(xué)習(xí)要點(diǎn)數(shù)據(jù)類型
1表結(jié)構(gòu)的創(chuàng)建、修改和刪除2向表中插入、修改和刪除數(shù)據(jù)3約束
4實(shí)現(xiàn)數(shù)據(jù)完整性532023/7/273.1表的概念數(shù)據(jù)庫(kù)中包含一個(gè)或多個(gè)表。表是數(shù)據(jù)的集合,是用來(lái)存儲(chǔ)數(shù)據(jù)和操作數(shù)據(jù)的邏輯結(jié)構(gòu)。數(shù)據(jù)在表中是按照行和列的格式來(lái)組織排列的,每一行代表一條唯一的記錄,每一列代表記錄的一個(gè)屬性。例如,一個(gè)包含銷售員基本信息的數(shù)據(jù)表,表中每一行代表一名銷售員,每一列分別代表該銷售員的信息,如編號(hào)、姓名、性別等。
42023/7/273.2數(shù)據(jù)類型在SQLServer的數(shù)據(jù)表中,列的類型既可以是系統(tǒng)提供的數(shù)據(jù)類型,也可以是用戶自定義的數(shù)據(jù)類型。系統(tǒng)數(shù)據(jù)類型1.二進(jìn)制數(shù)據(jù)類型2.整數(shù)數(shù)據(jù)類型3.浮點(diǎn)數(shù)據(jù)類型4.精確小數(shù)數(shù)據(jù)類型5.貨幣數(shù)據(jù)類型6.日期/時(shí)間數(shù)據(jù)類型7.字符數(shù)據(jù)類型8.unicode數(shù)據(jù)類型9.特殊數(shù)據(jù)類型52023/7/271.二進(jìn)制數(shù)據(jù)類型binary[n]:固定長(zhǎng)度為n個(gè)字節(jié)的二進(jìn)制數(shù)。varbinary[n]:n個(gè)字節(jié)可變長(zhǎng)的二進(jìn)制數(shù)。image:可變長(zhǎng)的二進(jìn)制數(shù),用于存儲(chǔ)超過(guò)8KB的數(shù)據(jù)。如:word文檔、excel圖表以及圖像等數(shù)據(jù)。最大長(zhǎng)度231-1個(gè)字符62023/7/272.整數(shù)數(shù)據(jù)類型bit:數(shù)據(jù)的值只能是0或1。int:存儲(chǔ)空間占4個(gè)字節(jié)。bigint:存儲(chǔ)空間占8個(gè)字節(jié)。smallint:存儲(chǔ)空間占2個(gè)字節(jié)。tinyint:存儲(chǔ)空間占1個(gè)字節(jié)。
72023/7/273.浮點(diǎn)數(shù)據(jù)類型浮點(diǎn)數(shù)據(jù)類型用于存儲(chǔ)范圍較大的實(shí)數(shù)。容易發(fā)生舍入誤差,貨幣運(yùn)算一般不用它。float:存儲(chǔ)空間占8個(gè)字節(jié)。real:存儲(chǔ)空間占4個(gè)字節(jié)。82023/7/274.精確小數(shù)數(shù)據(jù)類型decimal(p,s):取值范圍-1038+1~1038-1??梢灾付偽粩?shù)p和小數(shù)位數(shù)s。numeric(p,s):表示范圍最多可達(dá)38位。可以指定總位數(shù)p和小數(shù)位數(shù)s。例:decimal(6,2)表示最多可存放6位數(shù)字,小數(shù)點(diǎn)后有2位。區(qū)別:numeric類型的可以帶IDENTITY關(guān)鍵字。92023/7/275.貨幣數(shù)據(jù)類型money:占8個(gè)字節(jié)。精度為19,小數(shù)4位。smallmoney:占4個(gè)字節(jié)。精度為10,小數(shù)4位。102023/7/276.日期/時(shí)間數(shù)據(jù)類型Datetime:用于存儲(chǔ)日期和時(shí)間。占8個(gè)字節(jié)。Smalldatetime:日期時(shí)間范圍較小。占4字節(jié)。112023/7/277.字符數(shù)據(jù)類型char(n):存放固定長(zhǎng)度的字符,每個(gè)字符占一個(gè)字節(jié),n值不能超過(guò)8000。varchar(n):存放可變長(zhǎng)度的字符,n值不能超過(guò)8000。text:存放數(shù)量龐大的變長(zhǎng)字符,最大長(zhǎng)度可達(dá)231-1個(gè)字符。122023/7/278.unicode數(shù)據(jù)類型nchar(n):存放固定長(zhǎng)度的Unicode字符,n值不能超過(guò)4000。nvarchar(n):存放可變長(zhǎng)度的Unicode字符,n值不能超過(guò)4000。ntext:存放可多達(dá)230-1個(gè)可變長(zhǎng)Unicode字符。132023/7/279.特殊數(shù)據(jù)類型timestamp:時(shí)間戳,是由數(shù)據(jù)庫(kù)自動(dòng)生成的不重復(fù)的二進(jìn)制數(shù)字。uniqueidentifier:全局唯一標(biāo)識(shí)符。在表的多個(gè)副本中唯一地標(biāo)識(shí)行table:只能用于定義局部變量或函數(shù)返回值。xml:存儲(chǔ)xml數(shù)據(jù)。142023/7/273.2數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型是基于SQLServer系統(tǒng)提供的數(shù)據(jù)類型。當(dāng)多個(gè)表的列中要存儲(chǔ)相同類型的數(shù)據(jù),且想確保這些列具有完全相同的數(shù)據(jù)類型、長(zhǎng)度和是否為空屬性時(shí),可以使用用戶自定義數(shù)據(jù)類型。創(chuàng)建用戶自定義數(shù)據(jù)類型時(shí)必須提供名稱、新數(shù)據(jù)類型所依據(jù)的系統(tǒng)數(shù)據(jù)類型、數(shù)據(jù)類型是否允許空值。使用SQLServerManagementStudio152023/7/273.2數(shù)據(jù)類型例3.1為數(shù)據(jù)庫(kù)“sales”定義一個(gè)基于varchar型的數(shù)據(jù)類型“telephone_code”(長(zhǎng)度為15,允許為空值),用于說(shuō)明表中電話號(hào)碼列的數(shù)據(jù)類型。操作步驟如下:1)啟動(dòng)SQLServerManagementStudio,在“對(duì)象資源管理器”中,依次展開“數(shù)據(jù)庫(kù)”節(jié)點(diǎn)、“sales數(shù)據(jù)庫(kù)”節(jié)點(diǎn)、“可編程性”節(jié)點(diǎn)。2)右鍵單擊“類型”,從彈出的快捷菜單中選擇“新建”菜單下的“用戶定義數(shù)據(jù)類型”命令。在“名稱”文本框中輸入類型名稱“telephone_code”;在“數(shù)據(jù)類型”下拉列表框中選擇“varchar”數(shù)據(jù)類型;在“長(zhǎng)度”數(shù)值框中輸入“15”;選中“允許空值”復(fù)選框。162023/7/273.2數(shù)據(jù)類型使用Transact-SQL語(yǔ)句創(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:是否可以為空值。如果缺省該項(xiàng),則默認(rèn)為NULL。例3.2為sales數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)用戶自定義數(shù)據(jù)類型zip,定長(zhǎng)字符型,長(zhǎng)度為15,不允許為空。CREATETYPEzipFROMchar(15)NOTNULL172023/7/273.2數(shù)據(jù)類型使用DROPTYPE可以刪除用戶自定義的數(shù)據(jù)類型。其語(yǔ)法格式為: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ù)庫(kù)對(duì)象使用的用戶自定義數(shù)據(jù)類型不能被刪除。182023/7/273.3表結(jié)構(gòu)的創(chuàng)建、修改和刪除表結(jié)構(gòu)的創(chuàng)建使用SQLServerManagementStudio創(chuàng)建表結(jié)構(gòu)
啟動(dòng)SQLServerManagermentStudio,在“對(duì)象資源管理器”窗口中,依次展開“數(shù)據(jù)庫(kù)”節(jié)點(diǎn)、“sales”數(shù)據(jù)庫(kù)節(jié)點(diǎn)。右鍵單擊“表”,從彈出的快捷菜單中選擇“新建表”命令,系統(tǒng)彈出表設(shè)計(jì)器窗口,在該窗口中進(jìn)行表結(jié)構(gòu)的創(chuàng)建。最后,需保存表格。192023/7/273.3表結(jié)構(gòu)的創(chuàng)建、修改和刪除使用Transact-SQL語(yǔ)句創(chuàng)建表格的語(yǔ)法格式CREATETABLE[database_name.[schema_name].|schema_name.]table_name(column_name1data_type[DEFAULTconstant_expression][IDENTITY(SEED,INCREMENT)][NULL|NOTNULL][,…n])[ON{filegroup|DEFAULT}]202023/7/273.3表結(jié)構(gòu)的創(chuàng)建、修改和刪除例3.4為sales數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)銷售人員表Seller,它包含銷售員編號(hào)(SaleID)、姓名(SaleName)、性別(Gender)、出生日期(Birthady)、雇用日期(HireDate)、地址(Address)、電話(Telephone)、備注(Note),其中SaleID、SaleName這兩列不允許為空。212023/7/273.3表結(jié)構(gòu)的創(chuàng)建、修改和刪除CREATETABLESeller(SaleIDchar(3)NOTNULL,SaleNamechar(8)NOTNULL,Genderchar(2),Birthdaydatetime,HireDatedatetime,Addresschar(60),Telephonechar(13),Notechar(200))222023/7/273.3表結(jié)構(gòu)的創(chuàng)建、修改和刪除例3.5為sales數(shù)據(jù)庫(kù)創(chuàng)建訂單表Orders,包括OrderID、CustomerID、SaleID和OrderDate字段,其中OrderID為標(biāo)識(shí)列,起始值為10248,增量為1;CustomerID和SaleID字段不允許為空值;OrderDate字段的默認(rèn)值為當(dāng)前日期。CREATETABLEOrders(OrderIDintIDENTITY(10248,1),CustomerIDchar(3)NOTNULL,SaleIDchar(3)NOTNULL,OrderDatedatetimeDEFAULTgetdate())232023/7/273.3表結(jié)構(gòu)的創(chuàng)建、修改和刪除例3.6為sales數(shù)據(jù)庫(kù)在文件組USER1上創(chuàng)建Category種類表CREATETABLECategory(CategoryIDintNOTNULL,CategoryNamenvarchar(15),Descriptionnvarchar(200))ONUSER1242023/7/273.3表結(jié)構(gòu)的創(chuàng)建、修改和刪除表結(jié)構(gòu)的修改
修改的操作包括:增加或刪除列、修改列的數(shù)據(jù)類型、數(shù)據(jù)長(zhǎng)度等。使用SQLServerManagermentStudio修改表結(jié)構(gòu):
右鍵單擊要修改結(jié)構(gòu)的表Seller,選擇“修改”命令,在表設(shè)計(jì)器中對(duì)表的結(jié)構(gòu)進(jìn)行修改。使用Transact-SQL語(yǔ)句修改表結(jié)構(gòu)252023/7/273.3表結(jié)構(gòu)的創(chuàng)建、修改和刪除ALTERTABLEtable_name{ADDcolumn_namedate_type[DEFAULTcontant_expression][IDENTITY(SEED,INCREMENT)][NULL|NOTNULL][,…n]|DROPCOLUMNcolumn_name|ALTERCOLUMNcolumn_namenew_datetype[NULL|NOTNULL]}262023/7/273.3表結(jié)構(gòu)的創(chuàng)建、修改和刪除例3.7sales數(shù)據(jù)庫(kù)中的Customer表包含CustomerID、ConpanyName和ConnectName三個(gè)字段,現(xiàn)為該表添加地址(Address)、郵政編碼(ZipCode)和電話號(hào)碼(Telephone)字段。272023/7/27ALTERTABLECustomerADDAddresschar(40),ZipCodechar(6),Telephonevarchar(15)NOTNULL282023/7/27例3.8將表Seller中的Sex列刪除ALTERTABLESellerDROPCOLUMNSex例3.9將Seller表中的Address字段的長(zhǎng)度改為30,且不能為空ALTERTABLESellerALTERCOLUMNAddressvarchar(30)NOTNULL292023/7/273.3表結(jié)構(gòu)的創(chuàng)建、修改和刪除刪除表使用SQLServerManagermentStudio刪除表的步驟:1)打開SQLServerManagermentStudio,在“對(duì)象資源管理器”窗口中,依次展開“數(shù)據(jù)庫(kù)”節(jié)點(diǎn)、“sales”數(shù)據(jù)庫(kù)節(jié)點(diǎn)、“表”節(jié)點(diǎn)。2)選擇要?jiǎng)h除的表,單擊鼠標(biāo)右鍵,從彈出的快捷菜單中選擇“刪除”命令。3)系統(tǒng)會(huì)打開“刪除對(duì)象”對(duì)話框,在該對(duì)話框中列出了將被刪除的表。單擊“確定”按鈕即可完成指定表的刪除操作。302023/7/273.3表結(jié)構(gòu)的創(chuàng)建、修改和刪除使用DROPTABLE命令刪除表格,語(yǔ)法格式:
DROPTABLEtable_name1[,…n]例3.10將Customer表從sales數(shù)據(jù)庫(kù)中刪除。DROPTABLECustomer312023/7/273.4向表中插入、修改和刪除數(shù)據(jù)向表中插入數(shù)據(jù)(參見第五版教材P115)
使用的Transact-SQL語(yǔ)句完成插入操作,語(yǔ)法格式:
INSERT[INTO]table_name[(column_name[,…n])]
VALUES(expression|NULL|DEFAULT[,…n])
其中:table_name:要插入數(shù)據(jù)的表名。column_name:要插入數(shù)據(jù)的列名。expression:與column_name相對(duì)應(yīng)的字段的值,字符型和日期型值插入時(shí)要加單引號(hào)。322023/7/273.4向表中插入、修改和刪除數(shù)據(jù)例3.11向Category表中添加數(shù)據(jù)。 INSERTINTOCategory(CategoryID,CategoryName,Description)VALUES(1,'飲料','軟飲料、咖啡、茶、啤酒和淡啤酒')例3.12向Seller表中插入一行數(shù)據(jù),其中Sex字段使用默認(rèn)值為‘男’,HireDate等字段均取空值。332023/7/273.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/7/273.4向表中插入、修改和刪除數(shù)據(jù)注意:(1)在插入數(shù)據(jù)時(shí),對(duì)允許為空的列可使用NULL插入空值;對(duì)具有默認(rèn)值的列可使用DEFAULT插入默認(rèn)值。(2)當(dāng)向表中所有列都插入新數(shù)據(jù)時(shí),可以省略列名表,但必須保證VALUES后的各數(shù)據(jù)項(xiàng)位置同表定義時(shí)的順序一致,否則系統(tǒng)會(huì)報(bào)錯(cuò)。352023/7/273.4向表中插入、修改和刪除數(shù)據(jù)例3.13在例3.11和例3.12中,由于是對(duì)表中所有列插入數(shù)據(jù),則可省略列名表,寫成如下形式:INSERTINTOCategoryVALUES(1,'飲料','軟飲料、咖啡、茶、啤酒和淡啤酒')INSERTINTOSellerVALUES('s11','趙宇飛',DEFAULT,'1974-07-25',
NULL,NULL,NULL,NULL)362023/7/273.4向表中插入、修改和刪除數(shù)據(jù)例3.14向OrderDetail表中插入一行數(shù)據(jù)。INSERTINTOOrderDetailVALUES('10254','P01003')正確形式為:INSERTINTOOrderDetailVALUES('10254','P01003',NULL)INSERTINTOOrderDetail(OrderID,ProductID)
VALUES('10254','P01003')在后一種形式中,系統(tǒng)將Quantity字段的值自動(dòng)設(shè)為空值。錯(cuò)誤372023/7/273.4向表中插入、修改和刪除數(shù)據(jù)例3.15向Orders表中插入一行數(shù)據(jù)。INSERTINTOOrders(CustomerID,SaleID)Values('c01','s11')注意:具有IDENTITY屬性的列,其值由系統(tǒng)給出,用戶不必向表中插入數(shù)據(jù)。382023/7/273.4向表中插入、修改和刪除數(shù)據(jù)使用INSERTINTO語(yǔ)句一次只能插入一行數(shù)據(jù),若想一次插入多行數(shù)據(jù),則需在INSERTINTO語(yǔ)句中加入查詢子句:INSERT[INTO]dest_table_name[(column_name[,…n])]SELECTcolumn_name[,…n]FROMsource_table_name[WHEREsearch_conditions]392023/7/273.4向表中插入、修改和刪除數(shù)據(jù)例3.16創(chuàng)建employee表,包含三個(gè)字段EmployeeID、EmployeeName和Address。將Seller表中的女銷售人員的數(shù)據(jù)插入到employee表中。CREATETABLEEmployee(EmployeeIDchar(3),EmployeeNamechar(8),Addresschar(60))GOINSERTINTOEmployeeSELECTSaleID,SaleName,AddressFROMSellerWHEREGender='女'402023/7/273.4向表中插入、修改和刪除數(shù)據(jù)修改表中數(shù)據(jù)使用UPDATE語(yǔ)句來(lái)實(shí)現(xiàn)。其語(yǔ)法格式為:UPDATEtable_nameSETcolumn_name=expression[,…n][WHEREsearch_conditions]table_name:要更新數(shù)據(jù)的表名。column_name:要更新數(shù)據(jù)的列名。expression:更新后的數(shù)據(jù)值。search_conditions:更新條件,只對(duì)表中滿足該條件的記錄進(jìn)行更新。412023/7/273.4向表中插入、修改和刪除數(shù)據(jù)例3.17將Product表中‘啤酒’的價(jià)格改為4元。UPDATEProductSETPrice=4WHEREProductName='啤酒'422023/7/273.4向表中插入、修改和刪除數(shù)據(jù)例3.18將Seller表中趙宇飛的地址改為‘東直門外大街108號(hào)’,電話改為‘(010)60486658’。UPDATESellerSETAddress='東直門外大街108號(hào)',Telephone='(010)60486658'WHERESaleID='s11'432023/7/273.4向表中插入、修改和刪除數(shù)據(jù)例3.19將Product表中CategoryID為2的所有產(chǎn)品的價(jià)格下調(diào)10%UPDATEProductSETPrice=Price*(1-0.1)WHERECategoryID=2442023/7/273.4向表中插入、修改和刪除數(shù)據(jù)刪除表中數(shù)據(jù)
刪除表中數(shù)據(jù)使用的是DELETE語(yǔ)句,其語(yǔ)法格式為:
DELETE[FROM]table_name
[WHEREsearch_conditions]
功能:刪除表中符合search_conditions的數(shù)據(jù);缺省WHERE子句時(shí),表示刪除該表中的所有數(shù)據(jù)。452023/7/273.4向表中插入、修改和刪除數(shù)據(jù)例3.20將例3.12插入的數(shù)據(jù)從Seller表中刪除。DELETEFROMSellerWHERESaleID=’s11’462023/7/273.4向表中插入、修改和刪除數(shù)據(jù)在SQLServerManagementStudio插入、修改和刪除數(shù)據(jù)
選中要進(jìn)行插入、更新或刪除數(shù)據(jù)操作的表,單擊鼠標(biāo)右鍵,在彈出的快捷菜單選擇“打開表”命令,出現(xiàn)表數(shù)據(jù)窗口。在該窗口中完后數(shù)據(jù)的插入、修改和刪除。472023/7/273.5約束約束定義了必須遵循的用于維護(hù)數(shù)據(jù)一致性和正確性的規(guī)則,是強(qiáng)制實(shí)現(xiàn)數(shù)據(jù)完整性的主要途徑。(完整性
參見第五版教材P158)約束有5種類型:主鍵約束、唯一約束、檢查約束、默認(rèn)約束、外鍵約束(參照約束)。約束可以在兩個(gè)層次上實(shí)施:(1)列級(jí):用戶定義的約束只對(duì)表中的一列起作用;(2)表級(jí):用戶定義的約束對(duì)表中的多列起作用。482023/7/273.5約束約束的創(chuàng)建、修改和刪除約束可以用Transact-SQL的CREATETABLE語(yǔ)句或ALTERTABLE語(yǔ)句來(lái)創(chuàng)建。(1)使用CREATETABLE語(yǔ)句創(chuàng)建約束創(chuàng)建表時(shí)定義約束,約束是表格定義的一部分。語(yǔ)法格式:CREATETABLEtable_name(column_namedata_type[[CONSTRAINTconstraint_name]constraint_type][,…n])492023/7/273.5約束(2)使用ALTERTABLE語(yǔ)句創(chuàng)建約束在已有的表上創(chuàng)建、修改約束。語(yǔ)法格式為:ALTERTABLEtable_name[WITHCHECK|WITHNOCHECK]ADD[CONSTRAINTconstraint_name]constraint_typeWITHCHECK|WITHNOCHECK
:對(duì)表中現(xiàn)有的數(shù)據(jù)是否進(jìn)行檢查。502023/7/273.5約束(3)使用ALTERTABLE語(yǔ)句還可刪除約束,語(yǔ)法格式為:ALTERTABLEtable_nameDROPCONSTRAINTconstraint_name注意:只刪除了表中的指定約束,并沒有刪除表。但是,當(dāng)表被刪除時(shí),在該表上定義的所有約束將自動(dòng)取消。512023/7/273.5約束主鍵約束主鍵用于唯一地標(biāo)識(shí)表中每一條記錄。可以定義表中的一列或多列為主鍵。主鍵列的值不能重復(fù),也不能為空值。每張表都應(yīng)該有且只有一個(gè)主鍵。(1)創(chuàng)建主鍵約束的語(yǔ)法格式:[CONSTRAINTconstraint_name]PRIMARYKEY[CLUSTERED|NONCLUSTERED](col_name[,…n])522023/7/273.5約束例3.21創(chuàng)建Orders表,包括四個(gè)字段,其中OrderID字段設(shè)為主鍵。CREATETABLEOrders(OrderIDintCONSTRAINTpk_orderid
PRIMARYKEY,CustomerIDchar(3),SaleIDchar(3),OrderDatedatetime)如果沒有提供主鍵約束的名字,SQLServer會(huì)自動(dòng)為該約束提供一個(gè)名字。例3.22修改表添加主鍵約束。createtablestudent(snoint,snamevarchar(20),sageint)altertablestudentaltercolumnsnointnotnullaltertablestudentaddprimarykey(sno)542023/7/273.5約束(2)在SQLServerManagementStudio中創(chuàng)建、修改、刪除主鍵約束。1)選中需要添加約束的表,右鍵單擊,選擇“修改”。2)右鍵單擊要設(shè)置為主鍵的字段(一個(gè)或多個(gè)),右鍵單擊,選擇“設(shè)置主鍵”。這時(shí)主鍵列的左邊會(huì)顯示“黃色鑰匙”的圖標(biāo)。3)點(diǎn)擊工具欄上的“保存”按鈕,完成主鍵的設(shè)置。552023/7/273.5約束唯一(UNIQUE)約束用來(lái)限制在指定列上不允許有相同的值。一個(gè)表上可以有多個(gè)UNIQUE約束。唯一約束和主鍵約束的區(qū)別:唯一約束允許在該列上存在NULL值,而主鍵約束限制更為嚴(yán)格,不但不允許有重復(fù),而且也不允許有空值。在創(chuàng)建唯一約束和主鍵約束時(shí)可以創(chuàng)建聚集索引和非聚集索引,但在缺省情況下主鍵約束產(chǎn)生聚集索引,而唯一約束產(chǎn)生非聚集索引。562023/7/273.5約束(1)創(chuàng)建唯一約束的語(yǔ)法格式為:[CONSTRAINTconstraint_name]UNIQUE[CLUSTERED|NONCLUSTERED](col_name[,…n])572023/7/273.5約束例3.25創(chuàng)建表Department,包含三個(gè)字段,并在dep_name字段上創(chuàng)建唯一約束。CREATETABLEDepartment(dep_idintPRIMARYKEY,dep_namechar(20)CONSTRAINTunq_dname
UNIQUE,dep_headchar(5))582023/7/273.5約束例3.26在Seller表的Telephone字段建立唯一約束。ALTERTABLESellerADDCONSTRAINTunq_telephone
UNIQUE(Telephone)592023/7/273.5約束(2)在SQLServerManagementStudio下創(chuàng)建唯一約束的操作步驟為:1)選中需要添加唯一性約束的表,右鍵單擊,選擇“修改”。2)右鍵單擊上方窗格,選擇“索引/鍵”命令。3)點(diǎn)擊“添加”按鈕添加新的主/唯一鍵或索引;在(常規(guī))的“類型”右邊選擇“唯一鍵”,在“列”的右邊單擊省略號(hào)按鈕“…”,選擇列名“Cname”和排序規(guī)律ASC(升序)或DESC(降序)。4)點(diǎn)擊“關(guān)閉”按鈕即可。602023/7/273.5約束CHECK約束用來(lái)指定某列的可取值的范圍??梢栽趩瘟猩隙x多個(gè)CHECK約束。(1)用T-SQL語(yǔ)句創(chuàng)建檢查約束,語(yǔ)法格式:[CONSTRAINTconstraint_name]CHECK(exp)exp是一個(gè)表達(dá)式,定義要對(duì)列進(jìn)行檢查的條件。612023/7/273.5約束例3.27創(chuàng)建學(xué)生表Student,包含sid(學(xué)號(hào))、sname(姓名)、sage(年齡)以及scity(城市)四個(gè)字段,并在sage字段創(chuàng)建一個(gè)CHECK約束,使得sage的值在18~30歲之間。CREATETABLEStudent(sidintPRIMARYKEY,snamechar(20),sageintCONSTRAINTcheck_age
CHECK(sage>=18ANDsage<=30),
scitychar(10))622023/7/273.5約束該語(yǔ)句還可寫成:CREATETABLEStudent(sidintPRIMARYKEY,snamechar(20),sageintCONSTRAINTcheck_age
CHECK(sageBETWEEN18AND30),scitychar(10))注意:當(dāng)向該表執(zhí)行插入或更新操作時(shí),SQLServer會(huì)檢查插入的新列值是否滿足CHECK約束的條件,若不滿足,系統(tǒng)會(huì)報(bào)錯(cuò),并拒絕執(zhí)行插入或更新操作。632023/7/273.5約束例3.28修改學(xué)生表Student,在scity字段創(chuàng)建一個(gè)CHECK約束,以限制只能輸入有效的城市。ALTERTABLEStudentWITHNOCHECKADDCONSTRAINTcheck_city
CHECK(scityIN('北京','上海','天津','重慶'))642023/7/273.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屬性的列上設(shè)置CHECK約束。652023/7/273.5約束(2)在SQLSeerverManagementStudio下創(chuàng)建CHECK約束的操作步驟為:1)選中需要添加CHECK約束的表,右鍵單擊,選擇“修改”命令。2)在彈出窗口中,右鍵單擊上方窗格,選擇“CHECK約束”命令。3)單擊“添加”按鈕,系統(tǒng)給出默認(rèn)的約束名CK_Producs,在(常規(guī))的“表達(dá)式”文本框中輸入約束條件。662023/7/273.5約束若要修改已有的CHECK約束,可以在“選定的CHECK約束”下拉列表中選擇要修改的CHECK約束。4)“表設(shè)計(jì)器”中的“在創(chuàng)建或重新啟用時(shí)檢查現(xiàn)有數(shù)據(jù)”決定在創(chuàng)建CHECK約束時(shí)是否檢測(cè)現(xiàn)存數(shù)據(jù)。5)單擊“關(guān)閉”按鈕,完成CHECK約束的創(chuàng)建或修改。672023/7/273.5約束DEFAULT約束
給表中指定列賦予默認(rèn)值,當(dāng)向該表插入數(shù)據(jù)時(shí),如果用戶沒有明確給出該列的值,SQLServer會(huì)自動(dòng)為該列輸入默認(rèn)值。每列只能有一個(gè)DEFAULT約束。(1)使用Transact-SQL語(yǔ)句創(chuàng)建默認(rèn)約束(P63)[CONSTRAINTconstraint_name]DEFAULT(expression|NULL)FORcolumn_name例3.30給student表的ssex列添加默認(rèn)值altertablestudent
adddefault('男')forssex(2)使用SQLSeerverManagementStudio創(chuàng)建默認(rèn)約束
(在表設(shè)計(jì)器的下半部分,“默認(rèn)值與綁定”欄設(shè)置。)692023/7/273.5約束外鍵約束
Foreignkey用于與其他表(主鍵表)中的列(稱為主鍵列)建立連接。例如:702023/7/273.5約束(1)創(chuàng)建外鍵約束的語(yǔ)法格式為:[CONSTRAINTconstraint_name]FOREIGNKEY(col_name1[,…n])REFERENCEStable_name(column_name1[,…n])其中:col_name1[,…n]:是要實(shí)現(xiàn)外鍵約束的列。table_name:是主鍵表(參照表)表名。column_name1[,…n]:是主鍵列(參照列)列名。712023/7/273.5約束例3.31若sales數(shù)據(jù)庫(kù)中包含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/7/273.5約束例3.32修改OrderDetail表,在OrderID列上創(chuàng)建外鍵約束。ALTERTABLEOrderDetailADDCONSTRAINTfk_orderidFOREIGNKEY(OrderID)REFERENCESOrders(OrderID)或者:ALTERTABLEOrderDetailWITHNOCHECKADDCONSTRAINTfk_orderidFOREIGNKEY(OrderID)REFERENCESOrders(OrderID)732023/7/273.5約束(2)在SQLSeerverManagementStudio下同樣可以創(chuàng)建外鍵約束,操作步驟如下:1)中需要添加外鍵約束的表,右鍵單擊,選擇“修改”命令。2)右鍵單擊上方窗格,選擇“關(guān)系…”命令。3)點(diǎn)擊“添加”按鈕,系統(tǒng)給出默認(rèn)的關(guān)系名,單擊“表和列規(guī)范”內(nèi)容框中右邊的省略號(hào)按鈕,從彈出的“表和列”對(duì)話框中選擇外鍵約束的表和列。單擊“確定”按鈕,返回到“外鍵關(guān)系”對(duì)話框。742023/7/273.5約束4)設(shè)置“在創(chuàng)建或重新啟用時(shí)檢查現(xiàn)有數(shù)據(jù)”為“是”,指定對(duì)于在創(chuàng)建或重新啟用約束之前就存在于表中的所有數(shù)據(jù),根據(jù)約束進(jìn)行驗(yàn)證。5)將“強(qiáng)制外鍵約束”或“強(qiáng)制用于復(fù)制”設(shè)置為“是”,則能確保任何數(shù)據(jù)添加、修改或刪除操作都不會(huì)違背外鍵關(guān)系。6)展開“Insert和Update規(guī)范”,可設(shè)置“更新規(guī)則”和“刪除規(guī)則”。右邊的下拉列表可選擇“層疊”表示級(jí)聯(lián)更新或級(jí)聯(lián)刪除。(詳見下頁(yè))752023/7/273.5約束如果對(duì)主鍵表進(jìn)行更新(Update)或刪除(Delete)一行數(shù)據(jù)的操作,會(huì)檢查主鍵表的主鍵是否被從表的外鍵引用:若沒有被引用,則更新或刪除。若被引用,可能發(fā)生如下4種操作之一:無(wú)操作:拒絕更新或刪除主鍵表,SQLServer將顯示一條錯(cuò)誤消息,告知用戶不允許執(zhí)行該操作;層疊:級(jí)聯(lián)更新或刪除從表中相應(yīng)的所有行;設(shè)置空:將外鍵表中相對(duì)應(yīng)的外鍵值設(shè)置為NULL;設(shè)置默認(rèn)值:如果外鍵表的所有外鍵列均已定義默認(rèn)值,則將該列設(shè)置為默認(rèn)值。762023/7/273.5約束7)單擊“關(guān)閉”按鈕即可完成外鍵約束的創(chuàng)建。8)如要?jiǎng)h除外鍵約束,則在該對(duì)話框的“選定的關(guān)系”列表框中選擇要?jiǎng)h除的關(guān)系,單擊“刪除”按鈕即可。查看約束名:sp_helpstudent或者:sp_helpconstraintstudent刪除約束:altertablestudentdropconstraintUQ_student_7D8A782023/7/273.5.2學(xué)生-課程數(shù)據(jù)庫(kù)有以下三個(gè)表:(參見第五版教材P79)
學(xué)生表:Student(Sno,Sname,Ssex,Sage,Sdept)
課程表:Course(Cno,Cname,Cpno,Ccredit)
學(xué)生選課表:SC(Sno,Cno,Grade)
792023/7/27Student表學(xué)號(hào)Sno姓名Sname性別
Ssex年齡
Sage所在系
Sdept200915121200915122200915123200515125李勇劉晨王敏張立男女女男20191819CSCSMAIS802023/7/27Course表課程號(hào)Cno課程名Cname先行課Cpno學(xué)分C
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧醫(yī)藥職業(yè)學(xué)院《Java+語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 蘭州工業(yè)學(xué)院《行為醫(yī)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西建設(shè)職業(yè)技術(shù)學(xué)院《土地測(cè)量與評(píng)價(jià)》2023-2024學(xué)年第一學(xué)期期末試卷
- 吉林職業(yè)技術(shù)學(xué)院《外國(guó)音樂史Ⅰ》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南電子科技職業(yè)學(xué)院《物流流程再造》2023-2024學(xué)年第一學(xué)期期末試卷
- 黑龍江司法警官職業(yè)學(xué)院《生物信息學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶應(yīng)用技術(shù)職業(yè)學(xué)院《集成電路版圖設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶建筑工程職業(yè)學(xué)院《外語(yǔ)教育研究方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 中央戲劇學(xué)院《計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 中國(guó)石油大學(xué)(北京)《數(shù)據(jù)庫(kù)技術(shù)及應(yīng)用實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年中考語(yǔ)文備考之名著導(dǎo)讀:《水滸傳》主要人物梳理
- 小學(xué)科學(xué)學(xué)情分析報(bào)告總結(jié)
- 健康中國(guó)產(chǎn)業(yè)園規(guī)劃方案
- (2024年)二年級(jí)上冊(cè)音樂
- 2024屆高考英語(yǔ)一輪復(fù)習(xí)讀后續(xù)寫脫險(xiǎn)類續(xù)寫講義
- ISO13485內(nèi)部審核檢查表+內(nèi)審記錄
- 2024年《藥物臨床試驗(yàn)質(zhì)量管理規(guī)范》(GCP)網(wǎng)絡(luò)培訓(xùn)題庫(kù)
- 新華健康體檢報(bào)告查詢
- 公司SWOT分析表模板
- 小學(xué)預(yù)防流行性感冒應(yīng)急預(yù)案
- 生物醫(yī)藥大數(shù)據(jù)分析平臺(tái)建設(shè)-第1篇
評(píng)論
0/150
提交評(píng)論