SQL Server 實(shí)用教程(第2版)第06章_第1頁(yè)
SQL Server 實(shí)用教程(第2版)第06章_第2頁(yè)
SQL Server 實(shí)用教程(第2版)第06章_第3頁(yè)
SQL Server 實(shí)用教程(第2版)第06章_第4頁(yè)
SQL Server 實(shí)用教程(第2版)第06章_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第6章索引與數(shù)據(jù)完整性6.1索引6.1索引索引是根據(jù)表中一列或若干列按照一定順序建立的列值與記錄行之間的對(duì)應(yīng)關(guān)系表。在數(shù)據(jù)庫(kù)系統(tǒng)中建立索引主要有以下作用:快速存取數(shù)據(jù);保證數(shù)據(jù)記錄的唯一性;實(shí)現(xiàn)表與表之間的參照完整性;在使用ORDERBY、GROUPBY子句進(jìn)行數(shù)據(jù)檢索時(shí),利用索引可以減少排序和分組的時(shí)間。6.1.2索引的創(chuàng)建在XSCJ數(shù)據(jù)庫(kù)中,經(jīng)常要對(duì)XS、KC、XS_KC三個(gè)表查詢和更新,為了提高查詢和更新速度,可以考慮對(duì)三個(gè)表建立如下索引:對(duì)于XS表,按學(xué)號(hào)建立主鍵索引(PRIMARYKEY約束),索引組織方式為聚集索引;對(duì)于XS表,按姓名建立唯一索引(UNIQUE約束),索引組織方式為非聚集索引;對(duì)于KC表,按課程號(hào)建立主鍵索引或者唯一索引,索引組織方式為聚集索引;對(duì)于XS_KC表,按學(xué)號(hào)+課程號(hào)建立唯一索引,索引組織方式為聚集索引。在SQLServer2000中,可利用企業(yè)管理器創(chuàng)建上述索引,也可以利用SQL命令,通過(guò)查詢分析器建立索引。下面以XS表中按學(xué)號(hào)建立索引為例,介紹索引的創(chuàng)建方法。通過(guò)企業(yè)管理器建立索引第1步進(jìn)入企業(yè)管理器,打開XSCJ數(shù)據(jù)庫(kù);6.1.2索引的創(chuàng)建第2步選擇選擇XS表的圖標(biāo),右擊,出現(xiàn)如圖6.1所示的快捷菜單,選擇“設(shè)計(jì)表”菜單項(xiàng),出現(xiàn)如圖6.2所示XS的表設(shè)計(jì)器界面;6.1.2索引的創(chuàng)建第3步在XS表設(shè)計(jì)器界面上右擊,出現(xiàn)如圖6.3所示的快捷菜單,快捷菜單中選擇“索引/鍵”菜單項(xiàng),出現(xiàn)如圖6.4所示XS的屬性界面;6.1.2索引的創(chuàng)建第4步在“索引/鍵”屬性頁(yè)選擇“新建”命令,然后,確定新索引的名稱(用系統(tǒng)缺省的名或重新取名);在“列名”下選擇要?jiǎng)?chuàng)建索引的列,在此選擇“學(xué)號(hào)”這一列,最多可選擇16列。6.1.2索引的創(chuàng)建2.利用SQL命令建立索引語(yǔ)法格式:CREATE[UNIQUE] /*是否為唯一索引*/[CLUSTERED|NONCLUSTERED] /*索引的組織方式*/INDEXindex_name /*索引名稱*/

ON{table|view}(column[ASC|DESC][,...n])/*索引定義的依據(jù)*/[WITH<index_option>[,...n]] /*索引選項(xiàng)*/[ONfilegroup]/*指定索引文件所在的文件組*/

<index_option>::=

{PAD_INDEX|

FILLFACTOR=

fillfactor

|

IGNORE_DUP_KEY|

DROP_EXISTING|

STATISTICS_NORECOMPUTE|

SORT_IN_TEMPDB

}6.1.2索引的創(chuàng)建【例6.1】為KC表的課程名列創(chuàng)建索引。/*使用簡(jiǎn)單索引*/USEXSCJIFEXISTS(SELECTnameFROMsysindexesWHEREname='kc_name_ind')DROPINDEXKC.kc_name_indGOCREATEINDEXkc_name_indONKC(課程名)GO【例6.2】根據(jù)KC表的課程號(hào)列創(chuàng)建唯一聚集索引,因?yàn)橹付薈LUSTERED子句,所以該索引將對(duì)磁盤上的數(shù)據(jù)進(jìn)行物理排序。

/*使用唯一聚集索引*/USEXSCJIFEXISTS(SELECTnameFROMsysindexesWHEREname='kc_id_ind')DROPINDEXKC.kc_id_indGOCREATEUNIQUECLUSTEREDINDEXkc_id_indONKC(課程號(hào))GO6.1.2索引的創(chuàng)建【例6.3】根據(jù)XS_KC表的學(xué)號(hào)列和課程號(hào)列創(chuàng)建復(fù)合索引。/*使用簡(jiǎn)單組合索引*/USEXSCJIFEXISTS(SELECTnameFROMsysindexesWHEREname='xs_kc_ind')DROPINDEXxs_kc_indGOCREATEINDEXxs_kc_indONXS_KC(學(xué)號(hào),課程號(hào))GO【例6.4】根據(jù)XS表中的總學(xué)分列創(chuàng)建索引,例中使用了FILLFACTOR子句。USEXSCJIFEXISTS(SELECTnameFROMsysindexesWHEREname='score_ind')DROPINDEXscore_indGOCREATENONCLUSTEREDINDEXscore_indONXS(總學(xué)分)WITHFILLFACTOR=60GO6.1.2索引的創(chuàng)建【例6.5】根據(jù)XS表中學(xué)號(hào)列創(chuàng)建唯一聚集索引。如果輸入了重復(fù)的鍵,將忽略該INSERT或UPDATE語(yǔ)句。/*使用IGNORE_DUP_KEY*/USEXSCJIFEXISTS(SELECTnameFROMsysindexesWHEREname='xs_ind') DROPINDEXXS.xs_indCREATEUNIQUECLUSTEREDINDEXxs_indONXS(學(xué)號(hào)) WITHIGNORE_DUP_KEY創(chuàng)建索引有如下幾點(diǎn)要說(shuō)明:(1)在計(jì)算列上創(chuàng)建索引(2)在視圖上創(chuàng)建索引(3)權(quán)限 (4)SET選項(xiàng)設(shè)置6.1.2索引的創(chuàng)建【例6.6】創(chuàng)建一個(gè)視圖,并為該視圖創(chuàng)建索引。USEXSCJGO--定義視圖,如下例子中,由于使用了WITHSCHEMABINDING子句,因此,定--義視圖時(shí),SELECT子句中表名必須為:所有者名.表名的形式。CREATEVIEWView1WITHSCHEMABINDINGASSELECT姓名,成績(jī)

FROMdbo.XS,dbo.XS_KCWHEREdbo.XS.學(xué)號(hào)=dbo.XS_KC.學(xué)號(hào)

GO--設(shè)置選項(xiàng)SETNUMERIC_ROUNDABORTOFFSETANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLSON--在視圖上創(chuàng)建索引CREATEUNIQUECLUSTEREDINDEXInx1ONView1(姓名)GO6.1.3索引的刪除1.通過(guò)企業(yè)管理器界面刪除索引第1步進(jìn)入企業(yè)管理器,并與指定的數(shù)據(jù)庫(kù)相連接;第2步為要?jiǎng)h除索引的表打開表設(shè)計(jì)器,在表設(shè)計(jì)器中右擊,然后從快捷菜單中選擇“屬性”命令;第3步選擇“索引/鍵”選項(xiàng)卡,從“選定的索引”列表中選擇要?jiǎng)h除的索引,選擇“刪除”按鈕。2.通過(guò)SQL命令刪除索引語(yǔ)法格式:DROPINDEX'table.index|view.index'[,...n]參數(shù)含義:table|view:索引列所在的表或索引視圖。Index:要?jiǎng)h除的索引名稱。n:表示可以指定多個(gè)要?jiǎng)h除的索引。功能:從當(dāng)前數(shù)據(jù)庫(kù)中刪除一個(gè)或多個(gè)索引?!纠?.7】刪除XSCJ數(shù)據(jù)庫(kù)中表XS的一個(gè)索引名為st_id_ind

的索引。USEXSCJIFEXISTS(SELECTnameFROMsysindexesWHEREname='st_id_ind') DROPINDEXXS.au_id_indGO6.2.1在表中定義及刪除默認(rèn)值約束1.默認(rèn)值約束的定義語(yǔ)法格式:CREATETABLEtable_name /*指定表名*/(column_name

datatypeNOTNULL|NULL[DEFAULTconstraint_expression] /*缺省值約束表達(dá)式*/[,…n])/*定義列名、數(shù)據(jù)類型、標(biāo)識(shí)列、是否空值及定義缺省值約束*/【例6.8】在定義表時(shí)定義一個(gè)字段的默認(rèn)值約束。USEXSCJ CREATETABLEXS( 學(xué)號(hào)char(6)NOTNULL,

姓名char(8)NOTNULL,

專業(yè)名char(10)NULL,

性別bitNOTNULL,

出生時(shí)間smalldatetimeNOTNULL,

總學(xué)分tinyintNULL,

備注textNULL,

入學(xué)日期datetimedefaultgetdate() /*定義默認(rèn)值約束*/ )GO6.2.1在表中定義及刪除默認(rèn)值約束【例6.9】在修改表時(shí)定義一個(gè)字段的默認(rèn)值約束。USEXSCJALTERTABLEXSADDAddDate

smalldatetimeNULLCONSTRAINTAddDateDflt /*默認(rèn)值約束名*/DEFAULTgetdate()WITHVALUES2.默認(rèn)值約束的刪除默認(rèn)值約束可在企業(yè)管理器中刪除?!纠?.10】刪除上例定義的默認(rèn)值約束。USEXSCJALTERTABLEXSDROPCONSTRAINTAddDateDfltGO6.2.2默認(rèn)值對(duì)象的定義、使用與刪除1.通過(guò)企業(yè)管理器定義和綁定DEFAULT默認(rèn)值對(duì)象(1)通過(guò)企業(yè)管理器定義DEFAULT默認(rèn)值對(duì)象第1步進(jìn)入企業(yè)管理器,并連接到XSCJ數(shù)據(jù)庫(kù);展開XSCJ數(shù)據(jù)庫(kù)文件夾,選擇“默認(rèn)”圖標(biāo)右擊,出現(xiàn)快捷菜單,選擇“新建默認(rèn)”,進(jìn)入如圖6.6所示的默認(rèn)屬性定義窗口;6.2.2默認(rèn)值對(duì)象的定義、使用與刪除第2步在窗口中輸入默認(rèn)值對(duì)象名“zxf_default”及默認(rèn)值“0”,選擇“確定”后即定義了一個(gè)默認(rèn)值對(duì)象。

(2)通過(guò)企業(yè)管理器將一個(gè)字段綁定到一個(gè)DEFAULT默認(rèn)值對(duì)象上面已定義了一個(gè)“zxf_default”默認(rèn)值對(duì)象,下面將XS表中的總分字段綁定到該對(duì)象上,步驟如下:第1步在企業(yè)管理器中打開XS表設(shè)計(jì)器;第2步將光標(biāo)移至總學(xué)分字段,從默認(rèn)值對(duì)象下拉表中選擇其對(duì)應(yīng)的默認(rèn)值對(duì)象即可,如圖6.7所示。6.2.2默認(rèn)值對(duì)象的定義、使用與刪除2.通過(guò)SQL語(yǔ)句定義和綁定DEFAULT默認(rèn)值對(duì)象通過(guò)SQL命令定義DEFAULT默認(rèn)值對(duì)象語(yǔ)法格式:CREATEDEFAULTdefaultASconstant_expression

(2)通過(guò)系統(tǒng)存儲(chǔ)過(guò)程綁定DEFAULT默認(rèn)值對(duì)象語(yǔ)法格式:sp_bindefault[@defname=]'default',[@objname=]'object_name'[,[@futureonly=]'futureonly_flag'](3)應(yīng)用舉例6.2.2默認(rèn)值對(duì)象的定義、使用與刪除【例6.12】首先在XSCJ數(shù)據(jù)庫(kù)中定義表book及名為today的默認(rèn)值,然后將其綁定到book表的hiredate列。--定義表CREATETABLEbook(

book_idchar(6) namevarchar(20)NOTNULL,

hire_date

datetimeNOTNULL)GO--創(chuàng)建默認(rèn)值對(duì)象CREATEDEFAULTtodayASgetdate()GO--綁定默認(rèn)值對(duì)象USEbookEXECsp_bindefault'today','book.[hire_date]'6.2.2默認(rèn)值對(duì)象的定義、使用與刪除【例6.11】對(duì)于如前所述的XSCJ數(shù)據(jù)庫(kù)中XS表的總學(xué)分字段,可用如下程序段實(shí)現(xiàn)初始值設(shè)置為0。CREATEDEFAULTzxf_defaultAS0/*定義語(yǔ)句應(yīng)為第一條件語(yǔ)句或緊跟在GO之后*/USEXSCJEXECsp_bindefault‘zxf_default’,’XS.總學(xué)分’GO【例6.13】在XSCJ數(shù)據(jù)庫(kù)中定義名為birthday_date

的數(shù)據(jù)類型,定義默認(rèn)值對(duì)象day并將其綁定到用戶定義的數(shù)據(jù)類型birthday_date

中。

--定義數(shù)據(jù)類型birthday_date USEXSCJ EXECsp_addtype

birthday_date,'datetime','NULL'Go--定義day缺省值對(duì)象CREATEDEFAULTdayAS‘1960,00,00’--將缺省值對(duì)象day綁定到birthday_date數(shù)據(jù)類型USEXSCJEXECsp_bindefault'day','birthday_date'6.2.2默認(rèn)值對(duì)象的定義、使用與刪除3)默認(rèn)值對(duì)象的刪除(1)利用sp_unbindefault解除綁定關(guān)系語(yǔ)法格式:sp_unbindefault[@objname=]'object_name'[,[@futureonly=]'futureonly_flag'](2)刪除默認(rèn)值對(duì)象語(yǔ)法格式:DROPDEFAULT{default}[,...n]【例6.14】解除默認(rèn)值對(duì)象day與XSCJ庫(kù)中用戶定義類型birthday_date的綁定關(guān)系,然后刪除名為day的默認(rèn)值對(duì)象。USEXSCJIFEXISTS(SELECTnameFROMsysobjects

WHEREname='day'ANDtype='D')BEGIN EXECsp_unbindefault'birthday_date' DROPDEFAULTdayENDGO6.3.1數(shù)據(jù)完整性的分類1.域完整性域完整性又稱為列完整性,指給定列輸入的有效性?!纠?.15】定義表KC的同時(shí)定義學(xué)分的約束條件。USEXSCJCREATETABLEKC( 課程號(hào)char(6)NOTNULL,

課程名char(8)NOTNULL,

學(xué)分tinyintCHECK(學(xué)分>=0AND學(xué)分<=10)NUL/*通過(guò)CHECK子句定義約束條件*/

備注textNULL)GO2.實(shí)體完整性實(shí)體完整性又稱為行的完整性,要求表中有一個(gè)主鍵,其值不能為空且能唯一地標(biāo)識(shí)對(duì)應(yīng)的記錄。3.參照完整性參照完整性又稱為引用完整性。6.3.1數(shù)據(jù)完整性的分類XS和XS_KC表的對(duì)應(yīng)關(guān)系如表6.2、6.3所示。(1)從表不能引用不存在的鍵值。如果主表中的鍵值更改了,那么在整個(gè)數(shù)據(jù)庫(kù)中,對(duì)從表中鍵值的所有引用要進(jìn)行一致的更改。如果主表中沒(méi)有關(guān)聯(lián)的記錄,則不能將記錄添加到從表。6.3.2域完整性的實(shí)現(xiàn)1.CHECK約束的定義與刪除對(duì)于TimeStamp和Identity兩種類型字段不能定義CHECK約束。

(1)通過(guò)企業(yè)管理器創(chuàng)建與刪除CHECK約束第1步在XS_KC表設(shè)計(jì)器界面右擊鼠標(biāo),出現(xiàn)如圖6.8所示的快捷菜單;6.3.2域完整性的實(shí)現(xiàn)第2步選擇CHECK約束菜單項(xiàng)進(jìn)入如圖6.9所示的CHECK選項(xiàng)卡屬性窗口;第3步選擇“新建”,進(jìn)入CHECK約束的輸入窗口,輸入約束表達(dá)式“成績(jī)>=0and成績(jī)<=100”,如圖6.10所示,選擇“關(guān)閉”。6.3.2域完整性的實(shí)現(xiàn)(2)利用SQL語(yǔ)句在創(chuàng)建表時(shí)創(chuàng)建CHECK約束語(yǔ)法格式:CREATETABLEtable_name /*指定表名*/(column_name

datatypeNOTNULL|NULL[DEFAULTconstraint_expression] /*缺省值約束表達(dá)式*/[[check_name]CHECK

(logical_expression)]/*CHECK約束表達(dá)式*/ [,…n])/*定義列名、數(shù)據(jù)類型、標(biāo)識(shí)列、是否空值及定義缺省值約束、CHECK約束*/【例6.16】在XSCJ數(shù)據(jù)庫(kù)中創(chuàng)建表books,其中包含所有的約束定義。USEXSCJCREATETABLEbooks(

book_id

smallint, /*書號(hào)*/

book_namevarchar(50)NOTNULL/*書名*/book_descvarchar(50)NOTNULL /*書的簡(jiǎn)要說(shuō)明*/ DEFAULT'Newbook-',

max_lvl

tinyintNOTNULLCHECK(max_lvl<=250) /*書允許的最高價(jià)CHECK約束*/)6.3.2域完整性的實(shí)現(xiàn)

(3)利用SQL語(yǔ)句在修改表時(shí)創(chuàng)建CHECK約束

語(yǔ)法格式:ALTERTABLEtable_name

ADDCONSTRAINTcheck_nameCHECK

(logical_expression)【例6.17】通過(guò)修改XSCJ數(shù)據(jù)庫(kù)的XS_KC表,增加成績(jī)字段的CHECK約束。USEXSCJALTERTABLEXS_KCADDCONSTRAINTcj_constraintCHECK

(成績(jī)>=0and成績(jī)<=100)(4)利用SQL語(yǔ)句刪除CHECK約束CHECK約束的刪除可在企業(yè)管理器中通過(guò)界面刪除。語(yǔ)法格式:ALTERTABLEtable_name

DROPCONSTRAINTcheck_name

【例6.18】刪除XSCJ數(shù)據(jù)庫(kù)中XS_KC表成績(jī)字段的CHECK約束。USEXSCJALTERTABLEXS_KCDROPCONSTRAINTcj_constraint

GO6.3.2域完整性的實(shí)現(xiàn)2.規(guī)則對(duì)象的定義、使用與刪除規(guī)則對(duì)象的使用方法與缺省值對(duì)象的使用步驟類似:(1)定義規(guī)則對(duì)象;(2)將規(guī)則對(duì)象綁定到列或用戶自定義類型;規(guī)則對(duì)象的定義可利用企業(yè)管理器,通過(guò)界面定義,也可以利用查詢分析器,通過(guò)執(zhí)行SQL語(yǔ)句定義。1)利用企業(yè)管理器定義規(guī)則對(duì)象并綁定到自定義類型或列第1步進(jìn)入企業(yè)管理器,展開控制臺(tái)目錄樹中的XSCJ數(shù)據(jù)庫(kù)圖標(biāo),選中“規(guī)則”圖標(biāo)右擊,出現(xiàn)如圖6.11所示的快捷菜單;6.3.2域完整性的實(shí)現(xiàn)第2步選擇“新建規(guī)則”,進(jìn)入規(guī)則創(chuàng)建窗口,如圖6.12所示,在窗口中輸入規(guī)則名及規(guī)則表達(dá)式,本例的規(guī)則名為kc_rule,規(guī)則表達(dá)式為:@numlike‘[1-5][0-9][0-9]’,其中@num為任意輸入的局部變量,但必須以@開頭。第3步選擇“確定”按鈕,則新建規(guī)則創(chuàng)建成功,出現(xiàn)如圖6.13的圖標(biāo)。6.3.2域完整性的實(shí)現(xiàn)第4步在規(guī)則圖標(biāo)下選中剛定義的規(guī)則對(duì)象kc_rule對(duì)象雙擊,出現(xiàn)如圖6.13所示的規(guī)則屬性界面;第5步在規(guī)則屬性窗口中有兩個(gè)按鈕:一個(gè)是“綁定UDT”,即綁定到用戶自定義類型;另一個(gè)按鈕是“綁定列”,對(duì)于本例選中“綁定列”,進(jìn)入如圖6.14所示將規(guī)則對(duì)象綁定到列的界面;6.3.2域完整性的實(shí)現(xiàn)第6步選擇表[dbo].[kc],在未綁定規(guī)則字段中選擇“課程號(hào)”字段并添加到“綁定列”,如圖所示,然后選擇確定。2)利用SQL命令定義規(guī)則對(duì)象并綁定到自定義類型或列(1)規(guī)則對(duì)象的定義語(yǔ)法格式:CREATERULErule

AScondition_expression6.3.2域完整性的實(shí)現(xiàn)另外有如下幾點(diǎn)需說(shuō)明:創(chuàng)建的規(guī)則對(duì)先前已存在于數(shù)據(jù)庫(kù)中的數(shù)據(jù)無(wú)效。單個(gè)批處理中,CREATERULE語(yǔ)句不能與其它T-SQL語(yǔ)句組合使用。規(guī)則表達(dá)式的類型必須與列的數(shù)據(jù)類型兼容,不能將規(guī)則綁定到text、image或timestamp

列。對(duì)于用戶定義數(shù)據(jù)類型,當(dāng)在該類型的數(shù)據(jù)列中插入值,或更新該類型的數(shù)據(jù)列時(shí),綁定到該類型的規(guī)則才會(huì)激活。如果列同時(shí)有默認(rèn)值和規(guī)則與之關(guān)聯(lián),則默認(rèn)值必須滿足規(guī)則的定義,與規(guī)則沖突的默認(rèn)值不能插入列。(2)將規(guī)則對(duì)象綁定到自定義類型或列語(yǔ)法格式:sp_bindrule[@rulename=]'rule',[@objname=]'object_name'[,[@futureonly=]'futureonly_flag'](3)應(yīng)用舉例6.3.2域完整性的實(shí)現(xiàn)【例6.19】如下程序創(chuàng)建一個(gè)規(guī)則,并綁定到表KC的課程號(hào)列,用于限制課程號(hào)的輸入范圍。

USEXSCJCREATERULEkc_ruleAS@rangelike‘[1-5][0-9][0-9]’GOUSEXSCJEXECsp_bindrule'kc_rule','KC.課程號(hào)'GO【例6.20】創(chuàng)建一個(gè)規(guī)則,用以限制輸入到該規(guī)則所綁定的列中的值只能是該規(guī)則中列出的值。USEXSCJCREATERULElist_ruleAS@listIN('C語(yǔ)言','離散數(shù)學(xué)','微機(jī)原理')GOGOUSEXSCJEXECsp_bindrule'list_rule','KC.課程名'GO6.3.2域完整性的實(shí)現(xiàn)

【例6.21】如下程序定義一個(gè)用戶數(shù)據(jù)類型course_num,然后將前面定義的規(guī)則“kc_rule”綁定到用戶數(shù)據(jù)類型course_num上,最后定義表KC,其課程號(hào)的數(shù)據(jù)類型為course_num。USEXSCJ/*打開數(shù)據(jù)庫(kù)*/EXECsp_addtype‘course_num’,’char(3)’,’notnull’/*調(diào)用存儲(chǔ)過(guò)程*/EXECsp_bindrule'kc_rule','course_num'GOCREATETABLEKC1(課程號(hào)course_num /*將學(xué)號(hào)定義為student_num類型*/

課程名char(16)NOTNULL,

開課學(xué)期tinyint,

學(xué)時(shí)tinyint,

學(xué)分tinyint)GO(4)規(guī)則對(duì)象的刪除sp_unbindrule[@objname=]'object_name'[,[@futureonly=]'futureonly_flag']6.3.2域完整性的實(shí)現(xiàn)【例6.22】解除課程號(hào)列與kc_rule之間的綁定關(guān)系,并刪除規(guī)則對(duì)象kc_rule。USEXSCJIFEXISTS(SELECTnameFROMsysobjectsWHEREname='kc_rule'ANDtype='R')BEGINEXECsp_unbindrule'KC.課程號(hào)'DROPRULEkc_ruleENDGO【例6.23】解除自定義類型course_num與kc_rule之間的綁定關(guān)系,并刪除規(guī)則對(duì)象kc_rule。USEXSCJIFEXISTS(SELECTnameFROMsysobjectsWHEREname='kc_rule'ANDtype='R')BEGINEXECsp_unbindrule'course_num'DROPRULEkc_ruleENDGO6.3.3實(shí)體完整性的實(shí)現(xiàn)PRIMARYKEY約束與UNIQUE約束的主要區(qū)別如下:(1)一個(gè)數(shù)據(jù)表只能創(chuàng)建一個(gè)PRIMARYKEY約束,但一個(gè)表中可根據(jù)需要對(duì)不同的列創(chuàng)建若干個(gè)UNIQUE約束;(2)PRIMARYKEY字段的值不允許為NULL,而UNIQUE字段的值可取NULL;(3)一般創(chuàng)建PRIMARYKEY約束時(shí),系統(tǒng)會(huì)自動(dòng)產(chǎn)生索引,索引的缺省類型為簇索引。PRIMARYKEY約束與UNIQUE約束的相同點(diǎn)在于:二者均不允許表中對(duì)應(yīng)字段存在重復(fù)值。利用企業(yè)管理器創(chuàng)建和刪除PRIMARYKEY約束(1)利用企業(yè)管理器創(chuàng)建PRIMARYKEY約束如果要對(duì)XS表按學(xué)號(hào)建立PRIMARYKEY約束,應(yīng)如何操作呢?可以按下列步驟進(jìn)行:6.3.3實(shí)體完整性的實(shí)現(xiàn)第1步選擇XS表圖標(biāo),右擊,打開XS表的表設(shè)計(jì)器,進(jìn)入如圖6.16所示的表設(shè)計(jì)器界面。第2步選中“學(xué)號(hào)”對(duì)應(yīng)的這一行,選擇主鍵圖標(biāo),這樣在“學(xué)號(hào)”對(duì)應(yīng)的這一行前面,將出現(xiàn)一主鍵圖標(biāo)。6.3.3實(shí)體完整性的實(shí)現(xiàn)(2)利用企業(yè)管理器刪除PRIMARYKEY約束如果要?jiǎng)h除對(duì)表XS中對(duì)學(xué)號(hào)字段建立的PRIMARYKEY約束,按如下步驟進(jìn)行:第1步選擇XS表圖標(biāo),右擊,打開XS表設(shè)計(jì)器,進(jìn)入如圖6.17所示的表設(shè)計(jì)器界面。第2步選中XS表設(shè)計(jì)器中主鍵對(duì)應(yīng)的行,選擇工具欄的“設(shè)置主鍵圖標(biāo)”,則取消了原來(lái)定義的主鍵。2.利用企業(yè)管理器創(chuàng)建和刪除UNIQUE約束(1)利用企業(yè)管理器創(chuàng)建UNIQUE約束如果要對(duì)XS表中的“身份證號(hào)碼”列創(chuàng)建UNIQUE約束,以保證該列取值的唯一性,可按以下步驟進(jìn)行:第1步選擇XS表圖標(biāo),右擊,打開XS表設(shè)計(jì)器,在表設(shè)計(jì)器中右擊,出現(xiàn)如圖6.18所示的快捷菜單。第2步選擇“屬性”菜單項(xiàng),出現(xiàn)屬性界面,在此界面中選擇“索引/鍵”選項(xiàng)卡,如圖6.19所示。6.3.3實(shí)體完整性的實(shí)現(xiàn)第3步在圖6.19的屬性界面中選擇“新建”,輸入新建索引的名字或使用系統(tǒng)缺省名,在“列名”下拉表中選擇“身份證號(hào)碼”,并設(shè)置索引順序,將“創(chuàng)建UNIQUE約束”單選按鈕設(shè)置為選中狀態(tài),如圖6.20所示。6.3.3實(shí)體完整性的實(shí)現(xiàn)第3步選擇“關(guān)閉”按鈕。(2)利用企業(yè)管理器刪除UNIQUE約束進(jìn)入如圖6.20所示的屬性窗口,在“選定的索引”下拉框中選擇要?jiǎng)h除的UNIQUE約束的索引名,再點(diǎn)擊“刪除”按鈕即刪除了指定的UNIQUE約束。6.3.3實(shí)體完整性的實(shí)現(xiàn)3.利用SQL命令創(chuàng)建及刪除PRIMARYKEY約束或UNIQUE約束(1)創(chuàng)建表的同時(shí)創(chuàng)建PRIMARYKEY約束或UNIQUE約束語(yǔ)法格式:CREATETABLEtable_name /*指定表名*/(column_name

datatype /*定義字段*/[CONSTRAINTconstraint_name] /*約束名*/

NOTNULLPRIMARYKEY|UNIQUE /*定義約束類型*/[CLUSTERED|NONCLUSTERED] /*定義約束的索引類型*/ [,

…n]

) /*n表示可定義多個(gè)字段*/(2)通過(guò)修改表創(chuàng)建PRIMARYKEY約束或UNIQUE約束創(chuàng)建PRIMARYKEY約束語(yǔ)法格式:ALTERTABLEtable_name

ADD

[CONSTRAINTconstraint_name]

PRIMARYKEYCLUSTERED|NONCLUSTERED(column[,...n])6.3.3實(shí)體完整性的實(shí)現(xiàn)【例6.24】對(duì)XSCJ數(shù)據(jù)庫(kù)中XS表的學(xué)號(hào)字段創(chuàng)建PRIMARYKEY約束,對(duì)身份證號(hào)碼字段定義UNIQUE約束。USEXSCJCREATETABLEXS(學(xué)號(hào)char(6)NOTNULLCONSTRAINTXH_PKPRIMARYKEY,

姓名char(8)NOTNULL,

身份證號(hào)碼char(20)CONSTRAINTSH_UKUNIQUE,

專業(yè)名char(10)NULL,

性別bitNOTNULL,

出生時(shí)間smalldatetimeNOTNULL,

總學(xué)分tinyintNULL,

備注textNULL,

入學(xué)日期datetimeCONSTRAINTdatedfltdefaultgetdate() /*定義默認(rèn)值約束*/)6.3.3實(shí)體完整性的實(shí)現(xiàn)【例6.25】先在XSCJ數(shù)據(jù)庫(kù)中創(chuàng)建表XS,然后通過(guò)修改表,對(duì)學(xué)號(hào)字段創(chuàng)建PRIMARYKEY約束,對(duì)身份證號(hào)碼字段定義UNIQUE約束。

USEXSCJCREATETABLEXS( 學(xué)號(hào)char(6)NOTNULL,

姓名char(8)NOTNULL,

身份證號(hào)碼char(20),

專業(yè)名char(10)NULL,

性別bitNOTNULL,

出生時(shí)間smalldatetimeNOTNULL,

總學(xué)分tinyintNULL,

備注textNULL,

入學(xué)日期datetimeCONSTRAINTdatedfltdefaultgetdate() /*定義默認(rèn)值約束*/)GOALTERTABLEXSADD

CONSTRAINTXS_PKPRIMARYKEYCLUSTERED(學(xué)號(hào))GOALTERTABLEXSADD

CONSTRAINTXS_UK

UNIQUENONCLUSTEREDGO6.3.3實(shí)體完整性的實(shí)現(xiàn)(3)刪除PRIMARYKEY約束或UNIQUE約束語(yǔ)法格式:ALTERTABLEtable_name

DROPCONSTRAINTconstraint_name[,…n]【例6.26】刪除前面例中創(chuàng)建的PRIMARYKEY約束和UNIQUE約束。ALTERTABLEXSDROP

CONSTRAINTXS_PK,XS_UKGO6.3.4參照完整性的實(shí)現(xiàn)1.利用企業(yè)管理器定義表間的參照關(guān)系例如:要建立XS表與XS_KC表之間的參照完整性,操作步驟如下:第1步按照前面所介紹的方法定義主表的主碼(或唯一碼)。在此,定義XS表中的學(xué)號(hào)字段為主碼。第2步選擇企業(yè)管理器目錄樹中XSCJ數(shù)據(jù)庫(kù)目錄下的“關(guān)系圖”圖標(biāo)右擊,出現(xiàn)如圖6.21所示的快捷菜單。第3步選擇菜單項(xiàng)“新建數(shù)據(jù)庫(kù)關(guān)系圖”,進(jìn)入如圖6.22所示的歡迎界面。6.3.4參照完整性的實(shí)現(xiàn)第4步選擇歡迎界面中的“下一步”按鈕,進(jìn)入如圖6.23所示“創(chuàng)建關(guān)系圖向?qū)А钡慕缑妫瑥目捎帽碇羞x擇要添加到關(guān)系圖中的表,本例中選擇了XS表和XS_KC表。第5步點(diǎn)擊“下一步”按鈕,并按提示進(jìn)行后繼操作,進(jìn)入如圖6.24所示的關(guān)系圖界面。6.3.4參照完整性的實(shí)現(xiàn)第6步在關(guān)系圖上,將鼠標(biāo)指向主表的主鍵并拖動(dòng)到從表。對(duì)于本例:將XS表中的學(xué)號(hào)字段拖動(dòng)到從表XS_KC,出現(xiàn)如圖6.25所示的關(guān)系設(shè)置界面。第7步退出圖6.26的關(guān)系圖界

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論