第九章-視圖索引和數(shù)據(jù)完整性_第1頁
第九章-視圖索引和數(shù)據(jù)完整性_第2頁
第九章-視圖索引和數(shù)據(jù)完整性_第3頁
第九章-視圖索引和數(shù)據(jù)完整性_第4頁
第九章-視圖索引和數(shù)據(jù)完整性_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

AnIntroductiontoDatabaseSystems第九章視圖、索引和數(shù)據(jù)完整性9.1視圖9.2索引9.3數(shù)據(jù)完整性AnIntroductiontoDatabaseSystems9.1視圖視圖倉(cāng)庫號(hào)城市面積倉(cāng)庫號(hào)職工號(hào)工資倉(cāng)庫號(hào)城市職工號(hào)工資倉(cāng)庫號(hào)面積基本表視圖視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義.AnIntroductiontoDatabaseSystems1.視圖的概念視圖是一個(gè)邏輯表,它允許操作者從其它表或視圖存取數(shù)據(jù),視圖本身不包含數(shù)據(jù)。視圖的數(shù)據(jù)來源可以由以下隨意一項(xiàng)組成:一個(gè)基表的隨意子集。兩個(gè)或者兩個(gè)以上基表的合集。兩個(gè)或者兩個(gè)以上基表的交集。對(duì)一個(gè)或者多個(gè)基表運(yùn)算的結(jié)果集合。另一個(gè)視圖的子集。AnIntroductiontoDatabaseSystems視圖的優(yōu)點(diǎn)和作用將數(shù)據(jù)集中顯示簡(jiǎn)化數(shù)據(jù)操作自定義數(shù)據(jù)重新組織數(shù)據(jù)以便導(dǎo)入導(dǎo)出數(shù)據(jù)組合分區(qū)數(shù)據(jù)AnIntroductiontoDatabaseSystems視圖的創(chuàng)建運(yùn)用企業(yè)管理器創(chuàng)建視圖運(yùn)用向?qū)?chuàng)建視圖運(yùn)用SQL語句創(chuàng)建視圖其吩咐格式如下:CREATEVIEW<視圖名>AS<SELECT-查詢塊>[WITHCHECKOPTION]WITHCHECKOPTION:通過視圖進(jìn)行的修改,必需也能通過該視圖看到修改后的結(jié)果。比如insert,那么加的這條記錄在刷新視圖后必需可以看到;假如修改,修改完的結(jié)果也必需能通過該視圖看到;假如刪除,只能刪除視圖里有顯示的記錄AnIntroductiontoDatabaseSystems定義視圖的例子:CREATEVIEWv_empASSELECT職工號(hào),工資,城市FROM職工,倉(cāng)庫WHERE職工.倉(cāng)庫號(hào)=倉(cāng)庫.倉(cāng)庫號(hào);對(duì)用戶就好象有一個(gè)表:AnIntroductiontoDatabaseSystems關(guān)于WithcheckoptioncreateviewIS_student

as

selectsno,sname,sage

fromstudent

wheresdept='IS'

withcheckoption;

加上了withcheckoption;后,不能執(zhí)行插入操作:

insertintois_student(sno,sname,sage)

values('95100','李娜',12)

AnIntroductiontoDatabaseSystems運(yùn)用視圖運(yùn)用視圖進(jìn)行數(shù)據(jù)檢索CREATEVIEWv_sal(職工號(hào),月工資,年工資)ASSELECT職工號(hào),工資,工資*12FROM職工查詢視圖v_sal:SELECT*FROMv_sal結(jié)果:E1122014640E3121014520E4125015000E6123014760E7125015000AnIntroductiontoDatabaseSystems通過視圖修改數(shù)據(jù) 當(dāng)更新視圖中的數(shù)據(jù)時(shí),事實(shí)上是對(duì)表的內(nèi)部數(shù)據(jù)進(jìn)行更新。事實(shí)上,當(dāng)從視圖中插入或者刪除時(shí),狀況也是這樣。AnIntroductiontoDatabaseSystems但并不是每個(gè)視圖都是可更新的,應(yīng)滿足以下條件:1)沒有運(yùn)用連接函數(shù),集合運(yùn)算函數(shù)和組函數(shù)。

2)SELECT語句中沒有GROUPBY等子句。

3)SELECT語句中不包含從基表列通過計(jì)算所得的列。

留意:只有當(dāng)視圖依靠的基本表為單個(gè)時(shí),才可進(jìn)行插入和刪除數(shù)據(jù)的操作,修改操作一次修改數(shù)據(jù)操作只能變動(dòng)一個(gè)基本表的數(shù)據(jù).AnIntroductiontoDatabaseSystems例如Createtabletable4(col1int,col2varchar(30))Createviewview1asselectcol2,col1fromtable4GoInsertintoview1values(‘第1行’,1)goInsertintoview1values(‘第2行’,2)Select*fromtable4go結(jié)果為:col1col2-------------------

第1行

第2行AnIntroductiontoDatabaseSystems視圖的修改運(yùn)用企業(yè)管理器運(yùn)用ALTERVIEW語句重命名視圖1、企業(yè)管理器2、存儲(chǔ)過程sp_rename例如:sp_rename‘view1’,’view2’view1為原來的名稱view2為新名稱ALTERVIEW<視圖名>AS<SELECT-查詢塊>[WITHCHECKOPTION]AnIntroductiontoDatabaseSystems視圖信息的查詢運(yùn)用企業(yè)管理器運(yùn)用sp_helptext存儲(chǔ)過程 例如:useschoolgoexecsp_helptextst2_degree結(jié)果為:text-----------------------------------------------createviewst2_degreeas………………AnIntroductiontoDatabaseSystems視圖的刪除吩咐格式是:DROPVIEW<視圖名>運(yùn)用企業(yè)管理器運(yùn)用T-SQL

AnIntroductiontoDatabaseSystems實(shí)訓(xùn)建立視圖view1,查詢?nèi)抗?yīng)商的供應(yīng)商號(hào),名稱和所在的城市,并按供應(yīng)商號(hào)依次排序。建立視圖view2,查詢?nèi)柯毠さ钠骄べY。建立視圖view3,查詢?nèi)吭诒本┑穆毠?duì)應(yīng)的訂購(gòu)單號(hào)和訂購(gòu)日期信息。查看視圖。修改視圖的屬性。視圖的刪除。視圖的重命名及顯示視圖信息。AnIntroductiontoDatabaseSystems9.2索引1.索引的概念

數(shù)據(jù)庫中的索引與書籍中的索引類似。在一本書中,運(yùn)用索引可以快速查找所需信息,無須閱讀整本書。在數(shù)據(jù)庫中,索引使數(shù)據(jù)庫程序無須對(duì)整個(gè)表進(jìn)行掃描,就可以在其中找到所需數(shù)據(jù)。書中的索引是一個(gè)詞語列表,其中注明白包含各個(gè)詞的頁碼。而數(shù)據(jù)庫中的索引是指某個(gè)表中一列或者若干列值的集合和相應(yīng)的指向表中物理標(biāo)識(shí)這些值的數(shù)據(jù)頁的邏輯指針清單。AnIntroductiontoDatabaseSystems索引的作用(1)通過創(chuàng)建唯一索引,可以保證數(shù)據(jù)記錄的唯一性。(2)可以大大加快數(shù)據(jù)檢索速度。(3)可以加速表與表之間的連接,這一點(diǎn)在實(shí)現(xiàn)數(shù)據(jù)的參照完整性方面有特殊的意義。(4)在運(yùn)用ORDERBY和GROUPBY子句中進(jìn)行檢索數(shù)據(jù)時(shí),可以顯著削減查詢中分組和排序的時(shí)間。(5)運(yùn)用索引可以在檢索數(shù)據(jù)的過程中運(yùn)用優(yōu)化隱藏器,提高系統(tǒng)性能。AnIntroductiontoDatabaseSystems索引的分類(1)聚集索引聚集索引對(duì)表和視圖中的數(shù)據(jù)進(jìn)行物理排序,然后再重新存儲(chǔ)到磁盤上,這種索引對(duì)查詢特別有效。表和視圖中只能有一個(gè)聚集索引。當(dāng)建立主鍵約束時(shí),假如表中沒有聚集索引,SQLServer會(huì)用主鍵列作為聚集索引鍵。用戶可以在表的任何列或列的組合上建立索引,但一般是為定義成主鍵約束的列建立聚集索引。(2)非聚集索引非聚集索引不用將表和視圖中的數(shù)據(jù)進(jìn)行物理排序。一般在那些常常被用來查詢的表的列上建立索引以獲得最佳查詢性能。但索引也須要占用空間,表越大,建立的包含該表的索引也越大。當(dāng)一個(gè)含有索引的表被改動(dòng)時(shí),改動(dòng)數(shù)據(jù)的速度會(huì)減慢,所以不要在表中建立太多且很少用到的索引。AnIntroductiontoDatabaseSystems創(chuàng)建索引通過企業(yè)管理器創(chuàng)建索引通過向?qū)?chuàng)建索引通過SQL語句創(chuàng)建索引其語法格式如下:CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEX索引名ON{表名|視圖名}(列名[ASC|DESC][,...n])[WITH[PAD_INDEX]

[[,]FILLFACTOR=fillfactor][[,]IGNORE_DUP_KEY]

[[,]DROP_EXISTING][[,]STATISTICS_NORECOMPUTE][[,]SORT_IN_TEMPDB]][ONfilegroup

]AnIntroductiontoDatabaseSystemsl

表名用于指定創(chuàng)建索引的表的名稱。l

視圖名用于指定創(chuàng)建索引的視圖的名稱。l

ASC|DESC用于指定具體某個(gè)索引列的升序或降序排序方向。l

CLUSTERED用于指定創(chuàng)建的索引為聚集索引。l

NONCLUSTERED用于指定創(chuàng)建的索引為非聚集索引。l

索引名用于指定所創(chuàng)建的索引的名稱。l

列名用于指定被索引的列。PAD_INDEX用于指定索引中間級(jí)中每個(gè)頁(節(jié)點(diǎn))上保持開放的空間。

l

FILLFACTOR=fillfactor用于指定在創(chuàng)建索引時(shí),每個(gè)索引頁的數(shù)據(jù)占索引頁大小的百分比,fillfactor的值為1到100。l

IGNORE_DUP_KEY用于限制當(dāng)往包含于一個(gè)唯一聚集索引中的列中插入重復(fù)數(shù)據(jù)時(shí)SQLServer所作的反應(yīng)。lDROP_EXISTING用于指定應(yīng)刪除并重新創(chuàng)建已命名的從前存在的聚集索引或者非聚集索引。lSTATISTICS_NORECOMPUTE用于指定過期的索引統(tǒng)計(jì)不會(huì)自動(dòng)重新計(jì)算。SORT_IN_TEMPDB用于指定創(chuàng)建索引時(shí)的中間排序結(jié)果將存儲(chǔ)在tempdb數(shù)據(jù)庫中ONfilegroup用于指定存放索引的文件組。l

UNIQUE用于指定為表或視圖創(chuàng)建唯一索引,即不允許存在索引值相同的兩行。

其中:AnIntroductiontoDatabaseSystems【例】運(yùn)用CREATEINDEX語句在XSCJ數(shù)據(jù)庫的“成果表”上創(chuàng)建名為“IX_學(xué)號(hào)課號(hào)”的聚集、惟一、復(fù)合索引,該索引基于“學(xué)號(hào)”和“課程編號(hào)”列創(chuàng)建。在查詢分析器中運(yùn)行如下吩咐:USEXSCJGOCREATEUNIQUECLUSTEREDINDEXIX_學(xué)號(hào)課號(hào)ON成果表(學(xué)號(hào),課程編號(hào))GOAnIntroductiontoDatabaseSystems查看、修改索引1.運(yùn)用企業(yè)管理器查看、修改索引2.運(yùn)用系統(tǒng)存儲(chǔ)過程查看、更名索引系統(tǒng)存儲(chǔ)過程sp_helpindex可以返回表的全部索引信息,其語法形式如下:sp_helpindex‘表名稱’另外,系統(tǒng)存儲(chǔ)過程sp_rename可以用來更改索引的名稱,其語法形式如下:sp_rename'表名.舊索引名','新索引名'AnIntroductiontoDatabaseSystems【例6-17】運(yùn)用系統(tǒng)存儲(chǔ)過程sp_helpindex查看XSCJ數(shù)據(jù)庫中“成果表”的索引信息。在查詢分析器中運(yùn)行如下吩咐:USEXSCJGOsp_helpindex'成果表'GO

AnIntroductiontoDatabaseSystems【例】運(yùn)用系統(tǒng)存儲(chǔ)過程將索引“PK_成果表”更名為“IX_成果表”。在查詢分析器中運(yùn)行如下吩咐:USEXSCJGOEXECsp_rename'成果表.PK_成果表','IX_成果表'GO

AnIntroductiontoDatabaseSystems1.運(yùn)用企業(yè)管理器刪除索引要?jiǎng)h除索引,可以在企業(yè)管理器中,從【管理索引】對(duì)話框中或者【表的屬性】對(duì)話框中,選擇要?jiǎng)h除的索引,單擊【刪除】按鈕,即可刪除索引。2.運(yùn)用DROPINDEX吩咐刪除索引當(dāng)不再須要某個(gè)索引時(shí),可以將其刪除,DROPINDEX吩咐可以刪除一個(gè)或者多個(gè)當(dāng)前數(shù)據(jù)庫中的索引,其語法格式如下:DROPINDEXtable.index|view.index[,...n]其中:table|view用于指定索引列所在的表或索引視圖;index用于指定要?jiǎng)h除的索引名稱。留意,DROPINDEX吩咐不能刪除由CREATETABLE或者ALTERTABLE吩咐創(chuàng)建的主鍵或者唯一性約束索引,也不能刪除系統(tǒng)表中的索引。刪除索引AnIntroductiontoDatabaseSystems【例】刪除“學(xué)生基本信息表”中名為“IX_學(xué)生姓名”的索引。在查詢分析器中運(yùn)行如下吩咐:USEXSCJGODROPINDEX學(xué)生基本信息表.IX_學(xué)生姓名GO

AnIntroductiontoDatabaseSystems1、創(chuàng)建各表索引:(1)基于訂購(gòu)單表的訂購(gòu)單號(hào)列創(chuàng)建名為IX_訂購(gòu)單號(hào)的聚集、唯一索引;(2)基于職工表的倉(cāng)庫號(hào)、職工號(hào)列創(chuàng)建名為IX_職工的非聚集、唯一索引;(3)基于供應(yīng)商表的供應(yīng)商號(hào)列創(chuàng)建名為IX_供應(yīng)商的非聚集索引,并刪除;2、顯示索引信息。3、對(duì)索引進(jìn)行重命名。

實(shí)訓(xùn)AnIntroductiontoDatabaseSystems9.3數(shù)據(jù)完整性數(shù)據(jù)完整性的定義

數(shù)據(jù)完整性是指存放在數(shù)據(jù)庫中的數(shù)據(jù)要滿足的業(yè)務(wù)規(guī)則,是確保數(shù)據(jù)庫的數(shù)據(jù)一樣、正確以及符合企業(yè)規(guī)則的一種思想。如年齡0~150,性別{男,女},成果表中學(xué)號(hào)必需在學(xué)生基本信息表中存在等。這樣可以保證有效的有意義的數(shù)據(jù)存放到數(shù)據(jù)庫中。完整性類型

數(shù)據(jù)完整性有四種類型:實(shí)體完整性、域完整性、引用完整性、用戶自定義完整性。AnIntroductiontoDatabaseSystems1.實(shí)體完整性

實(shí)體完整性也可稱為表的完整性,是指表中必需有一個(gè)主關(guān)鍵字,用來惟一地標(biāo)識(shí)表中的每一行,且不允許為空值(NULL)。實(shí)體完整性強(qiáng)制表的標(biāo)識(shí)符列或主鍵的完整性(通過索引、UNIQUE約束、PRIMARYKEY約束或IDENTITY屬性實(shí)現(xiàn))。

2.域完整性

域完整性也可稱為列的完整性,是指給定列的輸入有效性,用于限制向表中輸入的值的范圍。強(qiáng)制域有效性的方法有:限制類型(通過類型)、格式(通過CHECK約束和規(guī)則)或可能值的范圍(通過FOREIGNKEY約束、CHECK約束、DEFAULT定義、NOTNULL定義和規(guī)則)。AnIntroductiontoDatabaseSystems引用完整性

引用完整性也稱參照完整性,在輸入或刪除記錄時(shí),引用完整性保持表之間已定義的關(guān)系。在SQLServer2000中,引用完整性基于外鍵與主鍵之間或外鍵與唯一鍵之間的關(guān)系(通過FOREIGNKEY和CHECK約束)。引用完整性確保鍵值在全部表中一樣。這樣的一樣性要求不能引用不存在的值,假如鍵值更改了,那么在整個(gè)數(shù)據(jù)庫中,對(duì)該鍵值的全部引用要進(jìn)行一樣的更改。AnIntroductiontoDatabaseSystems

強(qiáng)制引用完整性時(shí),SQLServer禁止用戶進(jìn)行下列操作:l當(dāng)主表沒有關(guān)聯(lián)的記錄時(shí),將記錄添加到相關(guān)表中。l更改主表中的值并導(dǎo)致相關(guān)表中的記錄孤立。l從主表中刪除記錄,但仍存在與該記錄匹配的相關(guān)記錄。4.用戶自定義完整性

用戶自定義完整性主要體現(xiàn)實(shí)際運(yùn)用的業(yè)務(wù)規(guī)則中。例如,在“班級(jí)表”中,規(guī)定04屆學(xué)生班級(jí)的“班級(jí)名稱”前兩個(gè)字符必需是04等。用戶定義的完整性可以通過前面3種完整性的實(shí)施得到維護(hù)。AnIntroductiontoDatabaseSystems運(yùn)用約束實(shí)現(xiàn)數(shù)據(jù)完整性PRIMARYKEY約束表中常常有一個(gè)列或列的組合,其值能唯一地標(biāo)識(shí)表中的每一行。這樣的一列或多列稱為表的主鍵(PK),通過它可強(qiáng)制表的實(shí)體完整性。當(dāng)創(chuàng)建或更改表時(shí)可通過定義PRIMARYKEY約束來創(chuàng)建主鍵。留意,每個(gè)表有且只有一個(gè)PRIMARYKEY約束,PRIMARYKEY約束中的列不能接受空值,系統(tǒng)在定義PK的列上自動(dòng)建立唯一索引,主鍵可以是多列的組合。假如PRIMARYKEY約束定義在不止一列上,則一列中的值可以重復(fù),但PRIMARYKEY約束定義的全部列的組合的值必需唯一。

只有在進(jìn)行聯(lián)接或執(zhí)行INSERT時(shí)才檢查主鍵約束。AnIntroductiontoDatabaseSystemsUNIQUE約束運(yùn)用UNIQUE約束可以確保表中在非主鍵列中不輸入重復(fù)值。盡管UNIQUE約束和PRIMARYKEY約束都強(qiáng)制惟一性,但在強(qiáng)制下面的唯一性時(shí)應(yīng)運(yùn)用UNIQUE約束而不是PRIMARYKEY約束:l非主鍵的一列或組合。l一個(gè)表可以定義多個(gè)UNIQUE約束,而只能定義一個(gè)PRIMARYKEY約束。l允許空值的列。l允許空值的列上可以定義UNIQUE約束,但不能定義PRIMARYKEY約束。FOREIGNKEY約束也可以引用UNIQUE約束。AnIntroductiontoDatabaseSystems圖設(shè)計(jì)表圖【管理約束】對(duì)話框【例】為數(shù)據(jù)庫XSCJ中“系部表”的“系部名稱”列上創(chuàng)建UNIQUE約束。

方法一、在企業(yè)管理器中創(chuàng)建UNIQUE約束??梢园匆韵虏襟E操作:①綻開服務(wù)器,單擊【數(shù)據(jù)庫】,在綻開數(shù)據(jù)庫XSCJ后,單擊【表】。

②右擊【系部表】,在彈出的快捷菜單中單擊【設(shè)計(jì)表】,打開如圖9-1所示的設(shè)計(jì)表對(duì)話框。

③單擊【管理約束】按鈕,彈出如圖所示的【管理約束屬性】對(duì)話框,選擇【索引/鍵】標(biāo)簽。AnIntroductiontoDatabaseSystems④單擊【新建】按鈕,在列名下選擇【系部名稱】,再在【創(chuàng)建UNIQUE(U)】復(fù)選框上打√,單擊【約束】。

⑤單擊【關(guān)閉】按鈕,在設(shè)計(jì)窗口單擊【保存】按鈕后,關(guān)閉設(shè)計(jì)表對(duì)話框即可。AnIntroductiontoDatabaseSystems方法二、在SQLServer2000中,也可用ALTERTABLE吩咐來創(chuàng)建一個(gè)UNIQUE約束。其語法為:

ALTERTABLEtable_name

ADD[CONSTAINTConstraint_name]

UNIQUE{(Column[,…n])

在查詢分析器中通過執(zhí)行以下語句可以實(shí)現(xiàn)【例7-2】的任務(wù)。

USEXSCJ

GO

ALTERTABLE系部表

ADDCONSTRAINTUNI_stu_addr

UNIQUE(系部名稱)

GO

AnIntroductiontoDatabaseSystemsCHECK約束

CHECK約束通過限制輸入到列中的值來強(qiáng)制域的完整性。這與FOREIGNKEY約束限制列中數(shù)值相像。區(qū)分在于它們?nèi)绾瓮茢嗄男┲涤行В篎OREIGNKEY約束從另一個(gè)表中獲得有效數(shù)值列表,CHECK約束從邏輯表達(dá)式推斷而非基于其它表的數(shù)據(jù)。

可以通過任何基于邏輯運(yùn)算符返回結(jié)果TRUE或FALSE的邏輯(布爾)表達(dá)式來創(chuàng)建CHECK約束。對(duì)單獨(dú)一列可運(yùn)用多個(gè)CHECK約束。按約束創(chuàng)建的依次對(duì)其取值。

只有當(dāng)INSERT、UPDATE時(shí)才檢查CHECK約束。AnIntroductiontoDatabaseSystems圖設(shè)計(jì)“學(xué)生基本信息表”圖管理約束界面【例】為數(shù)據(jù)庫XSCJ中“學(xué)生基本信息表”的“性別”列上創(chuàng)建CHECK約束。

方法一、在企業(yè)管理器中創(chuàng)建CHECK約束??梢园匆韵虏襟E操作:

①綻開服務(wù)器,單擊【數(shù)據(jù)庫】,在綻開數(shù)據(jù)庫XSCJ后,單擊【表】。

②右擊【學(xué)生基本信息表】,在彈出的快捷菜單中單擊【設(shè)計(jì)表】。③單擊【管理約束】按鈕,彈出【管理約束屬性】對(duì)話框,單擊【CHECK約束】標(biāo)簽。AnIntroductiontoDatabaseSystems④單擊【新建】后,在【約束表達(dá)式】欄中添入“性別=’男’OR性別=’女’”即可。

⑤單擊【關(guān)閉】按鈕,在設(shè)計(jì)窗口單擊【保存】按鈕后,關(guān)閉設(shè)計(jì)表窗口。AnIntroductiontoDatabaseSystems方法二、在SQLServer2000中,也可用ALTERTABLE吩咐來創(chuàng)建一個(gè)CHECK約束。其語法為:

ALTERTABLEtable_name

ADD[CONSTAINTConstraint_name]

CHECKlogical_expression

在查詢分析器中通過執(zhí)行以下語句可以實(shí)現(xiàn)【例7-3】的任務(wù)。

USEXSCJ

GO

ALTERTABLE學(xué)生基本信息表

ADDCONSTRAINTUNI_stu_addr

CHECK(性別='男'or性別='女')

GO

AnIntroductiontoDatabaseSystemsFOREIGNKEY約束

外鍵(FOREIGNKEY簡(jiǎn)寫為FK)是用于實(shí)現(xiàn)兩個(gè)表之間數(shù)據(jù)聯(lián)系的一個(gè)列或多個(gè)列的組合。通過將保存表中主鍵值的一列或多列添加到另一個(gè)表中,可創(chuàng)建兩個(gè)表之間的數(shù)據(jù)聯(lián)系,這個(gè)列就成為其次個(gè)表的外鍵。當(dāng)創(chuàng)建或更改表時(shí)可通過定義FOREIGNKEY約束來創(chuàng)建外鍵。

建立FOREIGNKEY約束后系統(tǒng)自動(dòng)維護(hù)。

1、修改父表主鍵時(shí)檢查。

2、刪除父表記錄時(shí)檢查。

3、在子表中插入數(shù)據(jù)時(shí)檢查。

AnIntroductiontoDatabaseSystems【例】數(shù)據(jù)庫XSCJ中以“系部表”為父表,以“班級(jí)表”為子表,通過“系部編號(hào)”在“班級(jí)表”上建立FORIGNKEY約束。

方法一、在企業(yè)管理器中創(chuàng)建外鍵約束。可以按以下步驟操作:

①綻開服務(wù)器,單擊【數(shù)據(jù)庫】,在綻開數(shù)據(jù)庫XSCJ后,單擊【表】。

②右擊【班級(jí)表】,在彈出的快捷菜單中單擊【設(shè)計(jì)表】。如圖所示。

③單擊【管理關(guān)系】按鈕,彈出【管理關(guān)系屬性】對(duì)話框。如圖所示。AnIntroductiontoDatabaseSystemsAnIntroductiontoDatabaseSystems④單擊【新建】按鈕,在【主鍵表(P)】下方選擇【系部表】后,再選擇【系部表】的主鍵【系部編號(hào)】,然后,在【外鍵表(O)】下方選擇【班級(jí)表】后,再選擇【班級(jí)表】中的列【系部編號(hào)】。如圖所示。

⑤單擊【關(guān)閉】按鈕,在設(shè)計(jì)窗口單擊【保存】按鈕,即可關(guān)閉設(shè)計(jì)表窗口。留意:在做上述操作前,要先為“系部表”創(chuàng)建主鍵約束,即“系部編號(hào)”是系部表的主鍵。AnIntroductiontoDatabaseSystems實(shí)訓(xùn)1.為供應(yīng)商表的供應(yīng)商名稱建立唯一性(UNIQUE)約束.2.為職工表的職工工資建立檢查(CHECK)約束,工資范圍在1000~3000之間.3.為倉(cāng)庫表為父表,職工表為子表,在職工表上通過倉(cāng)庫號(hào)創(chuàng)建外鍵約束AnIntroductiontoDatabaseSystems運(yùn)用規(guī)則

規(guī)則也是實(shí)現(xiàn)數(shù)據(jù)完整性的方法之一。規(guī)則是獨(dú)立于表的數(shù)據(jù)庫對(duì)象,定義后需綁定到列或用戶定義的數(shù)據(jù)類型。它類似于CHECK約束,但規(guī)則不能進(jìn)行同表不同列之間的比較。它只能用于檢查單列。運(yùn)用規(guī)則須要先創(chuàng)建規(guī)則,然后再將其綁定到列上或用戶自定義的數(shù)據(jù)類型上。刪除規(guī)則前,也必需先刪除該規(guī)則的綁定。AnIntroductiontoDatabaseSystems在SQLServer2000中,可以運(yùn)用CREATERULE語句和企業(yè)管理器2種方法創(chuàng)建一個(gè)新的規(guī)則。

1.運(yùn)用CREATERULE語句創(chuàng)建規(guī)則

其語法為:

CREATERULErule_name

Ascondition_expression其中:rule_name:新規(guī)則的名稱。規(guī)則名稱必需符合標(biāo)識(shí)符規(guī)則。可以選擇是否指定規(guī)則全部者的名稱。創(chuàng)建規(guī)則AnIntroductiontoDatabaseSystemscondition_expression:定義規(guī)則的條件表達(dá)式。條件表達(dá)式可以是WHERE子句中任何有效的表達(dá)式,并且可以包含諸如算術(shù)運(yùn)算符、關(guān)系運(yùn)算符以及諸如IN、LIKE、BETWEEN等關(guān)鍵字。條件表達(dá)式中包含一個(gè)局部變量,該變量必需以符號(hào)@打頭?!纠吭跀?shù)據(jù)庫XSCJ上創(chuàng)建一個(gè)使性別輸入只能是“男”或“女”的規(guī)則。

在查詢分析器中通過執(zhí)行以下語句即可。

CREATERULErule_sexAS@sexin('男','女')

GO

AnIntroductiontoDatabaseSystems2.運(yùn)用企業(yè)管理器創(chuàng)建規(guī)則。操作步驟為:

①綻開服務(wù)器,單擊【數(shù)據(jù)庫】,右擊XSCJ,在彈出的快捷菜單中選擇【新建】吩咐,在彈出的級(jí)聯(lián)菜單中選擇【規(guī)則】,出現(xiàn)創(chuàng)建規(guī)則對(duì)話框如圖所示。AnIntroductiontoDatabaseSystems圖創(chuàng)建規(guī)則界面圖運(yùn)用企業(yè)管理器創(chuàng)建規(guī)則AnIntroductiontoDatabaseSystems②在【名稱】框內(nèi)輸入規(guī)則的名稱,在【文本】框內(nèi)輸入規(guī)則的表達(dá)式。

③單擊【確定】按鈕即可。

綁定規(guī)則

1.運(yùn)用企業(yè)管理器綁定規(guī)則。

【例】將rule_sex規(guī)則綁定到“學(xué)生基本信息表”的“性別”列上。

運(yùn)用企業(yè)管理器綁定規(guī)則,可以按以下步驟操作:

①在創(chuàng)建規(guī)則對(duì)話框(如圖所示)中,單擊【綁定列】,出現(xiàn)【將規(guī)則綁定到列】對(duì)話框。AnIntroductiontoDatabaseSystems②在綁定列對(duì)話框上的【表】欄中選擇【學(xué)生基本信息表】,在未綁定的列中選擇【性別】后,再單擊【添加】按鈕,單擊【確定】即可完成規(guī)則的綁定。

2.用sp_bindrule存儲(chǔ)過程綁定規(guī)則。其語法為:

sp_bindrule[@rulename=]'rule',

[@objname=]'object_name'其中:[@rulename=]'rule':由sp_bindrule過程創(chuàng)建的規(guī)則名稱。rule的數(shù)據(jù)類型為nvarchar(776),無默認(rèn)值。[@objname=]'object_name':綁定了規(guī)則的表和列或用戶定義的數(shù)據(jù)類型。object_name的數(shù)據(jù)類型為nvarchar(517),無默認(rèn)值。假如object_name沒有實(shí)行table.column格式,則認(rèn)為它屬于用戶定義數(shù)據(jù)類型。默認(rèn)狀況下,用戶定義的數(shù)據(jù)類型的現(xiàn)有列繼承rule,除非干脆在列上綁定了規(guī)則。AnIntroductiontoDatabaseSystems在查詢分析器中,執(zhí)行如下吩咐可實(shí)現(xiàn)將rule_sex規(guī)則綁定到【學(xué)生基本信息表】的【性別】列上:

USEXSCJ

GO

sp_bindrulerule_sex,'學(xué)生基本信息表.性別'

GO

運(yùn)行結(jié)果如圖所示,已將rule_sex規(guī)則綁定到“學(xué)生基本信息表”的“性別”列上。AnIntroductiontoDatabaseSystems圖運(yùn)用sp_bindrule存儲(chǔ)過程綁定規(guī)則AnIntroductiontoDatabaseSystems解除綁定

1.運(yùn)用企業(yè)管理器解除綁定規(guī)則

在綁定列對(duì)話框的【綁定列】欄中,選擇要解除綁定的列,單擊【刪除】按鈕,單擊【確定】即可完成解除綁定。

2.運(yùn)用sp_unbindrule存儲(chǔ)過程解除綁定規(guī)則

其語法為:

sp_unbindrule[@objname=]'object_name'其中:l[@objname=]'object_name':是要解除規(guī)則綁定的表和列或者用戶定義數(shù)據(jù)類型的名稱。object_name的數(shù)據(jù)類型為nvarchar(776),無默認(rèn)值。假如參數(shù)不是table.column的形式,則假定object_name為用戶定義數(shù)據(jù)類型。當(dāng)為用戶定義數(shù)據(jù)類型解除規(guī)則綁定時(shí),全部屬于該數(shù)據(jù)類型并具有相同規(guī)則的列也同時(shí)解除規(guī)則綁定。對(duì)屬于該數(shù)據(jù)類型的列,假如其規(guī)則干脆綁定到列上,則該列不受影響。AnIntroductiontoDatabaseSystems【例】將rule_sex規(guī)則在【學(xué)生基本信息表】的【性別】列上的綁定解除。

在查詢分析器中執(zhí)行如下吩咐:

USEXSCJ

GO

sp_unbindrule'學(xué)生基本信息表.性別'

GO

運(yùn)行結(jié)果如圖所示,已將綁定的規(guī)則解除。AnIntroductiontoDatabaseSystemsAnIntroductiontoDatabaseSystems刪除規(guī)則

1.運(yùn)用企業(yè)管理器刪除規(guī)則。可按以下步驟操作:

①綻開服務(wù)器,單擊【數(shù)據(jù)庫】,選擇指定數(shù)據(jù)庫XSCJ,單擊【規(guī)則】,在要?jiǎng)h除的規(guī)則上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇【刪除】,出現(xiàn)刪除規(guī)則對(duì)話框,如圖7-21所示。

②單擊【全部除去】按鈕即可。AnIntroductiontoDatabaseSystems2.運(yùn)用DROPRULE吩咐刪除規(guī)則其語法為:DROPRULE{rule}[,...n]其中:rule:要?jiǎng)h除的規(guī)則名稱。n:表示可以指定多個(gè)規(guī)則。例如:在查詢分析器中執(zhí)行吩咐DROPRULErule_sex即可將規(guī)則rule_sex刪除。運(yùn)用默認(rèn)值

默認(rèn)值對(duì)象是為特定數(shù)據(jù)庫定義的。運(yùn)用默認(rèn)值可以實(shí)現(xiàn)當(dāng)用戶向數(shù)據(jù)庫表中插入新記錄時(shí),假如沒有給定某列的輸入值,則由SQLServer系統(tǒng)自動(dòng)為該列輸入默認(rèn)值的功能。通過將其綁定到默認(rèn)值要應(yīng)用的某個(gè)列上,它可為不同表的列所共享。AnIntroductiontoDatabaseSystems默認(rèn)值可以是常量、內(nèi)置函數(shù)或數(shù)學(xué)表達(dá)式。

與規(guī)則類似,須要將默認(rèn)值綁定到用戶列或用戶自定義數(shù)據(jù)類型上,它才能為列和用戶自定義數(shù)據(jù)類型供應(yīng)默認(rèn)值。創(chuàng)建默認(rèn)值

語法如下:

CREATEDEFAULTdefault

ASconstant_expression其中:Default:默認(rèn)值的名稱??梢赃x擇是否指定默認(rèn)值全部者名稱。AnIntroductiontoDatabaseSystemsconstant_expression:只包含常量值的表達(dá)式(不能包含任何列或其它數(shù)據(jù)庫對(duì)象的名稱)??梢赃\(yùn)用任何常量、內(nèi)置函數(shù)或數(shù)學(xué)表達(dá)式。字符和日期常量用單引號(hào)(')引起來;貨幣、整數(shù)和浮點(diǎn)常量不須要運(yùn)用引號(hào)。二進(jìn)制數(shù)據(jù)必需以0x開頭,貨幣數(shù)據(jù)必需以美元符號(hào)($)開頭。默認(rèn)值必需與列數(shù)據(jù)類型兼容。【例】在數(shù)據(jù)庫XSCJ中創(chuàng)建默認(rèn)值對(duì)象default_zz,其默認(rèn)值為“群眾”。

在查詢分析器中,執(zhí)行如下吩咐:

USEXSCJ

GO

CREATEDEFAULTdefault_zz

AS'群眾'

GOAnIntroductiontoDatabaseSystems綁定默認(rèn)值

語法如下:

sp_bindefault[@defname=]'default',

[@objname=]'object_name'AnIntroductiontoDatabaseSystems其中:[@defname=]'default':由CREATEDEFAULT語句創(chuàng)建的默認(rèn)名稱。default的數(shù)據(jù)類型為nvarchar(776),無默認(rèn)值。[@objname=]'object_name':要綁定默認(rèn)值的表和列名稱或用戶定義的數(shù)據(jù)類型。object_name的數(shù)據(jù)類型為nvarchar(517),無默認(rèn)值。假如object_name沒有實(shí)行table.column格式,則認(rèn)為它屬于用戶定義數(shù)據(jù)類型。默認(rèn)狀況下,用戶定義數(shù)據(jù)類型的現(xiàn)有列繼承default,除非默認(rèn)值干脆綁定到列中。默認(rèn)值無法綁定到timestamp數(shù)據(jù)類型的列、帶IDENTITY屬性的列或者已經(jīng)有DEFAULT約束的列。AnIntroductiontoDatabaseSystems【例】將默認(rèn)值對(duì)象default_zz綁定到“學(xué)生基本信息表”的“政治面貌”列上。

在查詢分析器中,執(zhí)行如下吩咐:

USEXSCJ

GO

sp_bindefaultdefault_zz,'學(xué)生基本信息表.政治面貌'

GO

運(yùn)行結(jié)果如圖所示。AnIntroductiontoDatabaseSystems解除綁定

語法如下:

sp_unbindefault[@objname=]'object_name'

[,[@futureonly=]'futureonly_flag']其中:[@objname=]'object_name':要解除默認(rèn)值綁定的表和列或者用戶定義數(shù)據(jù)類型的名稱。object_name的數(shù)據(jù)類型為nvarchar(776),無默認(rèn)值。假如參數(shù)不是table.column的形式,則假定object_name為用戶定義數(shù)據(jù)類型。當(dāng)為用戶定義數(shù)據(jù)類型解除默認(rèn)值綁定時(shí),全部屬于該數(shù)據(jù)類型并具有相同默認(rèn)值的列也同時(shí)解除默認(rèn)值綁定。對(duì)屬于該數(shù)據(jù)類型的列,假如其默認(rèn)值干脆綁定到列上,則該列不受影響。AnIntroductiontoDatabaseSystems在查詢分析器中執(zhí)行如下吩咐:

USEXSCJ

GO

sp_unbindefault'學(xué)生基本信息表.政治面貌'

GO

運(yùn)行結(jié)果如圖所示?!纠繉ⅰ皩W(xué)生基本信息表”的“政治面貌”列上綁定的默認(rèn)值對(duì)象default_zz解除。

AnIntroductiontoDatabaseSystems刪除默認(rèn)值語法如下:DROPDEFAULT{default}[,...n]其中:default:現(xiàn)有默認(rèn)值的名稱。若要查看現(xiàn)有默認(rèn)值的列表,可執(zhí)行sp_help。n:表示可以指定多個(gè)默認(rèn)值的占位符?!纠繉?shù)據(jù)庫XSCJ中的默認(rèn)值對(duì)象default_zz刪除。在查詢分析器中執(zhí)行如下吩咐,即可刪除綁定:USEXSCJGODROPDEFAULTdefault_zzGOAnIntroductiontoDatabaseSystems用戶自定義數(shù)據(jù)類型

假如SQLServer供應(yīng)的系統(tǒng)數(shù)據(jù)類型不能滿足設(shè)計(jì)須要,用戶就可以在SQLServer系統(tǒng)數(shù)據(jù)類型的基礎(chǔ)上自己定義數(shù)據(jù)類型。

在Model數(shù)據(jù)庫中創(chuàng)建的用戶自定義數(shù)據(jù)類型將出現(xiàn)在全部以后新建的數(shù)據(jù)庫中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論