第5章數據表的管理與使用-完_第1頁
第5章數據表的管理與使用-完_第2頁
第5章數據表的管理與使用-完_第3頁
第5章數據表的管理與使用-完_第4頁
第5章數據表的管理與使用-完_第5頁
已閱讀5頁,還剩102頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第五章 數據表的管理與使用本章主要內容1 5.1 數據類型數據類型25.2 創建表創建表35.3 修改表修改表45.4 刪除表刪除表55.5 數據管理數據管理65.6 數據完整性數據完整性5 數據表的管理與使用 SQL Server SQL Server 的表是最重要的數據庫對象,用戶數據分別存放在各個表中,對數據的增加、刪除、修改和查詢等都是通過表的操作來實現的。本章主要內容1 5.1 數據類型數據類型25.2 創建表創建表35.3 修改表修改表45.4 刪除表刪除表55.5 數據管理數據管理65.6 數據完整性數據完整性5.1 數據類型 在創建表時,必須為表中的每列指派一種數據類型,數據類

2、型確定了該列數據的取值范圍,它決定了數據在計算機中的存儲格式、存儲長度等屬性。SQL Server數據類型分為系統數據類型和用戶自定義數據類型。SQL Server2008中常用的系統數據類型如表5.1所示。5.1 數據類型表5.1 SQL Server2008中常用的系統數據類型分類分類說明說明數據類型數據類型數字數據整數型bigint,int,smallint,tinyint精確數值型decimal,numeric浮點型float,real貨幣型money,smallmoney位型bit字符數據字符型char,varchar,Text(改用varchar(MAX)Unicode字符型nch

3、ar,nvarchar ,ntext(改用n varchar(MAX)日期時間數據日期時間型datetime,smalldatetime二進制數據二進制型binary,varbinary ,Image(改用varbinary(MAX)1. 數字數據(1)整數型數據Bigint:-263263-1,精度19位,長度8個字節,-9 223 372 036 854 775 808到9 223 372 036 854 775 807Int:-231231-1,精度10位,長度4個字節,-2 147 483 648 到 2 147 483 647 Smallint:-215215-1,精度5位,長度2個

4、字節,-32 768 到 32 767 Tinyint:0255,精度3位,長度1個字節,0 到255 該類別的數據僅包含數字,包括正數、負數及分數等。1. 數字數據(2) 精確數值型 用于存儲帶有小數點且小數點后位數確定的實數,包括decimal和Numeric兩類。功能上兩者完全等價。聲明格式:numeric(p,s)|decimal(p,s),其中p為精度,s為小數位數。精度:指數值中所存儲的十進制數據的總位數。小數位數:指數值數據中小數點右邊可以有的數字位數的最大值。如7654.321的精度為7,小數位數為3。注意:聲明該類型的數據時,其小數位數必須小于精度。1. 數字數據(3) 浮點

5、型 是指不能精確表示數據的精度的數據類型,使用此類型來存儲數據時,可能會損失部分精度,它可以用于處理取值范圍非常大且對精度要求不是十分高的數值。real:-3.40E+38 3.40E+38 ,精度7位,長度4個字節float:-1.79E+308 1.79E+308 ,精度15位,長度8個字節1. 數字數據(4) 貨幣型 專門用于處理貨幣的數據類型:money和smallmoney,它們用十進制數表示貨幣值, 相當于4位小數的DECIMAL值。money:精度19位,小數位數為4Smallmoney:精度為10,小數位數為4 當向表中插入貨幣型數據時,可在數據前面加上貨幣符號($),并且數據

6、中間不能有逗號;如果貨幣值為負數,需要在$后面加上負號。如:$777.90 $620 $-120.801. 數字數據(5) 位型Bit類型用于存儲整數,取值在0、1或NULL,常用于邏輯數據的存取。2. 字符數據 字符數據用于存儲漢字、英文字母、數字、標點和各種符號。在輸入時,需要用單引號括起來。 char(n)和nchar(n):定長的字符數據類型,n表示字符型數據的長度。 varchar(n)和nvarchar(n):變長的字符數據類型,n表示串中字符的最大長度。 用于存放大量的字符數據的文本型text和ntext,現在分別用varchar(MAX)和nvarchar(MAX)來替換使用。

7、3. 日期時間數據 Datetime:表示日期范圍1753-1-19999-12-31的日期和時間數據,精度為3ms。數據長度為8個字節 Smalldatetime:表示日期范圍1900-1-12079-6-6的日期和時間數據,精度為1分鐘。數據長度為4個字節4. 二進制數據 二進制數據類型表示的是位數據流,一般用于存儲二進制的大對象,如聲音、圖片、多媒體等。 Binary(n):存儲固定長度的二進制數據 varbinary(n):存儲可變長度的二進制數據 Image圖像數據類型用于存放圖片、照片等,實際存儲的是可變長度的二進制數據,建議用varbinary(MAX)替換。本章主要內容1 5.

8、1 數據類型數據類型25.2 創建表創建表35.3 修改表修改表45.4 刪除表刪除表55.5 數據管理數據管理65.6 數據完整性數據完整性5.2 創建表 在SQL Server中建立數據庫后,就可以在該數據庫中創建表了。為了確定新表的結構,用戶需要決定以下內容:表中的列數、每列的列名、數據類型及數據的長度、列是否可以接受空值、是否使用約束(例如:對各列的取值范圍進行限制)以及確定主鍵和外鍵等。創建表可以通過SSMS窗口界面方式或T-SQL命令方式來實現。5.2.1使用窗口方式創建表 下面使用窗口方式在“student”數據庫中創建“學生”表,學生表的結構定義如表5.2所示。字段名稱字段名稱

9、數據類型數據類型長度長度是否為空是否為空是否主鍵是否主鍵學號char12否是姓名varchar8否性別char2否出生日期datetime是班級代碼char9否表5.2 學生表結構 其中學號為定長字符串,12位;姓名為變長字符串,最長8位,可存儲最多4個漢字;性別定長字符串,2為,可存儲一個漢字“男”或“女”。操作步驟如下:5.2.1使用窗口方式創建表步驟一步驟一1. 打開SSMS,在【對象資源管理器】窗口中依次展開【數據庫】【student】,右擊【表】節點,在彈出的快捷菜單中選擇【新建表】命令就能打開【表設計器】,如圖5.1所示。圖5.1 表的右鍵菜單窗口5.2.1使用窗口方式創建表步驟二

10、步驟二2. 設計表結構。在【表設計器】界面中可進行表結構的輸入,如圖5.2所示。圖5.2 表設計器錄入窗口5.2.1使用窗口方式創建表步驟三步驟三3. 設置主鍵。在“學號”列上右鍵,在彈出的菜單中選擇【設置主鍵】命令即 可將“學號”字段設置為主鍵,表示該列的值是唯一不重復的,如圖5.4所示。圖5.3 設計學生表結構窗口 圖5.4設置主鍵窗口設置成功后,“學號”的前面會有一個鑰匙樣的圖標,如圖5.5所示。 圖5.5 主鍵設置成功窗口5.2.1使用窗口方式創建表4. 設置表名。點擊工具欄的【保存】按鈕,出現輸入表名對話框,如圖5.6所示。在其中錄入“學生”,【確定】后即可看到“student”數據

11、庫中已經出現剛建立的“學生”表,如圖5.7所示。步驟四步驟四圖5.6 輸入表名稱窗口圖 5.7 創建表成功窗口5.2.2使用命令方式創建表 可以用T-SQL中的Create Table語句來創建表,基本語法格式如下:CREATE TABLE table_name (字段1 數據類型 列的特征, 字段2 數據類型 列的特征, ) 其中,列的特征包括:是否為空(NULL)、是否為標識列(自動編號)、是否有默認值、是否為主鍵等。創建表的語法有很多選項,這里僅列出最常用的一些,后續會逐漸補充。本章主要內容1 5.1 數據類型數據類型25.2 創建表創建表35.3 修改表修改表45.4 刪除表刪除表55

12、.5 數據管理數據管理65.6 數據完整性數據完整性5.3 修改表 表創建后,可以根據需要進行修改,如更改表名、增加列、刪除列、修改已有列的屬性(列名、數據類型、是否為空值)、調整列的順序。可以通過窗口方式或命令方式修改表。注意:表名更改后,與此相關的某些對象(如視圖)以及通過表名與表相關的存儲過程將無效,因此一般不建議更改表名。5.3.1使用窗口方式修改表修改“student”數據庫下“學生”表的步驟如下:步驟一步驟一1. 打開SSMS,在【對象資源管理器】窗口中展開【數據庫】節點,選擇“student”數據庫,找到要修改的“學生”表。右擊“學生”表,在彈出的快捷菜單中選擇【設計】命令,如圖

13、5.10所示。圖5.10 表的右鍵快捷菜單窗口5.3.1使用窗口方式修改表步驟二步驟二2. 在打開的【表設計器】窗口,與創建表時相同,可以對表進行修改,例如插入列、刪除列、修改列名、主鍵、數據類型等,如圖5.11所示。 圖5.11 表設計器修改窗口5.3.1使用窗口方式修改表步驟三步驟三3. 修改完成后點擊【保存】按鈕以使所做的修改生效。5.3.2使用命令方式修改表修改表使用alter table語句來實現。其語法格式如下:ALTER TABLE table_name ALTER COLUMN col_name /*修改已有列的屬性*/ new_data_type | ADD ,n /*增加新

14、列*/| DROP COLUMN col_name ,n /*刪除列*/【例5.5】 在學生表中增加“家庭地址”列,數據類型為varchar(30),不允許為空。在查詢編輯器中輸入并執行以下語句即可:use studentgoalter table 學生 add 家庭地址 varchar(30) not nullgo【例5.6】 修改學生表中的“家庭地址”列,將數據類型改為varchar(50),允許為空,代碼如下。use studentgoalter table 學生 alter column 家庭地址 varchar(50) nullgo【例5.7】 刪除學生表中的“家庭地址”列,代碼如下

15、。use studentgoalter table 學生 drop column 家庭地址go本章主要內容1 5.1 數據類型數據類型25.2 創建表創建表35.3 修改表修改表45.4 刪除表刪除表55.5 數據管理數據管理65.6 數據完整性數據完整性5.4.1使用窗口方式刪除表 找到要刪除的表,右鍵,在彈出的快捷菜單中選擇【刪除】,出現【刪除對象】對話框,單擊【確定】即可,如圖5.12所示。圖5.12 刪除表窗口5.4.2使用命令方式刪除表 刪除表使用drop table語句。語法格式:DROP TABLE table_name其中table_name是要被刪除的表名。如要刪除“stud

16、ent”數據庫中的“學生”表,在查詢編輯器窗口中輸入以下內容即可。use studentgodrop table 學生Go本章主要內容1 5.1 數據類型數據類型25.2 創建表創建表35.3 修改表修改表45.4 刪除表刪除表55.5 數據管理數據管理65.6 數據完整性數據完整性5.5 數據管理 表是存儲數據的地方,在表創建完成后,就可以對表進行數據管理操作,包括:向表中添加數據、修改數據和刪除數據。可以使用窗口或命令方式管理數據。圖5.13 編輯表數據窗口 使用窗口方式進行數據管理較為簡單。在SSMS中,找到要管理的“學生”表,右鍵,彈出快捷菜單,如圖5.13所示。5.5 數據管理 選擇

17、【編輯前200行】,出現數據管理窗口,如圖5.14所示。在其中可以進行數據記錄的瀏覽、添加、修改和刪除操作。還可以通過表右鍵快捷菜單中的【選擇前1000行】來查看表中的數據。5.5.1插入數據插入數據的語法格式如下:INSERT INTO table_name /*表名*/ ( column_list ) /*列名的列表,用逗號分隔*/ VALUES ( expression_list ) /*值的列表,用逗號分隔*/ 其中:(1) INTO:可選關鍵字,可省略(2) 列名:可選,如果省略,則按照表結構依次添加所有列(3) 多個列或多個值之間用逗號分隔開(4) 值的數目、順序和類型要與列相對應

18、5.5.1插入數據【例5.8】l向“系部”表添加一條記錄,代碼如下:use student goinsert 系部(代碼,名稱) values(15,計算機系)go還可以用省略列名的寫法,代碼如下:use student goinsert 系部 values(15,計算機系)go5.5.1插入數據【例5.9】l向“專業“表添加一條記錄,代碼如下:use student goinsert 專業(代碼,名稱,系部代碼) values(1501,軟件工程,15)go5.5.1插入數據【例5.10】l向“班級”表添加一條記錄,代碼如下:use student goinsert 班級(代碼,名稱,專業代

19、碼) values(120415011,軟件工程1班,1501) go5.5.1插入數據【例5.11】l 向“學生”表添加3條記錄,代碼如下:use student goinsert 學生(學號,姓名,性別,出生日期,班級代碼) values(120415011001,王浩然,女,1995-7-12,120415011)insert 學生(學號,姓名,性別,出生日期,班級代碼) values(120415011002,趙騰高,男,1994-11-5,120415011)insert 學生(學號,姓名,性別,班級代碼) values(120415011003,尹小明,男,120415011)go

20、5.5.1插入數據 執行完成后結果如圖5.15所示。其中第3條記錄的出生日期字段定義為“可以為空”,這里沒有錄入值,默認為NULL。圖5.15 表數據錄入顯示窗口【例5.11】5.5.2修改數據語法格式如下:UPDATE table_name /*表名*/SET column_name = expression | DEFAULT | NULL /*列名=更新值*/ ,.n /*多列更新用逗號分隔*/ WHERE /*更新的條件,若無where條件,則修改表中所有的行*/5.5.2修改數據【例5.12】l 修改“學生”表,將“尹小明”的出生日期修改為1996年6月11日,代碼如下:use st

21、udent goupdate 學生 set 出生日期=1996-6-11 where 姓名=尹小明go 執行后可以看到姓名為“尹小明”的出生日期被修改為“1996-6-11”,如圖5.16所示。5.5.2修改數據【例5.12】圖5.16 表數據修改顯示窗口5.5.3刪除數據DELETE 語句的語法格式如下:DELETE FROM table_name /*表名*/ WHERE /*刪除的條件,若無where則會刪除所有行的數據*/【例5.13】刪除“學生”表中姓名為“尹小明”的記錄,代碼如下:use student godelete 學生 where 姓名=尹小明go執行完成后可以看到“尹小明

22、”的記錄被刪除,如圖5.17所示。圖5.17 表數據刪除顯示窗口【例5.14】l 刪除“學生”表中所有記錄,代碼如下:use student godelete 學生 go 執行完成后將刪除學生表的所有數據,該表變成無數據的空表,但表的結構還在,如圖5.18所示。圖5.18 表數據清除顯示窗口5.5.4索引1. 索引的概念 索引(Index)是一種特殊類型的數據庫對象,它保存著數據表中一列或幾列組合的排序結構。索引與書籍的目錄作用類似,為數據表增加索引,可以大大提高數據的檢索效率。索引是數據庫中一個重要的對象,下面將詳細介紹索引的基本概念、優點、分類及操作。 索引是針對一個表,以表列為基礎建立的

23、數據庫對象,它保存著表中排序的索引列,并且記錄了索引列在數據表中的物理存儲位置,實現了表中數據的邏輯排序。5.5.4索引2. 索引的優點 可以大大加快數據檢索速度。 通過創建唯一索引,可以保證數據記錄的唯一性。 在使用ORDER BY和GROUP BY子句進行檢索數據時, 可以顯著減少查詢中分組和排序的時間。 使用索引可以在檢索數據的過程中使用優化隱藏器,提高系統性能。 可以加速表與表之間的連接,在實現數據的參照完整性方面有特別的意義。5.5.4索引3. 索引的分類 根據索引的順序與數據表的物理順序是否相同,可以把索引分成兩種類型:聚集索引與非聚集索引。(1) 聚集索引(Clustered I

24、ndex) 數據表的物理順序和索引表的順序相同,它根據表中的一列或多列的值排列記錄。每一個表只能有一個聚集索引,因為一個表的記錄只能以一種物理順序存放,在通常情況下,使用的都是聚集索引。默認主鍵是聚集索引。(2) 非聚集索引(Nonclustered Index)數據表的物理順序和索引表的順序不相同,索引表僅僅包含指向數據表的指針,這些指針本身是有序的,用于在表中快速定位數據。5.5.4索引3. 索引的分類 對于非聚集索引,表的物理順序與索引順序不同,即表的數據并不是按照索引列排序的。索引是有序的,而表中的數據是無序的,如圖5.19所示。圖5.19 非聚集索引示意圖5.5.4索引3. 索引的分

25、類在實際中常見的索引有:主鍵索引、唯一索引。索引按照結構可分為聚集索引和非聚集索引兩種不同的類型。按照實現的功能分,有一類索引被稱作“唯一索引”。它既可以采用聚集索引的結構,又可以采用非聚集索引的結構。唯一索引的特征: 不允許兩行具有相同的索引值。 可用于實施實體完整性。 在創建主鍵約束和唯一約束時自動創建唯一索引。在已有數據的表上創建唯一索引時,如果在該列數據存在重復值,那么系統將返回錯誤信息。在實際的編程應用中會經常使用到唯一索引。因為在一個表中,可能會有很多列的列值需要保證其唯一性,如:有身份證號、工號、學號等,可在這些列上創建唯一索引。5.5.4索引4. 創建索引(1) 使用窗口方式創

26、建索引下面為“系部”表的“名稱”字段建立唯一索引。圖5.20 創建表索引窗口 圖5.21 索引設置窗口5.5.4索引圖5.22 索引列設置窗口 圖5.23 索引設置結果顯示窗口4. 創建索引5.5.4索引4. 創建索引(2) 使用命令方式創建索引創建索引使用CREATE INDEX語句。CREATE INDEX語句的語法形式如下:CREATE UNIQUE CLUSTERED | NONCLUSTERED INDEX index_name ON table_name(column_name ASC | DESC ,.n )5.5.4索引5. 管理索引 索引創建成功后可以根據需要進行改名、修改索

27、引設置、刪除索引等操作。可以在“索引設置窗口”進行修改和刪除,可以使用drop index table_name.index_name來刪除索引。5.5.4索引6. 使用索引的代價 使用索引雖然可以提高系統性能,但并不是每一列都適合建立索引,使用索引要付出一定的代價。 創建索引要花費時間和占用存儲空間。 建立索引加快了數據檢索速度,卻減慢了數據修改速度。7. 建立索引的原則 使用索引要付出代價,所以在建立索引時要根據實際情況,考慮哪些列適合建立索引,哪些列不適合建立索引。原則如下。(1) 考慮建索引的列如果在一個列上創建索引,該列就稱為索引列。索引列中的值稱為關鍵字值。考慮建索引的列有如下這些

28、: 主鍵通常檢索、存取表是通過主鍵來進行的。因此,應該考慮在主鍵上建立索引。 連接中頻繁使用的列用于連接的列若按順序存放,系統可以很快地執行連接。如外鍵,除用于實現參照完整性外,還經常用于進行表的連接。 在某一范圍內頻繁搜索的列和按排序順序頻繁檢索的列7. 建立索引的原則(2) 不考慮建索引的列 建立索引需要產生一定的存儲開銷,在進行插入和更新數據的操作時,維護索引也要花費時間和空間,因此,沒有必要對表中的所有列都建立索引。創建索引與否以及在哪些列上建立索引,要看建立索引和維護索引的代價與因建立索引所節省的時間相比哪個更合算。7. 建立索引的原則 很少或從來不在查詢中引用的列,因為系統很少或從

29、來不根據這個列的值去查找數據行。 只有兩個或很少幾個值的列(如性別,只有兩個值“男”或“女”),以這樣的列創建索引并不能得到建立索引的好處。 以bit、text、image數據類型定義的列。 數據行數很少的小表一般也沒有必要創建索引。一般來說,如下一些列不考慮建立索引:7. 建立索引的原則本章主要內容1 5.1 數據類型數據類型25.2 創建表創建表35.3 修改表修改表45.4 刪除表刪除表55.5 數據管理數據管理65.6 數據完整性數據完整性5.6 數據完整性 數據完整性是指存儲在數據庫中數據的正確性和一致性。數據庫中數據是否完整關系到該數據庫能否真實的反映現實世界。以“學生”表為例,學

30、號要唯一不能重復,性別只能是男或女。如果在增加、刪除和修改時不限制,就會出現數據庫中數據與現實不符的情況。因此保證數據的完整性在數據庫系統中非常重要。在SQL Server中可以通過約束、默認、規則、觸發器來達到保證數據完整性的目的。5.6.1數據完整性分類1.實體完整性 根據數據完整性所作用的數據庫對象和范圍不同,數據完整性可分為實體完整性、域完整性、參照完整性和用戶定義完整性四種。 實體完整性又稱為行的完整性,要求表中有一個主鍵,其值不能為空且能唯一地標識對應的記錄。 實現實體完整性的方法主要有:主鍵約束PRIMARY KEY、唯一性約束UNIQUE、唯一索引UNIQUE INDEX、標識

31、IDENTITY等。5.6.1數據完整性分類2. 域完整性 域完整性又稱為列完整性,指給定列輸入的有效性。 實現域完整性的方法主要有:默認值約束DEFAULT、檢查約束CHECK、外鍵約束FOREIGN KEY、規則RULE、數據類型、非空性約束NOT NULL等。5.6.1數據完整性分類3. 參照完整性 參照完整性又稱為引用完整性。是指作用于有關聯的兩個或兩個以上的表,通過使用主鍵和外鍵或主鍵和唯一鍵之間的關系,使表中的鍵值在所有表中保持一致。 實現引用完整性的方法主要有:外鍵約束FOREIGN KEY。5.6.1數據完整性分類4. 用戶定義完整性 用戶定義的完整性是應用領域需要遵守的約束條

32、件,其允許用戶定義不屬于其他任何完整性分類的特定業務規則。5.6.2約束的種類及創建 約束是SQL Server提供的自動強制數據完整性的一種方法,通過定義列的取值規則來維護數據的完整性。SQL Serve支持的約束有主鍵約束、唯一性約束、檢查約束、非空約束、默認約束和外鍵約束。5.6.2約束的種類及創建1. 主鍵約束(Primary key) 主鍵約束用來強制數據的實體完整性,它是在表中定義一個主鍵來唯一標識表中的每行記錄。主鍵約束有如下特點:每個表中只能有一個主鍵,主鍵可以是一列,也可以是多列的組合;主鍵值必須唯一并且不能為空,對于多列組合的主鍵,某列值可以重復,但列的組合值必須唯一。 p

33、rimary約束名的命名:建議一般形式為 pk_表名_列名1. 主鍵約束(Primary key) 在窗口方式創建主鍵時,需要在表設計器界面選中主鍵的列,若是多列組合的主鍵,需要將這些列同時選中,右鍵“設置主鍵”或點擊工具欄的鑰匙圖標即可。 通過命令方式創建主鍵,可以在create table中完成,參考創建表,也可用alter table在已存在的表上創建主鍵,語法格式如下:Alter table table_name Add constraint constraint_name Primary key clustered | nonclustered (column,n)5.6.2約束的種

34、類及創建【例5.19】l 在“學生”表中設置“學號”為主鍵的代碼如下:use student goalter table 學生 add constraint pk_學生 primary key (學號)go5.6.2約束的種類及創建2. 唯一性約束(UNIQUE) 唯一約束用來強制數據的實體完整性,它主要用來限制表的非主鍵列中不允許輸入重復值。唯一約束有如下特點:一個表中可以定義多個唯一約束;每個唯一約束可以定義到一列上,也可以定義到多列上;空值可以出現在某列中一次。5.6.2約束的種類及創建2. 唯一性約束(UNIQUE)PRIMARY KEY約束與UNIQUE約束的主要區別如下:(1) 一

35、個數據表只能創建一個PRIMARY KEY約束,但一個表中可根據需要對不同的列創建若干個UNIQUE約束;(2) PRIMARY KEY字段的值不允許為NULL,而UNIQUE字段的值可取NULL;(3) 一般創建PRIMARY KEY約束時,系統會自動產生索引,索引的缺省類型為簇索引。 (4) 若某字段可唯一標識一行,則將其定義為主鍵,如“學號”。如果要確保一個表中的非主鍵列不輸入重復值,應在該列上定義唯一約束,如”身份證號”。5.6.2約束的種類及創建2. 唯一性約束(UNIQUE) 通過命令方式創建唯一約束,可以用create unique index創建,也可用alter table為

36、已存在的表創建唯一約束,語法格式如下:Alter table table_name Add constraint constraint_name Unique clustered | nonclustered (column,n)5.6.2約束的種類及創建【例5.20】l 在“學生”表中為“姓名”字段設置唯一約束的代碼如下:use student goalter table 學生 add constraint uk_學生 unique (姓名)go5.6.2約束的種類及創建3. 檢查約束(CHECK) 檢查約束用來強制數據的域完整性,它使用邏輯表達式來限制表中的列可以接受哪些數據值。CHECK

37、約束通過對一個邏輯表達式的結果進行判斷來對數據進行核查。(1) 使用窗口方式創建約束5.6.2約束的種類及創建3. 檢查約束(CHECK) 圖5.26 check約束設置窗口圖5.27 check約束表達式設置窗口5.6.2約束的種類及創建3. 檢查約束(CHECK)(2) 使用命令方式創建約束使用T-SQL語句為已存在的表創建檢查約束,其語法格式如下:ALTER TABLE table_name /*要創建check約束的表名*/Add constraint constraint_name /*check約束的名稱*/Check (logical_expression) /*check約束的

38、邏輯表達式*/5.6.2約束的種類及創建【例5.21】 為“學生”表的“性別”字段創建check約束,限制性別只能取值男或女。代碼如下:use student goalter table 學生 add constraint ck_性別 check (性別=男 or 性別=女)go注意:可以在一列上設置多個核查約束,也可以將一個核查約束應用于多列。當一列受多個核查約束控制時,所有的約束按照創建的順序,依次進行數據有效性的核查。5.6.2約束的種類及創建4. 非空約束(NOT NULL) 非空約束用來強制數據的域完整性,它用于設定某列值不能為空。如果指定某列不能為空,則在進行插入記錄時,此列必須要

39、插入數據。5.6.2約束的種類及創建5. 默認值約束(Default)默認約束用來強制數據的域完整性,它為表中某列建立一個默認值,當用戶插入記錄時,如果沒有為該列提供輸入值,則系統會自動將默認值賦給該列。默認值可以是常量、內置函數或表達式。使用默認約束可以提高輸入記錄的速度。5.6.2約束的種類及創建5. 默認值約束(Default)通過窗口方式創建默認值約束的方法比較簡單,如要將“學生”表的“性別”設置默認值為男,打開學生表設計器,選中要設置的列,在表設計器的下面【列屬性】中找到【默認值或綁定】,設置默認的值男即可。設置好后若性別字段不錄入值,則默認為男。如圖5.28所示。圖5.28 默認值

40、約束設置窗口5.6.2約束的種類及創建5. 默認值約束(Default) 使用T-SQL語句為已存在的表創建默認約束,語法格式如下: ALTER TABLE table_name ADD CONSTRAINT constraint_name DEFAULT constant_expression FOR column_name其中: table_name:需要建立默認約束的表名。 constraint_name:默認約束名稱。 constant_expression:默認值。5.6.2約束的種類及創建【例5.22】為“學生”表的“性別”字段創建默認值為男的約束,代碼如下:use student

41、 goalter table 學生 add constraint df_性別 default 男 for 性別go5.6.2約束的種類及創建6. 外鍵約束(Foreign Key) 外鍵是指一個表中的一列或列組合,它雖不是該表的主鍵,但卻是另一個表的主鍵。通過外鍵約束可以為相關聯的兩個表建立聯系,實現數據的引用完整性,維護兩表之間數據的一致性關系。5.6.2約束的種類及創建6. 外鍵約束(Foreign Key)外鍵約束要求外鍵列中的每個值都存在于或依賴于對應主鍵表的值。外鍵約束不僅可以與另一張表上的主鍵約束建立聯系,也可以與另一張表上的UNIQUE約束建立聯系。外鍵約束上允許存在為NULL的

42、值,則針對該列的外鍵約束核查將被忽略。外鍵同時也限制了對主鍵所在表的數據進行修改。當主鍵所在的表的數據被另一張表的外鍵所引用時,用戶將無法對主鍵里的數據進行修改或刪除。除非事先刪除或修改引用的數據。當一個新的數據加入到表格中,或對表格中已經存在的外鍵上的數據進行修改時,新的數據必須存在于另一張表的主鍵上。5.6.2約束的種類及創建6. 外鍵約束(Foreign Key)如在“student”數據庫中,其表結構如圖5.29所示:圖5.29 student數據庫表結構圖“系部”表中 “代碼”字段是主鍵。“專業”表的“系部代碼”字段同“系部”的“代碼”相對應,不是主鍵。“專業”表的“系部代碼”是外鍵

43、。“專業”的“系部代碼”和“系部”的“代碼”字段是對應和依賴關系,外鍵體現了表和表之間的關系。5.6.2約束的種類及創建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創建外鍵圖5.30 創建外鍵關系菜單窗口 圖5.31 添加外鍵關系窗口圖5.32 關系的主鍵、外鍵設置窗口 圖5.33 外鍵關系設置完成窗口5.6.2約束的種類及創建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創建外鍵注意: 由于外鍵描述的是表和表之間的參照、依賴、對應關系,因此在“學生”表“班級代碼”創建為外鍵后,在“班級”表的表設計器中同樣可以看到該外鍵約束。 外鍵默認的命令方式是“FK_從表(外

44、鍵表)_主表(主鍵表)”的形式,“從表”是該外鍵字段所在的表,主表是對應主鍵所在的表。如“FK_學生_班級”,表示在學生表中的“班級代碼”字段上建立外鍵,該字段依賴于或參照“班級”表中的“代碼”字段。 通過窗口方式創建外鍵約束更簡單的方法是使用數據庫關系圖。數據庫關系圖可以從整體的角度查看和設置表及表的關系。操作方法如下。打開“student”數據庫,右擊【數據庫關系圖】節點,在彈出窗口中選擇【新建數據庫關系圖】,如圖5.34所示。5.6.2約束的種類及創建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創建外鍵5.6.2約束的種類及創建6. 外鍵約束(Foreign Key)(1

45、) 使用窗口方式創建外鍵圖5.34 新建數據庫關系圖菜單窗口5.6.2約束的種類及創建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創建外鍵打開【添加表】窗口,如圖5.35所示:圖5.35 添加表窗口5.6.2約束的種類及創建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創建外鍵依次選擇要添加的表,點擊【添加】,如圖5.36所示:圖5.36 建立數據庫關系圖窗口5.6.2約束的種類及創建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創建外鍵可以看到“班級”和“學生”之間有一條線連接起來,這就是前面創建的外鍵關系。外鍵一端用“”符號,主鍵一端用鑰匙符號。

46、接下來創建“專業”表的“系部代碼”為外鍵,同“系部”表的“代碼”對應。具體做法如下:選中“專業”表的“系部代碼”字段,而后用鼠標拖動,鼠標箭頭右下方會出現“+”,同時還會隨著鼠標的移動拖出一條虛線,如圖5.37所示。圖5.37 拖動設置主外鍵關聯窗口5.6.2約束的種類及創建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創建外鍵拖動到“系部”表的“代碼”字段上放開鼠標,彈出兩個窗口,如圖5.38。圖5.38 主外鍵關聯設置窗口 可以看到【表和列】窗口中的表和鍵,核對無誤后點擊【確定】返回【外鍵關系】窗口,點擊【確定】返回【數據庫關系圖】界面,可以看到在“專業”和“系部”之間出現了

47、一條外鍵關系連接線。同樣的方法設置“班級”表的“專業代碼”同“專業”表的“代碼”是外鍵關系。如圖5.39所示。5.6.2約束的種類及創建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創建外鍵 其體現的含義是應先有系部,再有該系部的專業,進而該專業的班級,最后是該班級的學生。 最后單擊【保存】,在出現的窗口中輸入關系圖的名稱,【確定】即可。圖5.39 主外鍵設置關聯效果顯示窗口5.6.2約束的種類及創建6. 外鍵約束(Foreign Key)(2) 使用命令方式創建外鍵可以在create table中完成創建外鍵,如例5.23。5.6.2約束的種類及創建【例5.23】在創建“學生”

48、表時就設置“班級代碼”字段為外鍵約束的代碼如下:use student -使用student數據庫,表示要在student數據庫中創建表gocreate table 學生 -創建學生表( 學號 char(12) CONSTRAINT PK_學生 PRIMARY KEY, -設置學號為主鍵 姓名 varchar(8) not null, 性別 char(2) not null, 出生日期 datetime null, 班級代碼 char(9) not null constraint fk_學生_班級references 班級(代碼) -設置班級代碼為外鍵 )go也可用alter table在已存在的表上創建外鍵,語法格式如下:Alter table table_nameAdd constraint constraint_nameForeign key (column_name,)References ref_table (ref_column_name,) /*主鍵表及列*/5.6.2約束的種類及創建【例5.23】在

溫馨提示

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

評論

0/150

提交評論