




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第九章視圖索引和數(shù)據(jù)完整性第1頁(yè),共77頁(yè),2023年,2月20日,星期三第九章視圖、索引和數(shù)據(jù)完整性9.1視圖9.2索引9.3數(shù)據(jù)完整性第2頁(yè),共77頁(yè),2023年,2月20日,星期三9.1視圖視圖倉(cāng)庫(kù)號(hào)城市面積倉(cāng)庫(kù)號(hào)職工號(hào)工資倉(cāng)庫(kù)號(hào)城市職工號(hào)工資倉(cāng)庫(kù)號(hào)面積基本表視圖視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義.第3頁(yè),共77頁(yè),2023年,2月20日,星期三1.視圖的概念視圖是一個(gè)邏輯表,它允許操作者從其它表或視圖存取數(shù)據(jù),視圖本身不包含數(shù)據(jù)。視圖的數(shù)據(jù)來(lái)源可以由以下任意一項(xiàng)組成:一個(gè)基表的任意子集。兩個(gè)或者兩個(gè)以上基表的合集。兩個(gè)或者兩個(gè)以上基表的交集。對(duì)一個(gè)或者多個(gè)基表運(yùn)算的結(jié)果集合。另一個(gè)視圖的子集。第4頁(yè),共77頁(yè),2023年,2月20日,星期三視圖的優(yōu)點(diǎn)和作用將數(shù)據(jù)集中顯示簡(jiǎn)化數(shù)據(jù)操作自定義數(shù)據(jù)重新組織數(shù)據(jù)以便導(dǎo)入導(dǎo)出數(shù)據(jù)組合分區(qū)數(shù)據(jù)第5頁(yè),共77頁(yè),2023年,2月20日,星期三視圖的創(chuàng)建使用企業(yè)管理器創(chuàng)建視圖使用向?qū)?chuàng)建視圖使用SQL語(yǔ)句創(chuàng)建視圖其命令格式如下:CREATEVIEW<視圖名>AS<SELECT-查詢塊>[WITHCHECKOPTION]WITHCHECKOPTION:通過(guò)視圖進(jìn)行的修改,必須也能通過(guò)該視圖看到修改后的結(jié)果。比如insert,那么加的這條記錄在刷新視圖后必須可以看到;如果修改,修改完的結(jié)果也必須能通過(guò)該視圖看到;如果刪除,只能刪除視圖里有顯示的記錄
第6頁(yè),共77頁(yè),2023年,2月20日,星期三定義視圖的例子:CREATEVIEWv_empASSELECT職工號(hào),工資,城市FROM職工,倉(cāng)庫(kù)WHERE職工.倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào);對(duì)用戶就好象有一個(gè)表:第7頁(yè),共77頁(yè),2023年,2月20日,星期三關(guān)于WithcheckoptioncreateviewIS_student
as
selectsno,sname,sage
fromstudent
wheresdept='IS'
withcheckoption;
加上了withcheckoption;后,不能執(zhí)行插入操作:
insertintois_student(sno,sname,sage)
values('95100','李娜',12)
第8頁(yè),共77頁(yè),2023年,2月20日,星期三使用視圖使用視圖進(jìn)行數(shù)據(jù)檢索CREATEVIEWv_sal(職工號(hào),月工資,年工資)ASSELECT職工號(hào),工資,工資*12FROM職工查詢視圖v_sal:SELECT*FROMv_sal結(jié)果:E1122014640E3121014520E4125015000E6123014760E7125015000第9頁(yè),共77頁(yè),2023年,2月20日,星期三通過(guò)視圖修改數(shù)據(jù) 當(dāng)更新視圖中的數(shù)據(jù)時(shí),實(shí)際上是對(duì)表的內(nèi)部數(shù)據(jù)進(jìn)行更新。事實(shí)上,當(dāng)從視圖中插入或者刪除時(shí),情況也是這樣。第10頁(yè),共77頁(yè),2023年,2月20日,星期三但并不是每個(gè)視圖都是可更新的,應(yīng)滿足以下條件:1)沒(méi)有使用連接函數(shù),集合運(yùn)算函數(shù)和組函數(shù)。
2)SELECT語(yǔ)句中沒(méi)有GROUPBY等子句。
3)SELECT語(yǔ)句中不包含從基表列通過(guò)計(jì)算所得的列。
注意:只有當(dāng)視圖依賴的基本表為單個(gè)時(shí),才可進(jìn)行插入和刪除數(shù)據(jù)的操作,修改操作一次修改數(shù)據(jù)操作只能變動(dòng)一個(gè)基本表的數(shù)據(jù).第11頁(yè),共77頁(yè),2023年,2月20日,星期三例如Createtabletable4(col1int,col2varchar(30))Createviewview1asselectcol2,col1fromtable4GoInsertintoview1values(‘第1行’,1)goInsertintoview1values(‘第2行’,2)Select*fromtable4go結(jié)果為:col1col2-------------------第1行第2行第12頁(yè),共77頁(yè),2023年,2月20日,星期三視圖的修改使用企業(yè)管理器使用ALTERVIEW語(yǔ)句重命名視圖1、企業(yè)管理器2、存儲(chǔ)過(guò)程sp_rename例如:sp_rename‘view1’,’view2’view1為原來(lái)的名稱view2為新名稱ALTERVIEW<視圖名>AS<SELECT-查詢塊>[WITHCHECKOPTION]第13頁(yè),共77頁(yè),2023年,2月20日,星期三視圖信息的查詢使用企業(yè)管理器使用sp_helptext存儲(chǔ)過(guò)程 例如:useschoolgoexecsp_helptextst2_degree結(jié)果為:text-----------------------------------------------createviewst2_degreeas………………第14頁(yè),共77頁(yè),2023年,2月20日,星期三視圖的刪除命令格式是:DROPVIEW<視圖名>使用企業(yè)管理器使用T-SQL
第15頁(yè),共77頁(yè),2023年,2月20日,星期三實(shí)訓(xùn)建立視圖view1,查詢所有供應(yīng)商的供應(yīng)商號(hào),名稱和所在的城市,并按供應(yīng)商號(hào)順序排序。建立視圖view2,查詢所有職工的平均工資。建立視圖view3,查詢所有在北京的職工對(duì)應(yīng)的訂購(gòu)單號(hào)和訂購(gòu)日期信息。查看視圖。修改視圖的屬性。視圖的刪除。視圖的重命名及顯示視圖信息。第16頁(yè),共77頁(yè),2023年,2月20日,星期三9.2索引1.索引的概念
數(shù)據(jù)庫(kù)中的索引與書(shū)籍中的索引類似。在一本書(shū)中,使用索引可以快速查找所需信息,無(wú)須閱讀整本書(shū)。在數(shù)據(jù)庫(kù)中,索引使數(shù)據(jù)庫(kù)程序無(wú)須對(duì)整個(gè)表進(jìn)行掃描,就可以在其中找到所需數(shù)據(jù)。書(shū)中的索引是一個(gè)詞語(yǔ)列表,其中注明了包含各個(gè)詞的頁(yè)碼。而數(shù)據(jù)庫(kù)中的索引是指某個(gè)表中一列或者若干列值的集合和相應(yīng)的指向表中物理標(biāo)識(shí)這些值的數(shù)據(jù)頁(yè)的邏輯指針清單。第17頁(yè),共77頁(yè),2023年,2月20日,星期三索引的作用(1)通過(guò)創(chuàng)建唯一索引,可以保證數(shù)據(jù)記錄的唯一性。(2)可以大大加快數(shù)據(jù)檢索速度。(3)可以加速表與表之間的連接,這一點(diǎn)在實(shí)現(xiàn)數(shù)據(jù)的參照完整性方面有特別的意義。(4)在使用ORDERBY和GROUPBY子句中進(jìn)行檢索數(shù)據(jù)時(shí),可以顯著減少查詢中分組和排序的時(shí)間。(5)使用索引可以在檢索數(shù)據(jù)的過(guò)程中使用優(yōu)化隱藏器,提高系統(tǒng)性能。第18頁(yè),共77頁(yè),2023年,2月20日,星期三索引的分類(1)聚集索引聚集索引對(duì)表和視圖中的數(shù)據(jù)進(jìn)行物理排序,然后再重新存儲(chǔ)到磁盤(pán)上,這種索引對(duì)查詢非常有效。表和視圖中只能有一個(gè)聚集索引。當(dāng)建立主鍵約束時(shí),如果表中沒(méi)有聚集索引,SQLServer會(huì)用主鍵列作為聚集索引鍵。用戶可以在表的任何列或列的組合上建立索引,但一般是為定義成主鍵約束的列建立聚集索引。(2)非聚集索引非聚集索引不用將表和視圖中的數(shù)據(jù)進(jìn)行物理排序。一般在那些經(jīng)常被用來(lái)查詢的表的列上建立索引以獲得最佳查詢性能。但索引也需要占用空間,表越大,建立的包含該表的索引也越大。當(dāng)一個(gè)含有索引的表被改動(dòng)時(shí),改動(dòng)數(shù)據(jù)的速度會(huì)減慢,所以不要在表中建立太多且很少用到的索引。
第19頁(yè),共77頁(yè),2023年,2月20日,星期三創(chuàng)建索引通過(guò)企業(yè)管理器創(chuàng)建索引通過(guò)向?qū)?chuàng)建索引通過(guò)SQL語(yǔ)句創(chuàng)建索引其語(yǔ)法格式如下: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
]第20頁(yè),共77頁(yè),2023年,2月20日,星期三l
表名用于指定創(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è)頁(yè)(節(jié)點(diǎn))上保持開(kāi)放的空間。
l
FILLFACTOR=fillfactor用于指定在創(chuàng)建索引時(shí),每個(gè)索引頁(yè)的數(shù)據(jù)占索引頁(yè)大小的百分比,fillfactor的值為1到100。l
IGNORE_DUP_KEY用于控制當(dāng)往包含于一個(gè)唯一聚集索引中的列中插入重復(fù)數(shù)據(jù)時(shí)SQLServer所作的反應(yīng)。l
DROP_EXISTING用于指定應(yīng)刪除并重新創(chuàng)建已命名的先前存在的聚集索引或者非聚集索引。l
STATISTICS_NORECOMPUTE用于指定過(guò)期的索引統(tǒng)計(jì)不會(huì)自動(dòng)重新計(jì)算。SORT_IN_TEMPDB用于指定創(chuàng)建索引時(shí)的中間排序結(jié)果將存儲(chǔ)在tempdb數(shù)據(jù)庫(kù)中ONfilegroup用于指定存放索引的文件組。l
UNIQUE用于指定為表或視圖創(chuàng)建唯一索引,即不允許存在索引值相同的兩行。
其中:第21頁(yè),共77頁(yè),2023年,2月20日,星期三【例】使用CREATEINDEX語(yǔ)句在XSCJ數(shù)據(jù)庫(kù)的“成績(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成績(jī)表(學(xué)號(hào),課程編號(hào))GO第22頁(yè),共77頁(yè),2023年,2月20日,星期三查看、修改索引1.使用企業(yè)管理器查看、修改索引2.使用系統(tǒng)存儲(chǔ)過(guò)程查看、更名索引系統(tǒng)存儲(chǔ)過(guò)程sp_helpindex可以返回表的所有索引信息,其語(yǔ)法形式如下:sp_helpindex‘表名稱’另外,系統(tǒng)存儲(chǔ)過(guò)程sp_rename可以用來(lái)更改索引的名稱,其語(yǔ)法形式如下:sp_rename'表名.舊索引名','新索引名'第23頁(yè),共77頁(yè),2023年,2月20日,星期三【例6-17】使用系統(tǒng)存儲(chǔ)過(guò)程sp_helpindex查看XSCJ數(shù)據(jù)庫(kù)中“成績(jī)表”的索引信息。在查詢分析器中運(yùn)行如下命令:USEXSCJGOsp_helpindex'成績(jī)表'GO
第24頁(yè),共77頁(yè),2023年,2月20日,星期三【例】使用系統(tǒng)存儲(chǔ)過(guò)程將索引“PK_成績(jī)表”更名為“IX_成績(jī)表”。在查詢分析器中運(yùn)行如下命令:USEXSCJGOEXECsp_rename'成績(jī)表.PK_成績(jī)表','IX_成績(jī)表'GO
第25頁(yè),共77頁(yè),2023年,2月20日,星期三1.使用企業(yè)管理器刪除索引要?jiǎng)h除索引,可以在企業(yè)管理器中,從【管理索引】對(duì)話框中或者【表的屬性】對(duì)話框中,選擇要?jiǎng)h除的索引,單擊【刪除】按鈕,即可刪除索引。2.使用DROPINDEX命令刪除索引當(dāng)不再需要某個(gè)索引時(shí),可以將其刪除,DROPINDEX命令可以刪除一個(gè)或者多個(gè)當(dāng)前數(shù)據(jù)庫(kù)中的索引,其語(yǔ)法格式如下:DROPINDEXtable.index|view.index[,...n]其中:table|view用于指定索引列所在的表或索引視圖;index用于指定要?jiǎng)h除的索引名稱。注意,DROPINDEX命令不能刪除由CREATETABLE或者ALTERTABLE命令創(chuàng)建的主鍵或者唯一性約束索引,也不能刪除系統(tǒng)表中的索引。
刪除索引第26頁(yè),共77頁(yè),2023年,2月20日,星期三【例】刪除“學(xué)生基本信息表”中名為“IX_學(xué)生姓名”的索引。在查詢分析器中運(yùn)行如下命令:USEXSCJGODROPINDEX學(xué)生基本信息表.IX_學(xué)生姓名GO
第27頁(yè),共77頁(yè),2023年,2月20日,星期三1、創(chuàng)建各表索引:(1)基于訂購(gòu)單表的訂購(gòu)單號(hào)列創(chuàng)建名為IX_訂購(gòu)單號(hào)的聚集、唯一索引;(2)基于職工表的倉(cāng)庫(kù)號(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)第28頁(yè),共77頁(yè),2023年,2月20日,星期三9.3數(shù)據(jù)完整性數(shù)據(jù)完整性的定義
數(shù)據(jù)完整性是指存放在數(shù)據(jù)庫(kù)中的數(shù)據(jù)要滿足的業(yè)務(wù)規(guī)則,是確保數(shù)據(jù)庫(kù)的數(shù)據(jù)一致、正確以及符合企業(yè)規(guī)則的一種思想。如年齡0~150,性別{男,女},成績(jī)表中學(xué)號(hào)必須在學(xué)生基本信息表中存在等。這樣可以保證有效的有意義的數(shù)據(jù)存放到數(shù)據(jù)庫(kù)中。完整性類型
數(shù)據(jù)完整性有四種類型:實(shí)體完整性、域完整性、引用完整性、用戶自定義完整性。第29頁(yè),共77頁(yè),2023年,2月20日,星期三1.實(shí)體完整性
實(shí)體完整性也可稱為表的完整性,是指表中必須有一個(gè)主關(guān)鍵字,用來(lái)惟一地標(biāo)識(shí)表中的每一行,且不允許為空值(NULL)。實(shí)體完整性強(qiáng)制表的標(biāo)識(shí)符列或主鍵的完整性(通過(guò)索引、UNIQUE約束、PRIMARYKEY約束或IDENTITY屬性實(shí)現(xiàn))。
2.域完整性
域完整性也可稱為列的完整性,是指給定列的輸入有效性,用于限制向表中輸入的值的范圍。強(qiáng)制域有效性的方法有:限制類型(通過(guò)類型)、格式(通過(guò)CHECK約束和規(guī)則)或可能值的范圍(通過(guò)FOREIGNKEY約束、CHECK約束、DEFAULT定義、NOTNULL定義和規(guī)則)。第30頁(yè),共77頁(yè),2023年,2月20日,星期三引用完整性
引用完整性也稱參照完整性,在輸入或刪除記錄時(shí),引用完整性保持表之間已定義的關(guān)系。在SQLServer2000中,引用完整性基于外鍵與主鍵之間或外鍵與唯一鍵之間的關(guān)系(通過(guò)FOREIGNKEY和CHECK約束)。引用完整性確保鍵值在所有表中一致。這樣的一致性要求不能引用不存在的值,如果鍵值更改了,那么在整個(gè)數(shù)據(jù)庫(kù)中,對(duì)該鍵值的所有引用要進(jìn)行一致的更改。第31頁(yè),共77頁(yè),2023年,2月20日,星期三
強(qiáng)制引用完整性時(shí),SQLServer禁止用戶進(jìn)行下列操作:l當(dāng)主表沒(méi)有關(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等。用戶定義的完整性可以通過(guò)前面3種完整性的實(shí)施得到維護(hù)。第32頁(yè),共77頁(yè),2023年,2月20日,星期三使用約束實(shí)現(xiàn)數(shù)據(jù)完整性PRIMARYKEY約束
表中經(jīng)常有一個(gè)列或列的組合,其值能唯一地標(biāo)識(shí)表中的每一行。這樣的一列或多列稱為表的主鍵(PK),通過(guò)它可強(qiáng)制表的實(shí)體完整性。當(dāng)創(chuàng)建或更改表時(shí)可通過(guò)定義PRIMARYKEY約束來(lái)創(chuàng)建主鍵。注意,每個(gè)表有且只有一個(gè)PRIMARYKEY約束,PRIMARYKEY約束中的列不能接受空值,系統(tǒng)在定義PK的列上自動(dòng)建立唯一索引,主鍵可以是多列的組合。如果PRIMARYKEY約束定義在不止一列上,則一列中的值可以重復(fù),但PRIMARYKEY約束定義的所有列的組合的值必須唯一。
只有在進(jìn)行聯(lián)接或執(zhí)行INSERT時(shí)才檢查主鍵約束。第33頁(yè),共77頁(yè),2023年,2月20日,星期三UNIQUE約束使用UNIQUE約束可以確保表中在非主鍵列中不輸入重復(fù)值。盡管UNIQUE約束和PRIMARYKEY約束都強(qiáng)制惟一性,但在強(qiáng)制下面的唯一性時(shí)應(yīng)使用UNIQUE約束而不是PRIMARYKEY約束:l非主鍵的一列或組合。l一個(gè)表可以定義多個(gè)UNIQUE約束,而只能定義一個(gè)PRIMARYKEY約束。l允許空值的列。l允許空值的列上可以定義UNIQUE約束,但不能定義PRIMARYKEY約束。FOREIGNKEY約束也可以引用UNIQUE約束。第34頁(yè),共77頁(yè),2023年,2月20日,星期三圖設(shè)計(jì)表圖【管理約束】對(duì)話框【例】為數(shù)據(jù)庫(kù)XSCJ中“系部表”的“系部名稱”列上創(chuàng)建UNIQUE約束。
方法一、在企業(yè)管理器中創(chuàng)建UNIQUE約束??梢园匆韵虏襟E操作:①展開(kāi)服務(wù)器,單擊【數(shù)據(jù)庫(kù)】,在展開(kāi)數(shù)據(jù)庫(kù)XSCJ后,單擊【表】。
②右擊【系部表】,在彈出的快捷菜單中單擊【設(shè)計(jì)表】,打開(kāi)如圖9-1所示的設(shè)計(jì)表對(duì)話框。
③單擊【管理約束】按鈕,彈出如圖所示的【管理約束屬性】對(duì)話框,選擇【索引/鍵】標(biāo)簽。第35頁(yè),共77頁(yè),2023年,2月20日,星期三④單擊【新建】按鈕,在列名下選擇【系部名稱】,再在【創(chuàng)建UNIQUE(U)】復(fù)選框上打√,單擊【約束】。
⑤單擊【關(guān)閉】按鈕,在設(shè)計(jì)窗口單擊【保存】按鈕后,關(guān)閉設(shè)計(jì)表對(duì)話框即可。第36頁(yè),共77頁(yè),2023年,2月20日,星期三方法二、在SQLServer2000中,也可用ALTERTABLE命令來(lái)創(chuàng)建一個(gè)UNIQUE約束。其語(yǔ)法為:
ALTERTABLEtable_name
ADD[CONSTAINTConstraint_name]
UNIQUE{(Column[,…n])
在查詢分析器中通過(guò)執(zhí)行以下語(yǔ)句可以實(shí)現(xiàn)【例7-2】的任務(wù)。
USEXSCJ
GO
ALTERTABLE系部表
ADDCONSTRAINTUNI_stu_addr
UNIQUE(系部名稱)
GO
第37頁(yè),共77頁(yè),2023年,2月20日,星期三CHECK約束
CHECK約束通過(guò)限制輸入到列中的值來(lái)強(qiáng)制域的完整性。這與FOREIGNKEY約束控制列中數(shù)值相似。區(qū)別在于它們?nèi)绾闻袛嗄男┲涤行В篎OREIGNKEY約束從另一個(gè)表中獲得有效數(shù)值列表,CHECK約束從邏輯表達(dá)式判斷而非基于其它表的數(shù)據(jù)。
可以通過(guò)任何基于邏輯運(yùn)算符返回結(jié)果TRUE或FALSE的邏輯(布爾)表達(dá)式來(lái)創(chuàng)建CHECK約束。對(duì)單獨(dú)一列可使用多個(gè)CHECK約束。按約束創(chuàng)建的順序?qū)ζ淙≈怠?/p>
只有當(dāng)INSERT、UPDATE時(shí)才檢查CHECK約束。第38頁(yè),共77頁(yè),2023年,2月20日,星期三圖設(shè)計(jì)“學(xué)生基本信息表”圖管理約束界面【例】為數(shù)據(jù)庫(kù)XSCJ中“學(xué)生基本信息表”的“性別”列上創(chuàng)建CHECK約束。
方法一、在企業(yè)管理器中創(chuàng)建CHECK約束。可以按以下步驟操作:
①展開(kāi)服務(wù)器,單擊【數(shù)據(jù)庫(kù)】,在展開(kāi)數(shù)據(jù)庫(kù)XSCJ后,單擊【表】。
②右擊【學(xué)生基本信息表】,在彈出的快捷菜單中單擊【設(shè)計(jì)表】。③單擊【管理約束】按鈕,彈出【管理約束屬性】對(duì)話框,單擊【CHECK約束】標(biāo)簽。第39頁(yè),共77頁(yè),2023年,2月20日,星期三④單擊【新建】后,在【約束表達(dá)式】欄中添入“性別=’男’OR性別=’女’”即可。
⑤單擊【關(guān)閉】按鈕,在設(shè)計(jì)窗口單擊【保存】按鈕后,關(guān)閉設(shè)計(jì)表窗口。第40頁(yè),共77頁(yè),2023年,2月20日,星期三方法二、在SQLServer2000中,也可用ALTERTABLE命令來(lái)創(chuàng)建一個(gè)CHECK約束。其語(yǔ)法為:
ALTERTABLEtable_name
ADD[CONSTAINTConstraint_name]
CHECKlogical_expression
在查詢分析器中通過(guò)執(zhí)行以下語(yǔ)句可以實(shí)現(xiàn)【例7-3】的任務(wù)。
USEXSCJ
GO
ALTERTABLE學(xué)生基本信息表
ADDCONSTRAINTUNI_stu_addr
CHECK(性別='男'or性別='女')
GO
第41頁(yè),共77頁(yè),2023年,2月20日,星期三FOREIGNKEY約束
外鍵(FOREIGNKEY簡(jiǎn)寫(xiě)為FK)是用于實(shí)現(xiàn)兩個(gè)表之間數(shù)據(jù)聯(lián)系的一個(gè)列或多個(gè)列的組合。通過(guò)將保存表中主鍵值的一列或多列添加到另一個(gè)表中,可創(chuàng)建兩個(gè)表之間的數(shù)據(jù)聯(lián)系,這個(gè)列就成為第二個(gè)表的外鍵。當(dāng)創(chuàng)建或更改表時(shí)可通過(guò)定義FOREIGNKEY約束來(lái)創(chuàng)建外鍵。
建立FOREIGNKEY約束后系統(tǒng)自動(dòng)維護(hù)。
1、修改父表主鍵時(shí)檢查。
2、刪除父表記錄時(shí)檢查。
3、在子表中插入數(shù)據(jù)時(shí)檢查。
第42頁(yè),共77頁(yè),2023年,2月20日,星期三【例】數(shù)據(jù)庫(kù)XSCJ中以“系部表”為父表,以“班級(jí)表”為子表,通過(guò)“系部編號(hào)”在“班級(jí)表”上建立FORIGNKEY約束。
方法一、在企業(yè)管理器中創(chuàng)建外鍵約束。可以按以下步驟操作:
①展開(kāi)服務(wù)器,單擊【數(shù)據(jù)庫(kù)】,在展開(kāi)數(shù)據(jù)庫(kù)XSCJ后,單擊【表】。
②右擊【班級(jí)表】,在彈出的快捷菜單中單擊【設(shè)計(jì)表】。如圖所示。
③單擊【管理關(guān)系】按鈕,彈出【管理關(guān)系屬性】對(duì)話框。如圖所示。第43頁(yè),共77頁(yè),2023年,2月20日,星期三第44頁(yè),共77頁(yè),2023年,2月20日,星期三④單擊【新建】按鈕,在【主鍵表(P)】下方選擇【系部表】后,再選擇【系部表】的主鍵【系部編號(hào)】,然后,在【外鍵表(O)】下方選擇【班級(jí)表】后,再選擇【班級(jí)表】中的列【系部編號(hào)】。如圖所示。
⑤單擊【關(guān)閉】按鈕,在設(shè)計(jì)窗口單擊【保存】按鈕,即可關(guān)閉設(shè)計(jì)表窗口。注意:在做上述操作前,要先為“系部表”創(chuàng)建主鍵約束,即“系部編號(hào)”是系部表的主鍵。第45頁(yè),共77頁(yè),2023年,2月20日,星期三實(shí)訓(xùn)1.為供應(yīng)商表的供應(yīng)商名稱建立唯一性(UNIQUE)約束.2.為職工表的職工工資建立檢查(CHECK)約束,工資范圍在1000~3000之間.3.為倉(cāng)庫(kù)表為父表,職工表為子表,在職工表上通過(guò)倉(cāng)庫(kù)號(hào)創(chuàng)建外鍵約束第46頁(yè),共77頁(yè),2023年,2月20日,星期三使用規(guī)則
規(guī)則也是實(shí)現(xiàn)數(shù)據(jù)完整性的方法之一。規(guī)則是獨(dú)立于表的數(shù)據(jù)庫(kù)對(duì)象,定義后需綁定到列或用戶定義的數(shù)據(jù)類型。它類似于CHECK約束,但規(guī)則不能進(jìn)行同表不同列之間的比較。它只能用于檢查單列。
使用規(guī)則需要先創(chuàng)建規(guī)則,然后再將其綁定到列上或用戶自定義的數(shù)據(jù)類型上。刪除規(guī)則前,也必須先刪除該規(guī)則的綁定。第47頁(yè),共77頁(yè),2023年,2月20日,星期三在SQLServer2000中,可以使用CREATERULE語(yǔ)句和企業(yè)管理器2種方法創(chuàng)建一個(gè)新的規(guī)則。
1.使用CREATERULE語(yǔ)句創(chuàng)建規(guī)則
其語(yǔ)法為:
CREATERULErule_name
Ascondition_expression其中:rule_name:新規(guī)則的名稱。規(guī)則名稱必須符合標(biāo)識(shí)符規(guī)則??梢赃x擇是否指定規(guī)則所有者的名稱。創(chuàng)建規(guī)則第48頁(yè),共77頁(yè),2023年,2月20日,星期三condition_expression:定義規(guī)則的條件表達(dá)式。條件表達(dá)式可以是WHERE子句中任何有效的表達(dá)式,并且可以包含諸如算術(shù)運(yùn)算符、關(guān)系運(yùn)算符以及諸如IN、LIKE、BETWEEN等關(guān)鍵字。條件表達(dá)式中包含一個(gè)局部變量,該變量必須以符號(hào)@打頭。【例】在數(shù)據(jù)庫(kù)XSCJ上創(chuàng)建一個(gè)使性別輸入只能是“男”或“女”的規(guī)則。
在查詢分析器中通過(guò)執(zhí)行以下語(yǔ)句即可。
CREATERULErule_sexAS@sexin('男','女')
GO
第49頁(yè),共77頁(yè),2023年,2月20日,星期三2.使用企業(yè)管理器創(chuàng)建規(guī)則。操作步驟為:
①展開(kāi)服務(wù)器,單擊【數(shù)據(jù)庫(kù)】,右擊XSCJ,在彈出的快捷菜單中選擇【新建】命令,在彈出的級(jí)聯(lián)菜單中選擇【規(guī)則】,出現(xiàn)創(chuàng)建規(guī)則對(duì)話框如圖所示。第50頁(yè),共77頁(yè),2023年,2月20日,星期三圖創(chuàng)建規(guī)則界面圖使用企業(yè)管理器創(chuàng)建規(guī)則第51頁(yè),共77頁(yè),2023年,2月20日,星期三②在【名稱】框內(nèi)輸入規(guī)則的名稱,在【文本】框內(nèi)輸入規(guī)則的表達(dá)式。
③單擊【確定】按鈕即可。
綁定規(guī)則
1.使用企業(yè)管理器綁定規(guī)則。
【例】將rule_sex規(guī)則綁定到“學(xué)生基本信息表”的“性別”列上。
使用企業(yè)管理器綁定規(guī)則,可以按以下步驟操作:
①在創(chuàng)建規(guī)則對(duì)話框(如圖所示)中,單擊【綁定列】,出現(xiàn)【將規(guī)則綁定到列】對(duì)話框。第52頁(yè),共77頁(yè),2023年,2月20日,星期三②在綁定列對(duì)話框上的【表】欄中選擇【學(xué)生基本信息表】,在未綁定的列中選擇【性別】后,再單擊【添加】按鈕,單擊【確定】即可完成規(guī)則的綁定。
2.用sp_bindrule存儲(chǔ)過(guò)程綁定規(guī)則。其語(yǔ)法為:
sp_bindrule[@rulename=]'rule',
[@objname=]'object_name'其中:[@rulename=]'rule':由sp_bindrule過(guò)程創(chuàng)建的規(guī)則名稱。rule的數(shù)據(jù)類型為nvarchar(776),無(wú)默認(rèn)值。
[@objname=]'object_name':綁定了規(guī)則的表和列或用戶定義的數(shù)據(jù)類型。object_name的數(shù)據(jù)類型為nvarchar(517),無(wú)默認(rèn)值。如果object_name沒(méi)有采取table.column格式,則認(rèn)為它屬于用戶定義數(shù)據(jù)類型。默認(rèn)情況下,用戶定義的數(shù)據(jù)類型的現(xiàn)有列繼承rule,除非直接在列上綁定了規(guī)則。第53頁(yè),共77頁(yè),2023年,2月20日,星期三在查詢分析器中,執(zhí)行如下命令可實(shí)現(xiàn)將rule_sex規(guī)則綁定到【學(xué)生基本信息表】的【性別】列上:
USEXSCJ
GO
sp_bindrulerule_sex,'學(xué)生基本信息表.性別'
GO
運(yùn)行結(jié)果如圖所示,已將rule_sex規(guī)則綁定到“學(xué)生基本信息表”的“性別”列上。第54頁(yè),共77頁(yè),2023年,2月20日,星期三
圖使用sp_bindrule存儲(chǔ)過(guò)程綁定規(guī)則第55頁(yè),共77頁(yè),2023年,2月20日,星期三解除綁定
1.使用企業(yè)管理器解除綁定規(guī)則
在綁定列對(duì)話框的【綁定列】欄中,選擇要解除綁定的列,單擊【刪除】按鈕,單擊【確定】即可完成解除綁定。
2.使用sp_unbindrule存儲(chǔ)過(guò)程解除綁定規(guī)則
其語(yǔ)法為:
sp_unbindrule[@objname=]'object_name'其中:l[@objname=]'object_name':是要解除規(guī)則綁定的表和列或者用戶定義數(shù)據(jù)類型的名稱。object_name的數(shù)據(jù)類型為nvarchar(776),無(wú)默認(rèn)值。如果參數(shù)不是table.column的形式,則假定object_name為用戶定義數(shù)據(jù)類型。當(dāng)為用戶定義數(shù)據(jù)類型解除規(guī)則綁定時(shí),所有屬于該數(shù)據(jù)類型并具有相同規(guī)則的列也同時(shí)解除規(guī)則綁定。對(duì)屬于該數(shù)據(jù)類型的列,如果其規(guī)則直接綁定到列上,則該列不受影響。第56頁(yè),共77頁(yè),2023年,2月20日,星期三【例】將rule_sex規(guī)則在【學(xué)生基本信息表】的【性別】列上的綁定解除。
在查詢分析器中執(zhí)行如下命令:
USEXSCJ
GO
sp_unbindrule'學(xué)生基本信息表.性別'
GO
運(yùn)行結(jié)果如圖所示,已將綁定的規(guī)則解除。第57頁(yè),共77頁(yè),2023年,2月20日,星期三第58頁(yè),共77頁(yè),2023年,2月20日,星期三刪除規(guī)則
1.使用企業(yè)管理器刪除規(guī)則??砂匆韵虏襟E操作:
①展開(kāi)服務(wù)器,單擊【數(shù)據(jù)庫(kù)】,選擇指定數(shù)據(jù)庫(kù)XSCJ,單擊【規(guī)則】,在要?jiǎng)h除的規(guī)則上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇【刪除】,出現(xiàn)刪除規(guī)則對(duì)話框,如圖7-21所示。
②單擊【全部除去】按鈕即可。第59頁(yè),共77頁(yè),2023年,2月20日,星期三2.使用DROPRULE命令刪除規(guī)則其語(yǔ)法為:DROPRULE{rule}[,...n]其中:rule:要?jiǎng)h除的規(guī)則名稱。n:表示可以指定多個(gè)規(guī)則。例如:在查詢分析器中執(zhí)行命令DROPRULErule_sex即可將規(guī)則rule_sex刪除。使用默認(rèn)值
默認(rèn)值對(duì)象是為特定數(shù)據(jù)庫(kù)定義的。使用默認(rèn)值可以實(shí)現(xiàn)當(dāng)用戶向數(shù)據(jù)庫(kù)表中插入新記錄時(shí),如果沒(méi)有給定某列的輸入值,則由SQLServer系統(tǒng)自動(dòng)為該列輸入默認(rèn)值的功能。通過(guò)將其綁定到默認(rèn)值要應(yīng)用的某個(gè)列上,它可為不同表的列所共享。第60頁(yè),共77頁(yè),2023年,2月20日,星期三默認(rèn)值可以是常量、內(nèi)置函數(shù)或數(shù)學(xué)表達(dá)式。
與規(guī)則類似,需要將默認(rèn)值綁定到用戶列或用戶自定義數(shù)據(jù)類型上,它才能為列和用戶自定義數(shù)據(jù)類型提供默認(rèn)值。創(chuàng)建默認(rèn)值
語(yǔ)法如下:
CREATEDEFAULTdefault
ASconstant_expression其中:Default:默認(rèn)值的名稱??梢赃x擇是否指定默認(rèn)值所有者名稱。第61頁(yè),共77頁(yè),2023年,2月20日,星期三constant_expression:只包含常量值的表達(dá)式(不能包含任何列或其它數(shù)據(jù)庫(kù)對(duì)象的名稱)??梢允褂萌魏纬A?、內(nèi)置函數(shù)或數(shù)學(xué)表達(dá)式。字符和日期常量用單引號(hào)(')引起來(lái);貨幣、整數(shù)和浮點(diǎn)常量不需要使用引號(hào)。二進(jìn)制數(shù)據(jù)必須以0x開(kāi)頭,貨幣數(shù)據(jù)必須以美元符號(hào)($)開(kāi)頭。默認(rèn)值必須與列數(shù)據(jù)類型兼容?!纠吭跀?shù)據(jù)庫(kù)XSCJ中創(chuàng)建默認(rèn)值對(duì)象default_zz,其默認(rèn)值為“群眾”。
在查詢分析器中,執(zhí)行如下命令:
USEXSCJ
GO
CREATEDEFAULTdefault_zz
AS'群眾'
GO第62頁(yè),共77頁(yè),2023年,2月20日,星期三綁定默認(rèn)值
語(yǔ)法如下:
sp_bindefault[@defname=]'default',
[@objname=]'object_name'第63頁(yè),共77頁(yè),2023年,2月20日,星期三其中:[@defname=]'default':由CREATEDEFAULT語(yǔ)句創(chuàng)建的默認(rèn)名稱。default的數(shù)據(jù)類型為nvarchar(776),無(wú)默認(rèn)值。[@objname=]'object_name':要綁定默認(rèn)值的表和列名稱或用戶定義的數(shù)據(jù)類型。object_name的數(shù)據(jù)類型為nvarchar(517),無(wú)默認(rèn)值。如果object_name沒(méi)有采取table.column格式,則認(rèn)為它屬于用戶定義數(shù)據(jù)類型。默認(rèn)情況下,用戶定義數(shù)據(jù)類型的現(xiàn)有列繼承default,除非默認(rèn)值直接綁定到列中。默認(rèn)值無(wú)法綁定到timestamp數(shù)據(jù)類型的列、帶IDENTITY屬性的列或者已經(jīng)有DEFAULT約束的列。第64頁(yè),共77頁(yè),2023年,2月20日,星期三【例】將默認(rèn)值對(duì)象default_zz綁定到“學(xué)生基本信息表”的“政治面貌”列上。
在查詢分析器中,執(zhí)行如下命令:
USEXSCJ
GO
sp_bindefaultdefault_zz,'學(xué)生基本信息表.政治面貌'
GO
運(yùn)行結(jié)果如圖所示。第65頁(yè),共77頁(yè),2023年,2月20日,星期三解除綁定
語(yǔ)法如下:
sp_unbindefault[@objname=]'object_name'
[,[@futureonly=]'futureonly_flag']其中:[@objname=]'object_name':要解除默認(rèn)值綁定的表和列或者用戶定義數(shù)據(jù)類型的名稱。object_name的數(shù)據(jù)類型為nvarchar(776),無(wú)默認(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)值直接綁定到列上,則該列不受影響。第66頁(yè),共77頁(yè),2023年,2月20日,星期三在查詢分析器中執(zhí)行如下命令:
USEXSCJ
GO
sp_unbindefault'學(xué)生基本信息表.政治面貌'
GO
運(yùn)行結(jié)果如圖所示?!纠繉ⅰ皩W(xué)生基本信息表”的“政治面貌”列上綁定的默認(rèn)值對(duì)象default_zz解除。
第67頁(yè),共77頁(yè),2023年,2月20日,星期三刪除默認(rèn)值語(yǔ)法如下:DROPDEFAULT{default}[,...n]其中:default:現(xiàn)有默認(rèn)值的名稱。若要查看現(xiàn)有默認(rèn)值的列表,可執(zhí)行sp_help。n:表示可以指定多個(gè)默認(rèn)值的占位符。【例】將數(shù)據(jù)庫(kù)XSCJ中的默認(rèn)值對(duì)象default_zz刪除。在查詢分析器中執(zhí)行如下命令,即可刪除綁定:USEXSCJGODROPDEFAULTdefault_zzGO第68頁(yè),共77頁(yè),2023年,2月20日,星期三用戶自定義數(shù)據(jù)類型
如果SQLServer提供的系統(tǒng)數(shù)據(jù)類型不能滿足設(shè)計(jì)需要,用戶就可以在SQLServer系統(tǒng)數(shù)據(jù)類型的基礎(chǔ)上自己定義數(shù)據(jù)類型。
在Model數(shù)據(jù)庫(kù)中創(chuàng)建的用戶自定義數(shù)據(jù)類型將出現(xiàn)在所有以后新建的數(shù)據(jù)庫(kù)中;而在用戶數(shù)據(jù)庫(kù)中創(chuàng)建的用戶自定義數(shù)據(jù)類
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZNZ 264.2-2024 重金屬中度污染農(nóng)田土壤修復(fù)和安全利用技術(shù)規(guī)范 第2部分:超積累東南景天與中稻輪作
- T-ZZB 3744-2024 制革用陰離子型磺化油
- T-ZMDS 20008-2024 醫(yī)療器械嵌入式軟件漏洞評(píng)估方法
- 2025年度解除農(nóng)業(yè)合作項(xiàng)目的聲明書(shū)
- 二零二五年度綠化苗木購(gòu)銷(xiāo)與城市綠化養(yǎng)護(hù)服務(wù)合同
- 二零二五年度實(shí)習(xí)教師與教育機(jī)構(gòu)教育咨詢服務(wù)合同
- 二零二五年度共享住宅租賃正規(guī)協(xié)議書(shū)范本及環(huán)保要求
- 二零二五年度勞動(dòng)合同主體變更及培訓(xùn)交接服務(wù)合同
- 2025年度水產(chǎn)養(yǎng)殖水質(zhì)改良與養(yǎng)魚(yú)合同
- 二零二五年度人社部員工勞動(dòng)合同勞動(dòng)合同電子簽名與認(rèn)證合同
- 2025年01月公安部第三研究所公開(kāi)招聘人民警察筆試筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 2025-2030全球鋰電池用隔膜行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年南京鐵道職業(yè)技術(shù)學(xué)院高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 《抖音高活躍群體研究報(bào)告》
- 2025年高考作文備考訓(xùn)練之二元思辨作文題目解析及范文:我與“別人”
- 《中央集成式商用車(chē)電驅(qū)動(dòng)橋總成技術(shù)要求及臺(tái)架試驗(yàn)方法》
- 2024年江西應(yīng)用工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)標(biāo)準(zhǔn)卷
- 第1課 中國(guó)古代政治制度的形成與發(fā)展 課件-歷史統(tǒng)編版(2019)選擇性必修1國(guó)家制度與社會(huì)治理
- 2025年中國(guó)中煤校園招聘筆試參考題庫(kù)含答案解析
- 開(kāi)曼群島公司法2024版中文譯本(含2024年修訂主要內(nèi)容)
- 東北師大附屬中學(xué)2025屆高考數(shù)學(xué)四模試卷含解析
評(píng)論
0/150
提交評(píng)論