第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ù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 SQL Server2022-7-31第第3章章 表的創(chuàng)建表的創(chuàng)建(參見第五版教材(參見第五版教材P82) SQL Server22022-7-3學(xué)習(xí)要點數(shù)據(jù)類型數(shù)據(jù)類型 1表結(jié)構(gòu)的創(chuàng)建、修改和刪除表結(jié)構(gòu)的創(chuàng)建、修改和刪除 2向表中插入、修改和刪除數(shù)據(jù)向表中插入、修改和刪除數(shù)據(jù) 3約束約束 4實現(xiàn)數(shù)據(jù)完整性實現(xiàn)數(shù)據(jù)完整性 5 SQL Server32022-7-33.1 表的概念 數(shù)據(jù)庫中包含一個或多個表。表是數(shù)據(jù)的集合,是用來數(shù)據(jù)庫中包含一個或多個表。表是數(shù)據(jù)的集合,是用來存儲數(shù)據(jù)和操作數(shù)據(jù)的邏輯結(jié)構(gòu)。存儲數(shù)據(jù)和操作數(shù)據(jù)的邏輯結(jié)構(gòu)。 數(shù)據(jù)在表中是按照行和列的格式來組織排列的,每一行數(shù)據(jù)在表

2、中是按照行和列的格式來組織排列的,每一行代表一條唯一的記錄,每一列代表記錄的一個屬性。代表一條唯一的記錄,每一列代表記錄的一個屬性。 例如,一個包含銷售員基本信息的數(shù)據(jù)表,表中每一行例如,一個包含銷售員基本信息的數(shù)據(jù)表,表中每一行代表一名銷售員,每一列分別代表該銷售員的信息,如編號、代表一名銷售員,每一列分別代表該銷售員的信息,如編號、姓名、性別等。姓名、性別等。 SQL Server42022-7-33.2 數(shù)據(jù)類型 在在SQL Server的數(shù)據(jù)表中,列的類型既可以是的數(shù)據(jù)表中,列的類型既可以是系統(tǒng)提供系統(tǒng)提供的數(shù)據(jù)類型的數(shù)據(jù)類型,也可以是,也可以是用戶自定義的數(shù)據(jù)類型用戶自定義的數(shù)據(jù)類型

3、。 系統(tǒng)數(shù)據(jù)類型系統(tǒng)數(shù)據(jù)類型1二進制數(shù)據(jù)類型二進制數(shù)據(jù)類型 2整數(shù)數(shù)據(jù)類型整數(shù)數(shù)據(jù)類型3浮點數(shù)據(jù)類型浮點數(shù)據(jù)類型 4精確小數(shù)數(shù)據(jù)類型精確小數(shù)數(shù)據(jù)類型5貨幣數(shù)據(jù)類型貨幣數(shù)據(jù)類型 6日期日期/時間數(shù)據(jù)類型時間數(shù)據(jù)類型7字符數(shù)據(jù)類型字符數(shù)據(jù)類型 8unicode數(shù)據(jù)類型數(shù)據(jù)類型9特殊數(shù)據(jù)類型特殊數(shù)據(jù)類型 SQL Server52022-7-31二進制數(shù)據(jù)類型二進制數(shù)據(jù)類型binaryn:固定長度為:固定長度為n個字節(jié)的二進制數(shù)。個字節(jié)的二進制數(shù)。 varbinaryn: n個字節(jié)可變長的二進制數(shù)。個字節(jié)可變長的二進制數(shù)。 image:可變長的二進制數(shù),用于存儲超過:可變長的二進制數(shù),用于存儲超過8K

4、B的數(shù)據(jù)。如:的數(shù)據(jù)。如:word文檔、文檔、excel圖表以圖表以及圖像等數(shù)據(jù)。最大長度及圖像等數(shù)據(jù)。最大長度231-1個字符個字符 SQL Server62022-7-32整數(shù)數(shù)據(jù)類型整數(shù)數(shù)據(jù)類型bit:數(shù)據(jù)的值只能是:數(shù)據(jù)的值只能是0或或1。 int:存儲空間占存儲空間占4個字節(jié)。個字節(jié)。 bigint:存儲空間占存儲空間占8個字節(jié)。個字節(jié)。smallint:存儲空間占存儲空間占2個字節(jié)。個字節(jié)。tinyint:存儲空間占存儲空間占1個字節(jié)。個字節(jié)。 SQL Server72022-7-33浮點數(shù)據(jù)類型浮點數(shù)據(jù)類型浮點數(shù)據(jù)類型用于存儲范圍較大的實數(shù)。容易浮點數(shù)據(jù)類型用于存儲范圍較大的實數(shù)

5、。容易發(fā)生舍入誤差,貨幣運算一般不用它。發(fā)生舍入誤差,貨幣運算一般不用它。float:存儲空間占:存儲空間占8個字節(jié)。個字節(jié)。 real:存儲空間占存儲空間占4個字節(jié)。個字節(jié)。 SQL Server82022-7-34精確小數(shù)數(shù)據(jù)類型精確小數(shù)數(shù)據(jù)類型decimal(p,s):取值范圍取值范圍-1038+11038-1??梢灾付偽?。可以指定總位數(shù)數(shù)p和小數(shù)位數(shù)和小數(shù)位數(shù)s。numeric(p,s):表示范圍最多可達:表示范圍最多可達38位??梢灾付偽晃???梢灾付偽粩?shù)數(shù)p和小數(shù)位數(shù)和小數(shù)位數(shù)s。例例: decimal(6,2)表示最多可存放表示最多可存放6位數(shù)字,小數(shù)點后有位數(shù)字,小數(shù)點后有

6、2位。位。區(qū)別:區(qū)別:numeric類型的可以帶類型的可以帶IDENTITY關(guān)鍵字。關(guān)鍵字。 SQL Server92022-7-35貨幣數(shù)據(jù)類型貨幣數(shù)據(jù)類型money:占占8個字節(jié)。精度為個字節(jié)。精度為19,小數(shù),小數(shù)4位。位。smallmoney:占占4個字節(jié)。精度為個字節(jié)。精度為10,小數(shù),小數(shù)4位。位。 SQL Server102022-7-36日期日期/時間數(shù)據(jù)類型時間數(shù)據(jù)類型Datetime:用于存儲日期和時間。占用于存儲日期和時間。占8個字節(jié)。個字節(jié)。Smalldatetime:日期時間范圍較小。占日期時間范圍較小。占4字節(jié)。字節(jié)。 SQL Server112022-7-37字符

7、數(shù)據(jù)類型字符數(shù)據(jù)類型char(n) :存放固定長度的字符,每個字符占存放固定長度的字符,每個字符占一個字節(jié),一個字節(jié),n值不能超過值不能超過8000。varchar(n) :存放可變長度的字符,存放可變長度的字符,n值不能超值不能超過過8000。text:存放數(shù)量龐大的變長字符,最大長度可存放數(shù)量龐大的變長字符,最大長度可達達231-1個字符。個字符。 SQL Server122022-7-38unicode數(shù)據(jù)類型數(shù)據(jù)類型nchar(n):存放固定長度的存放固定長度的Unicode字符,字符,n值值不能超過不能超過4000。 nvarchar(n) :存放可變長度的存放可變長度的Unicod

8、e字符,字符,n值不能超過值不能超過4000。ntext:存放可多達存放可多達230-1個可變長個可變長Unicode字符。字符。 SQL Server132022-7-39特殊數(shù)據(jù)類型特殊數(shù)據(jù)類型timestamp:時間戳,是由數(shù)據(jù)庫自動生成的時間戳,是由數(shù)據(jù)庫自動生成的不重復(fù)的二進制數(shù)字。不重復(fù)的二進制數(shù)字。 uniqueidentifier:全局唯一標識符。在表的多全局唯一標識符。在表的多個副本中唯一地標識行個副本中唯一地標識行table:只能用于定義局部變量或函數(shù)返回值。只能用于定義局部變量或函數(shù)返回值。xml:存儲:存儲xml數(shù)據(jù)。數(shù)據(jù)。 SQL Server142022-7-33.

9、2 數(shù)據(jù)類型 用戶自定義數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型 用戶自定義數(shù)據(jù)類型是基于用戶自定義數(shù)據(jù)類型是基于SQL Server系統(tǒng)提供的數(shù)系統(tǒng)提供的數(shù)據(jù)類型。當多個表的列中要存儲相同類型的數(shù)據(jù),且據(jù)類型。當多個表的列中要存儲相同類型的數(shù)據(jù),且想確保這些列具有完全相同的數(shù)據(jù)類型、長度和是否想確保這些列具有完全相同的數(shù)據(jù)類型、長度和是否為空屬性時,可以使用用戶自定義數(shù)據(jù)類型。為空屬性時,可以使用用戶自定義數(shù)據(jù)類型。 創(chuàng)建用戶自定義數(shù)據(jù)類型時必須提供名稱、新數(shù)據(jù)類創(chuàng)建用戶自定義數(shù)據(jù)類型時必須提供名稱、新數(shù)據(jù)類型所依據(jù)的系統(tǒng)數(shù)據(jù)類型、數(shù)據(jù)類型是否允許空值。型所依據(jù)的系統(tǒng)數(shù)據(jù)類型、數(shù)據(jù)類型是否允許空值。 使用

10、使用SQL Server Management Studio SQL Server152022-7-33.2 數(shù)據(jù)類型例例3.1 為數(shù)據(jù)庫為數(shù)據(jù)庫“sales”定義一個基于定義一個基于varchar型的數(shù)據(jù)類型型的數(shù)據(jù)類型“telephone_code”(長度為(長度為15,允許為空值),用于說明表,允許為空值),用于說明表中電話號碼列的數(shù)據(jù)類型。操作步驟如下:中電話號碼列的數(shù)據(jù)類型。操作步驟如下: 1)啟動)啟動SQL Server Management Studio,在,在“對象資源對象資源管理器管理器”中,依次展開中,依次展開“數(shù)據(jù)庫數(shù)據(jù)庫”節(jié)點、節(jié)點、“sales數(shù)據(jù)庫數(shù)據(jù)庫”節(jié)節(jié)點、

11、點、“可編程性可編程性”節(jié)點。節(jié)點。 2)右鍵單擊)右鍵單擊“類型類型”,從彈出的快捷菜單中選擇,從彈出的快捷菜單中選擇“新建新建”菜單下的菜單下的“用戶定義數(shù)據(jù)類型用戶定義數(shù)據(jù)類型”命令。命令。 在在“名稱名稱”文本框中輸入類型名稱文本框中輸入類型名稱“telephone_code”;在在“數(shù)據(jù)類型數(shù)據(jù)類型”下拉列表框中選擇下拉列表框中選擇“varchar”數(shù)據(jù)類型;在數(shù)據(jù)類型;在“長度長度”數(shù)值框中輸入數(shù)值框中輸入“15”;選中;選中“允許空值允許空值”復(fù)選框。復(fù)選框。 SQL Server162022-7-33.2 數(shù)據(jù)類型 使用使用Transact-SQL語句創(chuàng)建用戶自定義數(shù)據(jù)類型語句

12、創(chuàng)建用戶自定義數(shù)據(jù)類型使用使用CREATE TYPE創(chuàng)建用戶自定義數(shù)據(jù)類型,格式為:創(chuàng)建用戶自定義數(shù)據(jù)類型,格式為:CREATE TYPE type_nameFROM system_type NULL | NOT NULL 其中:其中:type_name:是用戶自定義數(shù)據(jù)類型的名字。:是用戶自定義數(shù)據(jù)類型的名字。system_type:是用戶自定義數(shù)據(jù)類型所基于的系:是用戶自定義數(shù)據(jù)類型所基于的系統(tǒng)數(shù)據(jù)類型名,如統(tǒng)數(shù)據(jù)類型名,如varchar、int等。等。NULL | NOT NULL:是否可以為空值。如果缺:是否可以為空值。如果缺省該項,則默認為省該項,則默認為NULL。例3.2 為sal

13、es數(shù)據(jù)庫創(chuàng)建一個用戶自定義數(shù)據(jù)類型zip,定長字符型,長度為15,不允許為空。CREATE TYPE zipFROM char(15) NOT NULL SQL Server172022-7-33.2 數(shù)據(jù)類型 使用使用DROP TYPE可以刪除用戶自定義的數(shù)據(jù)類型??梢詣h除用戶自定義的數(shù)據(jù)類型。其語法格式為:其語法格式為:DROP TYPE type_name其中,參數(shù)其中,參數(shù)type_name表示已經(jīng)定義好的用戶自定義表示已經(jīng)定義好的用戶自定義的數(shù)據(jù)類型的數(shù)據(jù)類型例例3.3 刪除在例刪除在例3.1中定義的數(shù)據(jù)類型中定義的數(shù)據(jù)類型telephone_code。DROP TYPE tele

14、phone_code注意:只能刪除已經(jīng)定義但未被使用的用戶自定義數(shù)據(jù)類型,注意:只能刪除已經(jīng)定義但未被使用的用戶自定義數(shù)據(jù)類型,正在被表或其他數(shù)據(jù)庫對象使用的用戶自定義數(shù)據(jù)類型不能正在被表或其他數(shù)據(jù)庫對象使用的用戶自定義數(shù)據(jù)類型不能被刪除。被刪除。 SQL Server182022-7-33.3 表結(jié)構(gòu)的創(chuàng)建、修改和刪除 表結(jié)構(gòu)的創(chuàng)建表結(jié)構(gòu)的創(chuàng)建 使用使用SQL Server Management Studio創(chuàng)建表結(jié)構(gòu)創(chuàng)建表結(jié)構(gòu)啟動啟動SQL Server Managerment Studio,在,在“對象資對象資源管理器源管理器”窗口中,依次展開窗口中,依次展開“數(shù)據(jù)庫數(shù)據(jù)庫”節(jié)點、節(jié)點、

15、“sales”數(shù)據(jù)庫節(jié)點。右鍵單擊數(shù)據(jù)庫節(jié)點。右鍵單擊“表表”,從彈出的快,從彈出的快捷菜單中選擇捷菜單中選擇“新建表新建表”命令,系統(tǒng)彈出表設(shè)計器命令,系統(tǒng)彈出表設(shè)計器窗口,在該窗口中進行表結(jié)構(gòu)的創(chuàng)建。窗口,在該窗口中進行表結(jié)構(gòu)的創(chuàng)建。 最后,需保存表格。最后,需保存表格。 SQL Server192022-7-33.3 表結(jié)構(gòu)的創(chuàng)建、修改和刪除 使用使用Transact-SQL語句創(chuàng)建表格的語法格式語句創(chuàng)建表格的語法格式CREATE TABLE database_name.schema_name.|schema_name.table_name(column_name1 data_type

16、DEFAULT constant_expression IDENTITY ( SEED, INCREMENT ) NULL | NOT NULL ,n)ON filegroup | DEFAULT SQL Server202022-7-33.3 表結(jié)構(gòu)的創(chuàng)建、修改和刪除例例3.4 為為sales數(shù)據(jù)庫創(chuàng)建一個銷售人員表數(shù)據(jù)庫創(chuàng)建一個銷售人員表Seller,它包含銷售員編號(它包含銷售員編號(SaleID)、)、姓名(姓名(SaleName)、性別()、性別(Gender )、)、出生日期(出生日期(Birthady)、雇用日期()、雇用日期(HireDate)、)、地址(地址(Address)

17、、電話()、電話(Telephone) 、備注(備注(Note),),其中其中SaleID、SaleName這兩列不允許為空。這兩列不允許為空。 SQL Server212022-7-33.3 表結(jié)構(gòu)的創(chuàng)建、修改和刪除CREATE TABLE Seller(SaleID char(3) NOT NULL,SaleName char(8) NOT NULL, Gender char(2), Birthday datetime, HireDate datetime, Address char(60), Telephone char(13), Note char(200) SQL Server222

18、022-7-33.3 表結(jié)構(gòu)的創(chuàng)建、修改和刪除例例3.5 為為sales數(shù)據(jù)庫創(chuàng)建訂單表數(shù)據(jù)庫創(chuàng)建訂單表Orders,包括,包括OrderID、CustomerID、SaleID和和OrderDate字段,其中字段,其中OrderID為標為標識列,起始值為識列,起始值為10248,增量為,增量為1;CustomerID和和SaleID字段字段不允許為空值;不允許為空值;OrderDate字段的默認值為當前日期。字段的默認值為當前日期。CREATE TABLE Orders(OrderID int IDENTITY(10248,1), CustomerID char(3) NOT NULL, S

19、aleID char(3) NOT NULL, OrderDate datetime DEFAULT getdate() SQL Server232022-7-33.3 表結(jié)構(gòu)的創(chuàng)建、修改和刪除例例3.6 為為sales數(shù)據(jù)庫在文件組數(shù)據(jù)庫在文件組USER1上創(chuàng)建上創(chuàng)建Category種類表種類表CREATE TABLE Category(CategoryID int NOT NULL, CategoryName nvarchar(15), Description nvarchar(200) )ON USER1 SQL Server242022-7-33.3 表結(jié)構(gòu)的創(chuàng)建、修改和刪除 表結(jié)構(gòu)的

20、修改表結(jié)構(gòu)的修改修改的操作包括:增加或刪除列、修改列的數(shù)據(jù)類型、修改的操作包括:增加或刪除列、修改列的數(shù)據(jù)類型、數(shù)據(jù)長度等。數(shù)據(jù)長度等。 使用使用SQL Server Managerment Studio修改表結(jié)構(gòu):修改表結(jié)構(gòu):右鍵單擊要修改結(jié)構(gòu)的表右鍵單擊要修改結(jié)構(gòu)的表Seller,選擇,選擇“修改修改”命令,命令,在表設(shè)計器中對表的結(jié)構(gòu)進行修改。在表設(shè)計器中對表的結(jié)構(gòu)進行修改。 使用使用Transact-SQL語句修改表結(jié)構(gòu)語句修改表結(jié)構(gòu) SQL Server252022-7-33.3 表結(jié)構(gòu)的創(chuàng)建、修改和刪除ALTER TABLE table_name ADD column_name d

21、ate_type DEFAULT contant_expressionIDENTITY(SEED,INCREMENT) NULL | NOT NULL ,n| DROP COLUMN column_name| ALTER COLUMN column_name new_datetype NULL | NOT NULL SQL Server262022-7-33.3 表結(jié)構(gòu)的創(chuàng)建、修改和刪除例3.7 sales數(shù)據(jù)庫中的Customer表包含CustomerID、ConpanyName和ConnectName三個字段,現(xiàn)為該表添加地址(Address)、郵政編碼(ZipCode)和電話號碼(Tel

22、ephone)字段。 SQL Server272022-7-3ALTER TABLE CustomerADD Address char(40), ZipCode char(6) ,Telephone varchar(15) NOT NULL SQL Server282022-7-3例3.8 將表Seller中的Sex列刪除ALTER TABLE Seller DROP COLUMN Sex例3.9 將Seller表中的Address字段的長度改為30,且不能為空ALTER TABLE SellerALTER COLUMN Address varchar(30) NOT NULL SQL Ser

23、ver292022-7-33.3 表結(jié)構(gòu)的創(chuàng)建、修改和刪除 刪除表刪除表 使用SQL Server Managerment Studio刪除表的步驟:1)打開SQL Server Managerment Studio,在“對象資源管理器”窗口中,依次展開“數(shù)據(jù)庫”節(jié)點、“sales”數(shù)據(jù)庫節(jié)點、“表”節(jié)點。2)選擇要刪除的表,單擊鼠標右鍵右鍵,從彈出的快捷菜單中選擇“刪除刪除”命令。3)系統(tǒng)會打開“刪除對象”對話框,在該對話框中列出了將被刪除的表。單擊“確定”按鈕即可完成指定表的刪除操作。 SQL Server302022-7-33.3 表結(jié)構(gòu)的創(chuàng)建、修改和刪除使用使用DROP TABLE命令

24、刪除表格,語法格式:命令刪除表格,語法格式:DROP TABLE table_name1,n例3.10 將Customer表從sales數(shù)據(jù)庫中刪除。DROP TABLE Customer SQL Server312022-7-33.4 向表中插入、修改和刪除數(shù)據(jù) 向表中插入數(shù)據(jù)向表中插入數(shù)據(jù)(參見第五版教材(參見第五版教材P115)使用的Transact-SQL語句完成插入操作,語法格式:INSERT INTO table_name ( column_name ,n ) VALUES ( expression | NULL | DEFAULT ,n )其中: table_name:要插入數(shù)據(jù)

25、的表名。 column_name:要插入數(shù)據(jù)的列名。 expression:與column_name相對應(yīng)的字段的值,字符型和日期型值插入時要加單引號。 SQL Server322022-7-33.4 向表中插入、修改和刪除數(shù)據(jù)例3.11 向Category表中添加數(shù)據(jù)。INSERT INTO Category(CategoryID,CategoryName,Description)VALUES(1,飲料,軟飲料、咖啡、茶、啤酒和淡啤酒)例3.12 向Seller表中插入一行數(shù)據(jù),其中Sex字段使用默認值為男,HireDate等字段均取空值。 SQL Server332022-7-33.4 向

26、表中插入、修改和刪除數(shù)據(jù)INSERT INTO Seller(SaleID,SaleName,Sex,Birthday,HireDate,Address,Telephone,Notes)VALUES(s11,趙宇飛,DEFAULT,1974-07-25,NULL,NULL,NULL,NULL)或INSERT INTO Seller(SaleID,SaleName,Birthday)VALUES(s11,趙宇飛,1974-07-25) SQL Server342022-7-33.4 向表中插入、修改和刪除數(shù)據(jù)注意:(1)在插入數(shù)據(jù)時,對允許為空的列可使用NULL插入空值;對具有默認值的列可使用D

27、EFAULT插入默認值。(2)當向表中所有列都插入新數(shù)據(jù)時,可以省略列名表,但必須保證VALUES后的各數(shù)據(jù)項位置同表定義時的順序一致,否則系統(tǒng)會報錯。 SQL Server352022-7-33.4 向表中插入、修改和刪除數(shù)據(jù)例3.13 在例3.11和例3.12中,由于是對表中所有列插入數(shù)據(jù),則可省略列名表,寫成如下形式:INSERT INTO CategoryVALUES(1,飲料,軟飲料、咖啡、茶、啤酒和淡啤酒)INSERT INTO SellerVALUES(s11,趙宇飛,DEFAULT,1974-07-25,NULL,NULL,NULL,NULL) SQL Server362022

28、-7-33.4 向表中插入、修改和刪除數(shù)據(jù)例3.14 向OrderDetail表中插入一行數(shù)據(jù)。INSERT INTO OrderDetail VALUES(10254,P01003)正確形式為:INSERT INTO OrderDetail VALUES(10254,P01003,NULL)INSERT INTO OrderDetail (OrderID,ProductID)VALUES(10254,P01003)在后一種形式中,系統(tǒng)將Quantity字段的值自動設(shè)為空值。錯誤錯誤 SQL Server372022-7-33.4 向表中插入、修改和刪除數(shù)據(jù)例3.15 向Orders表中插入一

29、行數(shù)據(jù)。INSERT INTO Orders (CustomerID,SaleID)Values(c01,s11)注意:具有IDENTITY屬性的列,其值由系統(tǒng)給出,用戶不必向表中插入數(shù)據(jù)。 SQL Server382022-7-33.4 向表中插入、修改和刪除數(shù)據(jù)使用INSERT INTO語句一次只能插入一行數(shù)據(jù),若想一次插入多行多行數(shù)據(jù),則需在INSERT INTO語句中加入查詢子句查詢子句:INSERT INTO dest_table_name ( column_name ,n ) SELECT column_name ,nFROM source_table_name WHERE sea

30、rch_conditions SQL Server392022-7-33.4 向表中插入、修改和刪除數(shù)據(jù)例3.16 創(chuàng)建employee表,包含三個字段EmployeeID、EmployeeName和Address。將Seller表中的女銷售人員的數(shù)據(jù)插入到employee表中。CREATE TABLE Employee(EmployeeID char(3),EmployeeName char(8),Address char(60)GOINSERT INTO EmployeeSELECT SaleID,SaleName,AddressFROM SellerWHERE Gender=女 SQL

31、Server402022-7-33.4 向表中插入、修改和刪除數(shù)據(jù) 修改表中數(shù)據(jù)修改表中數(shù)據(jù) 使用使用UPDATE語句來實現(xiàn)。其語法格式為:語句來實現(xiàn)。其語法格式為:UPDATE table_nameSET column_name=expression ,n WHERE search_conditions table_name:要更新數(shù)據(jù)的表名。:要更新數(shù)據(jù)的表名。 column_name:要更新數(shù)據(jù)的列名。:要更新數(shù)據(jù)的列名。 expression:更新后的數(shù)據(jù)值。:更新后的數(shù)據(jù)值。 search_conditions:更新條件:更新條件,只對表中滿足該條件只對表中滿足該條件的記錄進行更新。

32、的記錄進行更新。 SQL Server412022-7-33.4 向表中插入、修改和刪除數(shù)據(jù)例例3.17 將將Product表中表中啤酒啤酒的價格改為的價格改為4元。元。UPDATE ProductSET Price=4WHERE ProductName=啤酒啤酒 SQL Server422022-7-33.4 向表中插入、修改和刪除數(shù)據(jù)例例3.18 將將Seller表中表中 趙宇飛的地址改為趙宇飛的地址改為東直門外東直門外大街大街108號號,電話改為,電話改為(010)60486658。UPDATE SellerSET Address=東直門外大街東直門外大街108號號, Telephone

33、=(010)60486658WHERE SaleID=s11 SQL Server432022-7-33.4 向表中插入、修改和刪除數(shù)據(jù)例例3.19 將將Product表中表中CategoryID為為2的所有產(chǎn)品的的所有產(chǎn)品的價格下調(diào)價格下調(diào)10UPDATE ProductSET Price=Price*(1-0.1)WHERE CategoryID=2 SQL Server442022-7-33.4 向表中插入、修改和刪除數(shù)據(jù) 刪除表中數(shù)據(jù)刪除表中數(shù)據(jù)刪除表中數(shù)據(jù)使用的是刪除表中數(shù)據(jù)使用的是DELETE語句,其語法格式為:語句,其語法格式為:DELETE FROM table_name WH

34、ERE search_conditions 功能:刪除表中符合功能:刪除表中符合search_conditions的數(shù)據(jù);缺省的數(shù)據(jù);缺省WHERE子句時,表示刪除該表中的所有數(shù)據(jù)。子句時,表示刪除該表中的所有數(shù)據(jù)。 SQL Server452022-7-33.4 向表中插入、修改和刪除數(shù)據(jù)例例3.20 將例將例3.12插入的數(shù)據(jù)從插入的數(shù)據(jù)從Seller表中刪除。表中刪除。DELETE FROM SellerWHERE SaleID=s11 SQL Server462022-7-33.4 向表中插入、修改和刪除數(shù)據(jù) 在在SQL Server Management Studio 插入、修改和刪

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

36、約束有5種類型:主鍵約束、唯一約束、檢查約束、默種類型:主鍵約束、唯一約束、檢查約束、默認約束、外鍵約束(參照約束)。認約束、外鍵約束(參照約束)。 約束可以在兩個層次上實施:約束可以在兩個層次上實施:(1)列級:用戶定義的約束只對表中的一列起作用;)列級:用戶定義的約束只對表中的一列起作用;(2)表級:用戶定義的約束對表中的多列起作用。)表級:用戶定義的約束對表中的多列起作用。 SQL Server482022-7-33.5 約束 約束的創(chuàng)建、修改和刪除約束的創(chuàng)建、修改和刪除 約束可以用約束可以用Transact-SQL的的CREATE TABLE語句或語句或ALTER TABLE語句來創(chuàng)建

37、。語句來創(chuàng)建。(1)使用)使用CREATE TABLE語句創(chuàng)建約束語句創(chuàng)建約束創(chuàng)建表時定義約束,約束是表格定義的一部分。語法格式:創(chuàng)建表時定義約束,約束是表格定義的一部分。語法格式:CREATE TABLE table_name( column_name data_type CONSTRAINT constraint_name constraint_type ,n ) SQL Server492022-7-33.5 約束 (2)使用)使用ALTER TABLE語句創(chuàng)建約束語句創(chuàng)建約束 在已有的表上創(chuàng)建、修改約束。語法格式為:在已有的表上創(chuàng)建、修改約束。語法格式為:ALTER TABLE tab

38、le_name WITH CHECK | WITH NOCHECK ADD CONSTRAINT constraint_name constraint_typeWITH CHECK | WITH NOCHECK : 對表中現(xiàn)有的數(shù)據(jù)是對表中現(xiàn)有的數(shù)據(jù)是否進行檢查。否進行檢查。 SQL Server502022-7-33.5 約束(3)使用)使用ALTER TABLE語句還可刪除約束,語法格式為:語句還可刪除約束,語法格式為: ALTER TABLE table_name DROP CONSTRAINT constraint_name 注意:只刪除了表中的指定約束,并沒有刪除表。注意:只刪除了表

39、中的指定約束,并沒有刪除表。 但是,當表被刪除時,在該表上定義的所有約束將自動但是,當表被刪除時,在該表上定義的所有約束將自動取消。取消。 SQL Server512022-7-33.5 約束 主鍵約束主鍵約束 主鍵用于唯一地標識表中每一條記錄??梢远x表中的主鍵用于唯一地標識表中每一條記錄??梢远x表中的一列或多列為主鍵。一列或多列為主鍵。 主鍵列的值不能重復(fù),也不能為空值。每張表都應(yīng)該有主鍵列的值不能重復(fù),也不能為空值。每張表都應(yīng)該有且只有一個主鍵。且只有一個主鍵。(1)創(chuàng)建主鍵約束的語法格式:)創(chuàng)建主鍵約束的語法格式: CONSTRAINT constraint_name PRIMARY

40、 KEY CLUSTERED | NONCLUSTERED ( col_name ,n) SQL Server522022-7-33.5 約束例例3.21 創(chuàng)建創(chuàng)建Orders表,包括四個字段,其中表,包括四個字段,其中OrderID字段設(shè)字段設(shè)為主鍵。為主鍵。CREATE TABLE Orders(OrderID int CONSTRAINT pk_orderid PRIMARY KEY, CustomerID char(3), SaleID char(3), OrderDate datetime)如果沒有提供主鍵約束的名字,如果沒有提供主鍵約束的名字,SQL Server會自動為該約束會自

41、動為該約束提供一個名字。提供一個名字。 SQL Server例例3.22 修改表修改表 添加主鍵約束。添加主鍵約束。create table student( sno int , sname varchar(20) , sage int)alter table student alter column sno int not nullalter table student add primary key(sno) SQL Server542022-7-33.5 約束(2)在)在SQL Server Management Studio中創(chuàng)建、修改、刪中創(chuàng)建、修改、刪除主鍵約束。除主鍵約束。1)選

42、中需要添加約束的)選中需要添加約束的表表,右鍵單擊右鍵單擊,選擇,選擇“修改修改” 。2)右鍵單擊要設(shè)置為主鍵的字段(一個或多個),右)右鍵單擊要設(shè)置為主鍵的字段(一個或多個),右鍵單擊,選擇鍵單擊,選擇“設(shè)置主鍵設(shè)置主鍵”。這時主鍵列的左邊會。這時主鍵列的左邊會顯示顯示“黃色鑰匙黃色鑰匙”的圖標。的圖標。3)點擊工具欄上的)點擊工具欄上的“保存保存”按鈕,完成主鍵的設(shè)置。按鈕,完成主鍵的設(shè)置。 SQL Server552022-7-33.5 約束唯一(唯一(UNIQUE)約束)約束 用來限制在指定列上不允許有相同的值。一個表上可用來限制在指定列上不允許有相同的值。一個表上可以有多個以有多個U

43、NIQUE約束。約束。 唯一約束和主鍵約束的區(qū)別:唯一約束和主鍵約束的區(qū)別: 唯一約束允許在該列上存在唯一約束允許在該列上存在NULL值,而主鍵約值,而主鍵約束限制更為嚴格,不但不允許有重復(fù),而且也不束限制更為嚴格,不但不允許有重復(fù),而且也不允許有空值。允許有空值。 在創(chuàng)建唯一約束和主鍵約束時可以創(chuàng)建聚集索引在創(chuàng)建唯一約束和主鍵約束時可以創(chuàng)建聚集索引和非聚集索引,但在缺省情況下主鍵約束產(chǎn)生聚和非聚集索引,但在缺省情況下主鍵約束產(chǎn)生聚集索引,而唯一約束產(chǎn)生非聚集索引。集索引,而唯一約束產(chǎn)生非聚集索引。 SQL Server562022-7-33.5 約束(1)創(chuàng)建唯一約束的語法格式為:)創(chuàng)建唯一

44、約束的語法格式為: CONSTRAINT constraint_name UNIQUE CLUSTERED | NONCLUSTERED ( col_name ,n) SQL Server572022-7-33.5 約束例例3.25 創(chuàng)建表創(chuàng)建表Department,包含三個字段,并在,包含三個字段,并在dep_name字段上創(chuàng)建唯一約束。字段上創(chuàng)建唯一約束。CREATE TABLE Department(dep_id int PRIMARY KEY, dep_name char(20) CONSTRAINT unq_dname UNIQUE, dep_head char(5) ) SQL S

45、erver582022-7-33.5 約束例例3.26 在在Seller表的表的Telephone字段建立唯一約束。字段建立唯一約束。ALTER TABLE SellerADD CONSTRAINT unq_telephone UNIQUE(Telephone) SQL Server592022-7-33.5 約束(2)在)在SQL Server Management Studio下創(chuàng)建唯一約束的下創(chuàng)建唯一約束的操作步驟為:操作步驟為:1)選中需要添加唯一性約束的)選中需要添加唯一性約束的表表,右鍵單擊右鍵單擊,選擇,選擇“修改修改” 。2)右鍵單擊上方窗格,選擇)右鍵單擊上方窗格,選擇“索引

46、索引/鍵鍵”命令。命令。3)點擊)點擊“添加添加”按鈕添加新的主按鈕添加新的主/唯一鍵或索引;在唯一鍵或索引;在(常規(guī))的(常規(guī))的“類型類型”右邊選擇右邊選擇“唯一鍵唯一鍵”,在,在“列列”的右邊單擊省略號按鈕的右邊單擊省略號按鈕“”,選擇列名選擇列名“Cname”和排序規(guī)律和排序規(guī)律ASC(升序)或(升序)或DESC(降序)。(降序)。4)點擊)點擊“關(guān)閉關(guān)閉”按鈕即可。按鈕即可。 SQL Server602022-7-33.5 約束 CHECK約束約束 用來指定某列的可取值的范圍??梢栽趩瘟猩嫌脕碇付沉械目扇≈档姆秶???梢栽趩瘟猩隙x多個定義多個CHECK約束。約束。(1)用)用T-S

47、QL語句創(chuàng)建檢查約束,語法格式:語句創(chuàng)建檢查約束,語法格式: CONSTRAINT constraint_name CHECK (exp)exp是一個表達式,定義要對列進行檢查的條件。是一個表達式,定義要對列進行檢查的條件。 SQL Server612022-7-33.5 約束例例3.27 創(chuàng)建學(xué)生表創(chuàng)建學(xué)生表Student,包含,包含sid(學(xué)號)、(學(xué)號)、sname(姓(姓名)、名)、sage(年齡)以及(年齡)以及scity(城市)四個字段,并在(城市)四個字段,并在sage字段創(chuàng)建一個字段創(chuàng)建一個CHECK約束,使得約束,使得sage的值在的值在1830歲之間。歲之間。CREATE

48、TABLE Student(sid int PRIMARY KEY, sname char(20), sage int CONSTRAINT check_age CHECK (sage=18 AND sage=30), scity char(10) SQL Server622022-7-33.5 約束該語句還可寫成:該語句還可寫成:CREATE TABLE Student(sid int PRIMARY KEY, sname char(20), sage int CONSTRAINT check_age CHECK (sage BETWEEN 18 AND 30), scity char(10

49、)注意:當向該表執(zhí)行插入或更新操作時,注意:當向該表執(zhí)行插入或更新操作時,SQL Server會檢查會檢查插入的新列值是否滿足插入的新列值是否滿足CHECK約束的條件,若不滿足,系約束的條件,若不滿足,系統(tǒng)會報錯,并拒絕執(zhí)行插入或更新操作。統(tǒng)會報錯,并拒絕執(zhí)行插入或更新操作。 SQL Server632022-7-33.5 約束例例3.28 修改學(xué)生表修改學(xué)生表Student,在,在scity字段創(chuàng)建一個字段創(chuàng)建一個CHECK約束,以限制只能輸入有效的城市。約束,以限制只能輸入有效的城市。ALTER TABLE Student WITH NOCHECKADD CONSTRAINT check_

50、city CHECK ( scity IN (北京北京,上海上海,天津天津,重慶重慶) ) SQL Server642022-7-33.5 約束例例3.29 修改修改Seller表,在表,在Telephone字段創(chuàng)建字段創(chuàng)建CHECK約束,約束,使得該字段的值的格式為使得該字段的值的格式為11位數(shù)字。位數(shù)字。ALTER TABLE SellerADD CONSTRAINT check_telephone CHECK ( Telephone LIKE (0-90-90-9)0-90-90-90-90-90-90-90-9 )注意:注意:不能在具有不能在具有IDENTITY屬性的列上設(shè)置屬性的列上

51、設(shè)置CHECK約束。約束。 SQL Server652022-7-33.5 約束(2)在)在SQL Seerver Management Studio下創(chuàng)建下創(chuàng)建CHECK約約束的操作步驟為:束的操作步驟為:1)選中需要添加)選中需要添加CHECK約束的約束的表表,右鍵單擊右鍵單擊,選擇,選擇“修改修改”命令。命令。2)在彈出窗口中,右鍵單擊上方窗格,選擇)在彈出窗口中,右鍵單擊上方窗格,選擇“CHECK約束約束”命令。命令。3)單擊)單擊“添加添加”按鈕,系統(tǒng)給出默認的約束名按鈕,系統(tǒng)給出默認的約束名CK_Producs,在(常規(guī))的,在(常規(guī))的“表達式表達式”文本框中輸文本框中輸入約束條

52、件。入約束條件。 SQL Server662022-7-33.5 約束 若要修改已有的若要修改已有的CHECK約束,可以在約束,可以在“選定的選定的CHECK約束約束”下拉列表中下拉列表中 選擇要修改的選擇要修改的CHECK約束。約束。4)“表設(shè)計器表設(shè)計器”中的中的“在創(chuàng)建或重新啟用時檢查現(xiàn)有數(shù)在創(chuàng)建或重新啟用時檢查現(xiàn)有數(shù)據(jù)據(jù)” 決定在創(chuàng)建決定在創(chuàng)建CHECK約束時是否約束時是否檢測現(xiàn)存數(shù)據(jù)檢測現(xiàn)存數(shù)據(jù)。5)單擊)單擊“關(guān)閉關(guān)閉”按鈕,完成按鈕,完成CHECK約束的創(chuàng)建或修改。約束的創(chuàng)建或修改。 SQL Server672022-7-33.5 約束 DEFAULT約束約束 給表中指定列賦予默

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

54、student add default(男男) for ssex (2)使用)使用SQL Seerver Management Studio創(chuàng)建創(chuàng)建默認約束默認約束 (在表設(shè)計器的下半部分,在表設(shè)計器的下半部分,“默認值與綁定默認值與綁定”欄設(shè)置。欄設(shè)置。) SQL Server692022-7-33.5 約束 外鍵約束外鍵約束Foreign key 用于與其他表(主鍵表)中的列(稱為主用于與其他表(主鍵表)中的列(稱為主鍵列)建立連接。鍵列)建立連接。例如:例如: SQL Server702022-7-33.5 約束(1)創(chuàng)建外鍵約束的語法格式為:)創(chuàng)建外鍵約束的語法格式為: CONSTRA

55、INT constraint_name FOREIGN KEY (col_name1,n)REFERENCES table_name(column_name1,n)其中:其中:col_name1,n:是要實現(xiàn)外鍵約束的列。:是要實現(xiàn)外鍵約束的列。table_name:是主鍵表(參照表)表名。:是主鍵表(參照表)表名。column_name1,n:是主鍵列(參照列)列名。:是主鍵列(參照列)列名。 SQL Server712022-7-33.5 約束例例3.31 若若sales數(shù)據(jù)庫中包含數(shù)據(jù)庫中包含Seller表和表和Customer表。表。Seller(SaleID、SaleName)Cus

56、tomer(CustomerID、Company)新建表新建表Orders(OrderID、CustomerID、SaleID,OrderDate)其中其中CustomerID、SaleID為外鍵。為外鍵。CREATE TABLE Orders(Orderid int PRIMARY KEY, CustomerID char(3) REFERENCES Customer(CustomerID), SaleID char(3) CONSTRAINT fk_sid REFERENCES Seller(SaleID), OrderDate datetime DEFAULT getdate() SQL

57、 Server722022-7-33.5 約束例例3.32 修改修改OrderDetail表,在表,在OrderID列上創(chuàng)建外鍵約束。列上創(chuàng)建外鍵約束。ALTER TABLE OrderDetailADD CONSTRAINT fk_orderid FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)或者:或者:ALTER TABLE OrderDetailWITH NOCHECKADD CONSTRAINT fk_orderid FOREIGN KEY (OrderID) REFERENCES Orders(OrderID) SQL Server7

58、32022-7-33.5 約束(2)在)在SQL Seerver Management Studio下同樣可以創(chuàng)建外下同樣可以創(chuàng)建外鍵約束,操作步驟如下:鍵約束,操作步驟如下:1)中需要添加外鍵約束的)中需要添加外鍵約束的表表,右鍵右鍵單擊,選擇單擊,選擇“修改修改”命令。命令。2)右鍵單擊上方窗格,選擇)右鍵單擊上方窗格,選擇“關(guān)系關(guān)系”命令。命令。3)點擊)點擊“添加添加”按鈕,系統(tǒng)給出默認的關(guān)系名,單擊按鈕,系統(tǒng)給出默認的關(guān)系名,單擊“表和列規(guī)范表和列規(guī)范”內(nèi)容框中右邊的內(nèi)容框中右邊的省略號省略號按鈕,從彈按鈕,從彈出的出的“表和列表和列”對話框中選擇外鍵約束的表和列。對話框中選擇外鍵約

59、束的表和列。 單擊單擊“確定確定”按鈕,返回到按鈕,返回到“外鍵關(guān)系外鍵關(guān)系”對話框。對話框。 SQL Server742022-7-33.5 約束4)設(shè)置)設(shè)置“在創(chuàng)建或重新啟用時檢查現(xiàn)有數(shù)據(jù)在創(chuàng)建或重新啟用時檢查現(xiàn)有數(shù)據(jù)”為為“是是”,指定對于在創(chuàng)建或重新啟用約束之前就存,指定對于在創(chuàng)建或重新啟用約束之前就存在于表中的所有數(shù)據(jù),根據(jù)約束進行驗證。在于表中的所有數(shù)據(jù),根據(jù)約束進行驗證。5)將)將“強制外鍵約束強制外鍵約束”或或“強制用于復(fù)制強制用于復(fù)制”設(shè)置為設(shè)置為“是是”,則能確保任何數(shù)據(jù)添加、修改或刪除操作,則能確保任何數(shù)據(jù)添加、修改或刪除操作都不會違背外鍵關(guān)系。都不會違背外鍵關(guān)系。6)

60、展開)展開“Insert 和和 Update 規(guī)范規(guī)范”,可設(shè)置,可設(shè)置“更新規(guī)則更新規(guī)則” 和和 “刪除規(guī)則刪除規(guī)則”。右邊的。右邊的下拉列表下拉列表可選擇可選擇“層疊層疊”表示級聯(lián)更新或級聯(lián)刪除。表示級聯(lián)更新或級聯(lián)刪除。(詳見下頁)(詳見下頁) SQL Server752022-7-33.5 約束如果對主鍵表進行更新(如果對主鍵表進行更新(Update)或刪除()或刪除(Delete)一行數(shù)據(jù)的操作,)一行數(shù)據(jù)的操作,會檢查主鍵表的主鍵是否被從表的外鍵引用:會檢查主鍵表的主鍵是否被從表的外鍵引用:l 若沒有被引用,則更新或刪除。若沒有被引用,則更新或刪除。l 若被引用,可能發(fā)生如下若被引用

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論