索引與數(shù)據(jù)完整性_第1頁
索引與數(shù)據(jù)完整性_第2頁
索引與數(shù)據(jù)完整性_第3頁
索引與數(shù)據(jù)完整性_第4頁
索引與數(shù)據(jù)完整性_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第5章 索引與數(shù)據(jù)完整性分配學(xué)時(shí):4+4教學(xué)目的及要求:掌握約束的創(chuàng)建和刪除方法,掌握默認(rèn)對(duì)象,規(guī)則對(duì)象的創(chuàng)建和刪除方法。重點(diǎn)和難點(diǎn):掌握用存儲(chǔ)過程綁定和解除默認(rèn)對(duì)象和規(guī)則對(duì)象的操作方法。教學(xué)進(jìn)程:5.1 索引5.2 默認(rèn)值約束及默認(rèn)值對(duì)象5.3數(shù)據(jù)完整性5.1 索引索引是根據(jù)表中一列或若干列按照一定順序建立的列值與記錄行之間的對(duì)應(yīng)關(guān)系表。在數(shù)據(jù)庫系統(tǒng)中建立索引主要有以下作用: 快速存取數(shù)據(jù); 保證數(shù)據(jù)記錄的唯一性; 實(shí)現(xiàn)表與表之間的參照完整性; 在使用ORDER BY、GROUP BY子句進(jìn)行數(shù)據(jù)檢索時(shí),利用索引可以減少排序和分組的時(shí)間。 索引的分類1聚集索引聚集索引將數(shù)據(jù)行的鍵值在表內(nèi)排序

2、并存儲(chǔ)對(duì)應(yīng)的數(shù)據(jù)記錄,使得數(shù)據(jù)表物理順序與索引順序一致。SQL Server 2000是按B樹組織聚集索引的,B樹的葉節(jié)點(diǎn)存放數(shù)據(jù)頁信息。由于數(shù)據(jù)記錄按聚集索引鍵的次序存儲(chǔ),因此聚集索引對(duì)查找記錄很有效。一個(gè)表只能有一個(gè)聚集索引。2非聚集索引非聚集索引完全獨(dú)立于數(shù)據(jù)行的結(jié)構(gòu)。SQL Server 2000也是按B樹組織非聚集索引的,與聚集索引不同之處在于:非聚集索引B樹的葉節(jié)點(diǎn)不存放數(shù)據(jù)頁信息,而是存放非聚集索引的鍵值,并且每個(gè)鍵值項(xiàng)都有指針指向包含該鍵值的數(shù)據(jù)行。對(duì)于非聚集索引,表中的數(shù)據(jù)行不按非聚集鍵的次序存儲(chǔ)。在非聚集索引內(nèi),從索引行指向數(shù)據(jù)行的指針稱為行定位器。行定位器的結(jié)構(gòu)取決于數(shù)據(jù)

3、頁的存儲(chǔ)方式是堆集還是聚集。對(duì)于堆集,行定位器是指向行的指針。對(duì)于有聚集索引的表,行定位器是聚集索引鍵,只有在表上創(chuàng)建聚集索引時(shí),表內(nèi)的行才按特定順序存儲(chǔ)。這些行按聚集索引鍵順序存儲(chǔ)。如果一個(gè)表只有非聚集索引,它的數(shù)據(jù)行將按無序的堆集方式存儲(chǔ)。一個(gè)表中最多只能有一個(gè)聚集索引,但可有一個(gè)或多個(gè)非聚集索引。當(dāng)在 SQL Server 2000 上創(chuàng)建索引時(shí),可指定是按升序還是降序存儲(chǔ)鍵。 索引的創(chuàng)建 對(duì)于XS表,按學(xué)號(hào)建立主鍵索引(PRIMARY KEY約束),索引組織方式為聚集索引; 對(duì)于XS表,按姓名建立唯一索引(UNIQUE約束),索引組織方式為非聚集索引; 對(duì)于KC表,按課程號(hào)建立主鍵索引

4、或者唯一索引,索引組織方式為聚集索引; 對(duì)于XS_KC表,按學(xué)號(hào)+課程號(hào)建立唯一索引,索引組織方式為聚集索引。在SQL Server 2000中,可利用企業(yè)管理器創(chuàng)建上述索引,也可以利用SQL命令,通過查詢分析器建立索引。下面以XS表中按學(xué)號(hào)建立索引為例,介紹索引的創(chuàng)建方法。1. 通過企業(yè)管理器建立索引第1步 進(jìn)入企業(yè)管理器,打開XSCJ數(shù)據(jù)庫;第2步 選擇選擇XS表的圖標(biāo),右擊,出現(xiàn)如圖5.1所示的快捷菜單,選擇“設(shè)計(jì)表”菜單項(xiàng),出現(xiàn)如圖5.2所示XS的表設(shè)計(jì)器界面;在XSCJ數(shù)據(jù)庫中,經(jīng)常要對(duì)XS、KC、XS_KC三個(gè)表查詢和更新,為了提高查詢和更新速度,可以考慮對(duì)三個(gè)表建立如下索引: 索

5、引的創(chuàng)建圖5.1 XS表圖標(biāo)快捷菜單 索引的創(chuàng)建圖5.2 XS表設(shè)計(jì)器界面 索引的創(chuàng)建第3步 在XS表設(shè)計(jì)器界面上右擊, 出現(xiàn)如圖5.3所示的快捷菜單,快捷菜單中選擇“索引/鍵”菜單項(xiàng),出現(xiàn)如圖5.4所示XS的屬性界面;圖5.3 XS表設(shè)計(jì)器的快捷菜單 索引的創(chuàng)建圖5.4 表XS的屬性界面 索引的創(chuàng)建第4步 在“索引鍵”屬性頁選擇“新建”命令,然后,確定新索引的名稱(用系統(tǒng)缺省的名或重新取名);在“列名”下選擇要?jiǎng)?chuàng)建索引的列,在此選擇“學(xué)號(hào)”這一列,最多可選擇16 列。為獲得最佳性能,最好只選擇一列或兩列。然后關(guān)閉,索引即創(chuàng)建好了。進(jìn)入XS表設(shè)計(jì)器的快捷菜單(在XS表設(shè)計(jì)器界面上右擊),選擇“

6、索引鍵”菜單項(xiàng),可以查看已建立的索引。對(duì)于前面建立的索引,如圖5.5所示。此下拉表中列出了表XS創(chuàng)建的所有索引圖5.5 表XS的屬性界面 索引的創(chuàng)建2利用SQL命令建立索引語法格式:CREATE UNIQUE /*是否為唯一索引*/ CLUSTERED | NONCLUSTERED /*索引的組織方式*/INDEX index_name /*索引名稱*/?ON table | view ( column ASC | DESC ,.n ) /*索引定義的依據(jù)*/ WITH < index_option > ,.n /*索引選項(xiàng)*/ ON filegroup /*指定索引文件所在的文件

7、組*/其中:< index_option > := PAD_INDEX|?FILLFACTOR = fillfactor|?IGNORE_DUP_KEY|?DROP_EXISTING|?STATISTICS_NORECOMPUTE|?SORT_IN_TEMPDB? 索引的創(chuàng)建說明: UNIQUE表示為表或視圖創(chuàng)建唯一索引(即不允許存在索引值相同的兩行)。例如:對(duì)于XS表,根據(jù)學(xué)號(hào)創(chuàng)建唯一索引,即不允許有兩個(gè)相同的學(xué)號(hào)出現(xiàn)。此關(guān)鍵字的使用有兩點(diǎn)需注意:(1) 對(duì)于視圖創(chuàng)建的聚集索引必須是 UNIQUE 索引。(2) 如果對(duì)已存在數(shù)據(jù)的表創(chuàng)建唯一索引,必須保證索引項(xiàng)對(duì)應(yīng)的值無重復(fù)值。

8、CLUSTERED、 NONCLUSTERED用于指定創(chuàng)建聚集索引還是非聚集索引,前者表 示創(chuàng)建聚集索引,后者表示創(chuàng)建非聚集索引。一個(gè)表或視圖只允許有一個(gè)聚集索引,并 且必須先為表或視圖創(chuàng)建唯一聚集索引,然后才能創(chuàng)建非聚集索引。 index_name為索引名,索引名在表或視圖中必須唯一,但在數(shù)據(jù)庫中不必唯一;參數(shù)table、view用于指定包含索引字段的表名或視圖名,指定表名、視圖名時(shí),可包含數(shù) 據(jù)庫和表所有者。注意,必須使用 SCHEMABINDING 定義視圖才能在視圖上創(chuàng)建索引。 column用于指定建立索引的字段,參數(shù)n表示可以為索引指定多個(gè)字段。指定索引字段時(shí),要注意如下兩點(diǎn):(1)

9、 表或視圖索引字段的類型不能為:ntext、text 或 image。(2) 通過指定多個(gè)索引字段可創(chuàng)建組合索引,但組合索引的所有字段必須取自于同一表。 索引的創(chuàng)建 ASC表示索引文件按升序建立,DESC表示索引文件按降序建立,默認(rèn)設(shè)置為 ASC。 PAD_INDEX用于指定索引中間級(jí)中每個(gè)頁(節(jié)點(diǎn))保持開放的空間,此關(guān)鍵字必須與 FILLFACTOR 子句同時(shí)用。FILLFACTOR子句通過參數(shù) fillfactor指定在SQL Server創(chuàng)建索引的過程中,各索引頁葉級(jí)的填滿程度。 IGNORE_DUP_KEY用于確定對(duì)唯一聚集索引字段插入重復(fù)鍵值時(shí)的處理方式,如果為索引指定了IGNORE

10、_DUP_KEY,插入重復(fù)值時(shí),SQL Server將發(fā)出警告消息并取消重復(fù)行的插入操作;如果沒有為索引指定 IGNORE_DUP_KEY,SQL Server會(huì)發(fā)出一條警告消息,并回滾整個(gè) INSERT 語句。 DROP_EXISTING指定刪除除已存在的同名聚集索引或非聚集索引。 ON filegroup子句指定索引文件所在的文件組,filegroup 為文件組名?!纠?.1】為KC 表的課程名列創(chuàng)建索引。/*使用簡單索引*/USE XSCJIF EXISTS (SELECT name FROM sysindexes WHERE name = ' kc_name_ind '

11、)DROP INDEX KC. kc_name_indGOCREATE INDEX kc_name_ind ON KC (課程名)GO 索引的創(chuàng)建其中IF語句是判斷是否存在名字為kc_name_ind的索引名,如果已經(jīng)存在,需要先刪除該索引,然后創(chuàng)建索引。為了表述簡單,后面相關(guān)內(nèi)容將省略IF判斷語句?!纠?.2】根據(jù)KC表的課程號(hào)列創(chuàng)建唯一聚集索引,因?yàn)橹付?CLUSTERED 子句,所 以該索引將對(duì)磁盤上的數(shù)據(jù)進(jìn)行物理排序。/*使用唯一聚集索引*/USE XSCJCREATE UNIQUE CLUSTERED INDEX kc_id_ind ON KC (課程號(hào))GO注意:在表設(shè)計(jì)時(shí),把課

12、程號(hào)設(shè)為主鍵時(shí),系統(tǒng)默認(rèn)為表創(chuàng)建了聚集索引。表只能創(chuàng)建一個(gè)聚集索引,此時(shí)執(zhí)行此語句可能會(huì)出錯(cuò),可以先去除課程號(hào)這個(gè)主鍵,然后執(zhí)行語句。下面例子若有相同情況,可參考本例子?!纠?.3】根據(jù)XS_KC表的學(xué)號(hào)列和課程號(hào)列創(chuàng)建復(fù)合索引。/*使用簡單組合索引*/USE XSCJCREATE INDEX xs_kc_ind ON XS_KC (學(xué)號(hào), 課程號(hào))GO【例5.4】根據(jù)XS表中的總學(xué)分列創(chuàng)建索引,例中使用了FILLFACTOR 子句。USE XSCJCREATE NONCLUSTERED INDEX score_ind ON XS (總學(xué)分)WITH FILLFACTOR = 60GO 索引的

13、創(chuàng)建【例5.5】根據(jù)XS表中學(xué)號(hào)列創(chuàng)建唯一聚集索引。如果輸入了重復(fù)的鍵,將忽略該 INSERT或UPDATE語句。/*使用 IGNORE_DUP_KEY */USE XSCJCREATE UNIQUE CLUSTERED INDEX xs_ind ON XS(學(xué)號(hào))WITH IGNORE_DUP_KEY創(chuàng)建索引有如下幾點(diǎn)要說明:(1)在計(jì)算列上創(chuàng)建索引對(duì)于UNIQUE 或 PRIMARY KEY 索引,只要滿足索引條件,就可以包含計(jì)算列,但計(jì)算列必須具有確定性、必須精確,且不能包含 text、ntext 或 image 列。(2)在視圖上創(chuàng)建索引可以在視圖上定義索引。索引視圖是一種在數(shù)據(jù)庫中存

14、儲(chǔ)視圖結(jié)果集的方法,可減少動(dòng)態(tài)生成結(jié)果集的開銷。索引視圖還能自動(dòng)反映出創(chuàng)建索引后對(duì)基表數(shù)據(jù)所做的修改。 索引的創(chuàng)建【例5.6】 創(chuàng)建一個(gè)視圖,并為該視圖創(chuàng)建索引。USE XSCJGO-定義視圖,如下例子中,由于使用了WITH SCHEMABINDING子句,因此,定-義視圖時(shí),SELECT子句中表名必須為:所有者名.表名 的形式。CREATE VIEW View1 WITH SCHEMABINDINGASSELECT 姓名,成績FROM dbo.XS,dbo.XS_KCGO-設(shè)置選項(xiàng)SET NUMERIC_ROUNDABORT OFFSET ANSI_PADDING,ANSI_WARNINGS

15、,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS ON-在視圖上創(chuàng)建索引CREATE UNIQUE CLUSTERED INDEX Inx1 ON View1(姓名)GO 索引的創(chuàng)建(3)權(quán)限CREATE INDEX 的權(quán)限默認(rèn)授予給 sysadmin 固定服務(wù)器角色、db_ddladmin 和 db_owner 固定數(shù)據(jù)庫角色和表所有者,且不能轉(zhuǎn)讓。(4)SET選項(xiàng)設(shè)置使用索引視圖或計(jì)算列上的索引時(shí),必須對(duì)如下七個(gè)選項(xiàng)設(shè)置:下列六個(gè)SET選項(xiàng)必須設(shè)置為 ON:ANSI_NULLSANSI_PADDINGANSI_

16、WARNINGSARITHABORTCONCAT_NULL_YIELDS_NULLQUOTED_IDENTIFIER必須將選項(xiàng) NUMERIC_ROUNDABORT 設(shè)置為 OFF。 索引的刪除索引的刪除既可通過企業(yè)管理器界面刪除也可通過執(zhí)行SQL命令刪除。1通過企業(yè)管理器界面刪除索引第1步 進(jìn)入企業(yè)管理器,并與指定的數(shù)據(jù)庫相連接;第2步 為要?jiǎng)h除索引的表打開表設(shè)計(jì)器,在表設(shè)計(jì)器中右擊,然后從快捷菜單中選擇“屬性”命令;第3步 選擇“索引/鍵”選項(xiàng)卡,從“選定的索引”列表中選擇要?jiǎng)h除的索引,選擇“刪除”按鈕。 索引的創(chuàng)建2通過SQL命令刪除索引語法格式:DROP INDEX 'tabl

17、e.index | view.index' ,.n 參數(shù)含義:table | view:索引列所在的表或索引視圖。Index:要?jiǎng)h除的索引名稱。n:表示可以指定多個(gè)要?jiǎng)h除的索引。功能:從當(dāng)前數(shù)據(jù)庫中刪除一個(gè)或多個(gè)索引。DROP INDEX 語句不適合于刪除通過定義 PRIMARY KEY 或 UNIQUE 約束創(chuàng)建的索引,若要?jiǎng)h除 PRIMARY KEY 或 UNIQUE 約束創(chuàng)建的索引,必須通過刪除約束實(shí)現(xiàn)。在系統(tǒng)表的索引上不能進(jìn)行DROP INDEX。權(quán)限:默認(rèn)情況下,將 DROP INDEX 權(quán)限授予表所有者,該權(quán)限不可轉(zhuǎn)讓。 db_owner 和 db_ddladmin 固定數(shù)

18、據(jù)庫角色成員或sysadmin 固定服務(wù)器角色成員可以通過在 DROP INDEX 內(nèi)指定所有者刪除任何對(duì)象。【例5.7】刪除 XSCJ數(shù)據(jù)庫中表XS的一個(gè)索引名為 st_id_ind 的索引。USE XSCJDROP INDEX XS.au_id_indGO 在表中定義及刪除默認(rèn)值約束1默認(rèn)值約束的定義通過企業(yè)管理器或SQL命令的執(zhí)行,在定義表或修改表時(shí),可定義一個(gè)字段的默認(rèn)值約束。下面通過例子介紹利用SQL語句定義一個(gè)字段的默認(rèn)值約束的方法,有興趣的讀者可自己練習(xí)在企業(yè)管理器中定義一個(gè)字段的默認(rèn)值值約束。語法格式:CREATE TABLE table_name /*指定表名*/(colum

19、n_name datatype NOT NULL | NULLDEFAULT constraint_expression /*缺省值約束表達(dá)式*/,n)/*定義列名、數(shù)據(jù)類型、標(biāo)識(shí)列、是否空值及定義缺省值約束*/說明:table_name為創(chuàng)建的表名,column_name為列名,datatype為對(duì)應(yīng)列的數(shù)據(jù)類型; DEFAULT關(guān)鍵字表示其后的constraint_expression表達(dá)式為缺省值約束表達(dá)式,此表達(dá)式只能是常量(如字符串)、系統(tǒng)函數(shù)(如 getdate())或 NULL;為保持與 SQL Server 早期版本的兼容,可以給 DEFAULT 指派約束名,對(duì)于timesta

20、mp 或帶 IDENTITY 屬性的字段不能定義缺省值約束。參數(shù)n表示可定義多個(gè)數(shù)據(jù)字段。 在表中定義及刪除默認(rèn)值約束【例5.8】在定義表時(shí)定義一個(gè)字段的默認(rèn)值約束。USE XSCJCREATE TABLE XS( 學(xué)號(hào) char(6) NOT NULL,姓名 char(8) NOT NULL,專業(yè)名 char(10) NULL,性別 bit NOT NULL,出生時(shí)間 smalldatetime NOT NULL,總學(xué)分 tinyint NULL,備注 text NULL,入學(xué)日期 datetime default getdate() /*定義默認(rèn)值約束*/)GO 在表中定義及刪除默認(rèn)值約束

21、下列程序?qū)崿F(xiàn)的功能與上例同,但在定義缺省值約束的同時(shí)指定了約束名。USE XSCJCREATE TABLE XS( 學(xué)號(hào) char(6) NOT NULL,姓名 char(8) NOT NULL,專業(yè)名 char(10) NULL,性別 bit NOT NULL,出生時(shí)間 smalldatetime NOT NULL,總學(xué)分 tinyint NULL,備注 text NULL,入學(xué)日期 datetime CONSTRAINT datedflt default getdate() /*定義默認(rèn)值約束*/)GO【例5.9】在修改表時(shí)定義一個(gè)字段的默認(rèn)值約束。USE XSCJALTER TABLE

22、XSADD AddDate smalldatetime NULLCONSTRAINT AddDateDflt /*默認(rèn)值約束名*/DEFAULT getdate() WITH VALUES 在表中定義及刪除默認(rèn)值約束WITH VALUES 僅用在對(duì)表添加新字段的情況下。若使用了WITH VALUES,則將為表中各現(xiàn)有行添加的新字段提供缺省值;如果沒有使用 WITH VALUES,那么每一行的新列中都將為NULL值2默認(rèn)值約束的刪除默認(rèn)值約束可在企業(yè)管理器中刪除。如果已知一個(gè)默認(rèn)值約束的約束名,也可在查詢分析器中執(zhí)行SQL命令刪除,具體使用,如下例所示?!纠?.10】刪除上例定義的默認(rèn)值約束。U

23、SE XSCJALTER TABLE XSDROP CONSTRAINT AddDateDfltGO默認(rèn)值對(duì)象的定義、使用與刪除默認(rèn)值對(duì)象的定義和使用既可利用企業(yè)管理器實(shí)現(xiàn),也可通過SQL命令實(shí)現(xiàn)。1. 通過企業(yè)管理器定義和綁定DEFAULT默認(rèn)值對(duì)象(1) 通過企業(yè)管理器定義DEFAULT默認(rèn)值對(duì)象仍以XSCJ數(shù)據(jù)庫為例,對(duì)于XS表中的總學(xué)分字段初始值必須為0(對(duì)于新生而言),如何實(shí)現(xiàn)呢?可以首先利用企業(yè)管理器定義一個(gè)DEFAULT默認(rèn)值對(duì)象,然后將總學(xué)分字段綁定到該對(duì)象上(即建立數(shù)據(jù)字段與默認(rèn)值對(duì)象之間的關(guān)系),從而達(dá)到賦初值的目的。步驟如下:默認(rèn)值對(duì)象的定義、使用與刪除第步 進(jìn)入企業(yè)管理

24、器,并連接到XSCJ數(shù)據(jù)庫;展開XSCJ數(shù)據(jù)庫文件夾,選擇“默認(rèn)”圖標(biāo)右擊,出現(xiàn)快捷菜單,選擇“新建默認(rèn)”,進(jìn)入如圖5.6所示的默認(rèn)屬性定義窗口;圖5.6 默認(rèn)屬性定義窗口 圖5.7 將字段綁定到DEFAULT約束對(duì)象的窗口默認(rèn)值對(duì)象的定義、使用與刪除第2步 在窗口中輸入默認(rèn)值對(duì)象名“zxf_default”及默認(rèn)值“0”,選擇“確定”后即定義了一個(gè)默認(rèn)值對(duì)象。(2) 通過企業(yè)管理器將一個(gè)字段綁定到一個(gè)DEFAULT默認(rèn)值對(duì)象上面已定義了一個(gè)“zxf_default”默認(rèn)值對(duì)象,下面將XS表中的總學(xué)分字段綁定到該對(duì)象上,步驟如下:第1步 在企業(yè)管理器中打開XS表設(shè)計(jì)器;第2步 將光標(biāo)移至總學(xué)分

25、字段,從默認(rèn)值對(duì)象下拉表中選擇其對(duì)應(yīng)的默認(rèn)值對(duì)象即可,如圖5.7所示。2. 通過SQL語句定義和綁定DEFAULT默認(rèn)值對(duì)象(1) 通過SQL命令定義DEFAULT默認(rèn)值對(duì)象語法格式:CREATE DEFAULT defaultAS constant_expression說明:CREATE DEFAULT關(guān)鍵字表示創(chuàng)建一個(gè)名為default的默認(rèn)值對(duì)象,默認(rèn)值對(duì)象名必須符合標(biāo)識(shí)符規(guī)則??梢园J(rèn)值對(duì)象所有者名。約束表達(dá)式constant_expression只能是常量表達(dá)式(不能包含字段名或其它數(shù)據(jù)庫對(duì)象的名稱),可以含有常量、內(nèi)置函數(shù),字符和日期常量用單引號(hào)引起來;貨幣、整數(shù)和浮點(diǎn)常量不需

26、要使用引號(hào)。十六進(jìn)制數(shù)據(jù)必須以 0x 開頭,貨幣數(shù)據(jù)必須以美元符號(hào) ($) 開頭。默認(rèn)值對(duì)象必須與列數(shù)據(jù)類型兼容。默認(rèn)值對(duì)象的定義、使用與刪除(2) 通過系統(tǒng)存儲(chǔ)過程綁定DEFAULT默認(rèn)值對(duì)象創(chuàng)建默認(rèn)值對(duì)象后,要使其起作用,應(yīng)使用 sp_bindefault存儲(chǔ)過程將其綁定到列或用戶定義數(shù)據(jù)類型。語法格式:sp_bindefault defname = 'default' , objname = 'object_name' , futureonly = 'futureonly_flag' 說明:參數(shù)default指定由 CREATE DEFAU

27、LT 語句創(chuàng)建的默認(rèn)值對(duì)象名,要用單引號(hào)括起來;參數(shù)object_name指定準(zhǔn)備綁定默認(rèn)值對(duì)象的表的列名或用戶定義的數(shù)據(jù)類型。 object_name 應(yīng)采用 表名.字段名 格式,object_name要用單引號(hào)引起來。不能將默認(rèn)值對(duì)象綁定到 timestamp 數(shù)據(jù)類型的列、帶 IDENTITY 屬性的列或者已經(jīng)有 DEFAULT約束的 列;參數(shù)futureonly_flag:僅在將默認(rèn)值對(duì)象綁定到用戶定義數(shù)據(jù)類型時(shí)才使用,當(dāng) futureonly_flag的值為futureonly時(shí) ,表示在此之前,該數(shù)據(jù)類型關(guān)聯(lián)的列不繼承該默認(rèn)值 對(duì)象的值。語法格式中的其它項(xiàng)為字符串常量。(3) 應(yīng)用

28、舉例默認(rèn)值對(duì)象的定義、使用與刪除【例5.11】對(duì)于如前所述的XSCJ數(shù)據(jù)庫中XS表的總學(xué)分字段,可用如下程序段實(shí)現(xiàn)初始值設(shè)置為0。CREATE DEFAULT zxf_default AS 0/* 定義語句應(yīng)為第一條件語句或緊跟在GO之后*/USE XSCJEXEC sp_bindefault zxf_default ,XS.總學(xué)分GO【例5.12】首先在XSCJ數(shù)據(jù)庫中定義表book及名為 today 的默認(rèn)值,然后將其綁定到 book表的 hire date 列。-定義表CREATE TABLE book(book_id char(6)name varchar(20) NOT NULL,h

29、ire_date datetime NOT NULL)GO-創(chuàng)建默認(rèn)值對(duì)象CREATE DEFAULT today AS getdate()GO-綁定默認(rèn)值對(duì)象USE bookEXEC sp_bindefault 'today', 'book.hire_ date'默認(rèn)值對(duì)象的定義、使用與刪除【例5.13】在XSCJ數(shù)據(jù)庫中定義名為 birthday_date 的數(shù)據(jù)類型,然后定義默認(rèn)值對(duì)象day并將其綁定到用戶定義的數(shù)據(jù)類型birthday_date 中。-定義數(shù)據(jù)類型birthday_dateUSE XSCJEXEC sp_addtype birthday_

30、date, 'datetime', 'NULL' Go-定義day缺省值對(duì)象CREATE DEFAULT day AS 1960,00,00- 將缺省值對(duì)象day綁定到birthday_date數(shù)據(jù)類型USE XSCJEXEC sp_bindefault ' day ', ' birthday_date '在創(chuàng)建表時(shí),所有指派了用戶定義數(shù)據(jù)類型 birthday_date的列都將繼承默認(rèn)值對(duì)象的值,除非在列上直接綁定了默認(rèn)值,綁定到列的默認(rèn)值始終優(yōu)先于綁定到數(shù)據(jù)類型的默認(rèn)值。3)默認(rèn)值對(duì)象的刪除如果要?jiǎng)h除一個(gè)默認(rèn)值對(duì)象,首先應(yīng)解除

31、默認(rèn)值對(duì)象與用戶定義類型及表字段的綁定關(guān)系,然后才能刪除該默認(rèn)值對(duì)象。綁定關(guān)系的解除及默認(rèn)值對(duì)象的刪除可在企業(yè)管理器中實(shí)現(xiàn),也可通過執(zhí)行SQL語句實(shí)現(xiàn),下面介紹SQL語句的用法,有興趣的讀者可自己練習(xí)在企業(yè)管理器中實(shí)現(xiàn)該功能。默認(rèn)值對(duì)象的定義、使用與刪除(1)利用sp_unbindefault解除綁定關(guān)系語法格式:sp_unbindefault objname = 'object_name' , futureonly = 'futureonly_flag'說明:參數(shù)object_name為要解除默認(rèn)值對(duì)象綁定關(guān)系的字段名(格式為:表名.字段名)或用戶定義類型名。

32、用戶定義類型與默認(rèn)值對(duì)象的綁定關(guān)系解除后,所有屬于該類型的列也同時(shí)解除默認(rèn)值綁定;參數(shù)futureonly_flag僅用于用戶定義類型。當(dāng)參數(shù) futureonly_flag 為 futureonly 時(shí),現(xiàn)有的屬于該數(shù)據(jù)類型的列默認(rèn)值不變。(2)刪除默認(rèn)值對(duì)象解除默認(rèn)值對(duì)象與用戶定義類型及表字段的綁定關(guān)系后,即可用DROP語句刪除默認(rèn)值對(duì)象。語法格式:DROP DEFAULT default ,.n 說明:參數(shù)default為現(xiàn)有默認(rèn)值對(duì)象名;參數(shù)n表示可以指定多個(gè)默認(rèn)值對(duì)象同時(shí)刪除。DROP DEFAULT 語句不適用于 DEFAULT 約束。默認(rèn)值對(duì)象的定義、使用與刪除【例5.14】解除

33、默認(rèn)值對(duì)象day與XSCJ庫中用戶定義類型birthday_date的綁定關(guān)系,然后刪除名為day的默認(rèn)值對(duì)象。USE XSCJEXEC sp_unbindefault 'birthday_date'DROP DEFAULT dayGO缺省值約束與缺省值對(duì)象的區(qū)別:缺省值約束是在一個(gè)表內(nèi)針對(duì)某一個(gè)字段定義的,僅對(duì)該字段有效。缺省值對(duì)象是數(shù)據(jù)庫對(duì)象之一,在一個(gè)數(shù)據(jù)庫內(nèi)定義,可綁定到一個(gè)用戶自定義數(shù)據(jù)類型或庫中某個(gè)表的字段。 數(shù)據(jù)完整性的分類數(shù)據(jù)的完整性是指數(shù)據(jù)庫中的數(shù)據(jù)在邏輯上的一致性和準(zhǔn)確性。數(shù)據(jù)完整性一般包括三種:1域完整性域完整性又稱為列完整性,指定列輸入的有效性。實(shí)現(xiàn)域完

34、整性的方法可通過定義相應(yīng)的規(guī)則、約束、缺省值對(duì)象等方法實(shí)現(xiàn)。例如:對(duì)于學(xué)生數(shù)據(jù)庫XSCJ的KC表,學(xué)生的學(xué)分應(yīng)在010之間,為了對(duì)學(xué)分這一數(shù)據(jù)項(xiàng)輸入的數(shù)據(jù)范圍進(jìn)行限制,可以在定義KC表的同時(shí)定義學(xué)分的約束條件達(dá)到這一目的?!纠?.15】定義表KC的同時(shí)定義學(xué)分的約束條件。USE XSCJCREATE TABLE KC(課程號(hào) char(6) NOT NULL,課程名 char(8) NOT NULL,學(xué)分 tinyint CHECK (學(xué)分 >=0 AND學(xué)分<=10) NULL, /* 通過CHECK子句定義約束條件 */備注 text NULL)GO 數(shù)據(jù)完整性的分類2實(shí)體完整

35、性實(shí)體完整性又稱為行的完整性,要求表中有一個(gè)主鍵,其值不能為空且能唯一地標(biāo)識(shí)對(duì)應(yīng)的記錄。通過索引、UNIQUE 約束、PRIMARY KEY 約束或 IDENTITY 屬性可實(shí)現(xiàn)數(shù)據(jù)的實(shí)體完整性。例如,對(duì)于XSCJ數(shù)據(jù)庫中XS表,學(xué)號(hào)作為主鍵,每一個(gè)學(xué)生的學(xué)號(hào)能唯一的標(biāo)識(shí)該學(xué)生對(duì)應(yīng)的行記錄信息,那么在輸入數(shù)據(jù)時(shí),則不能有相同學(xué)號(hào)的行記錄,通過對(duì)學(xué)號(hào)這一字段建立主鍵約束可實(shí)現(xiàn)表XS的實(shí)體完整性。3參照完整性參照完整性又稱為引用完整性。參照完整性保證主表中的數(shù)據(jù)與從表(被參照表)中數(shù)據(jù)的一致性。SQL Server 2000中,參照完整性的實(shí)現(xiàn)是通過定義外鍵(外碼)與主鍵(主碼)之間或外鍵與唯一鍵

36、之間的對(duì)應(yīng)關(guān)系實(shí)現(xiàn)的。參照完整性確保鍵值在所有表中一致。碼:即前面所說的關(guān)鍵字,又稱為“鍵”,是能唯一標(biāo)識(shí)表中記錄的字段或字段組合。如果一個(gè)表有多個(gè)碼,可選其中一個(gè)作為主碼(主鍵),其余的稱為后選碼。外碼:如果一個(gè)表中的一個(gè)字段或若干個(gè)字段的組合是另一個(gè)表的碼則稱該字段或字段組合為該表的外碼。例如,對(duì)于XSCJ數(shù)據(jù)庫中XS表的每一個(gè)學(xué)號(hào),在 XS_KC表中都有相關(guān)的課程成績記錄,將XS作為主表,學(xué)號(hào)字段定義為主鍵,XS_KC作為從表,表中的學(xué)號(hào)字段定義為外鍵,從而建立主表和從表之間的聯(lián)系實(shí)現(xiàn)參照完整性。XS和 XS_KC表的對(duì)應(yīng)關(guān)系如表5.1、表5.2所示。 數(shù)據(jù)完整性的分類 數(shù)據(jù)完整性的分類

37、如果定義了兩個(gè)表之間的參照完整性,則要求:從表不能引用不存在的鍵值。例如:對(duì)于XS_KC表中行記錄出現(xiàn)的學(xué)號(hào)必須是XS表中已存在的學(xué)號(hào)。如果主表中的鍵值更改了,那么在整個(gè)數(shù)據(jù)庫中,對(duì)從表中該鍵值的所有引用要進(jìn)行一致的更改。例如:如果對(duì)XS表中的某一學(xué)號(hào)修改,XS_KC表中所有對(duì)應(yīng)學(xué)號(hào)也要進(jìn)行相應(yīng)的修改。如果主表中沒有關(guān)聯(lián)的記錄,則不能將記錄添加到從表。如果要?jiǎng)h除主表中的某一記錄,應(yīng)先刪除從表中與該記錄匹配的相關(guān)記錄。域完整性的實(shí)現(xiàn)SQL Server提供多種手段實(shí)現(xiàn)不同類型的數(shù)據(jù)完整性,以保證數(shù)據(jù)的正確性,相容性和一致性。通過定義約束、規(guī)則等對(duì)象可以實(shí)現(xiàn)域完整性。1CHECK約束的定義與刪除C

38、HECK約束實(shí)際上是字段輸入內(nèi)容的驗(yàn)證規(guī)則,表示一個(gè)字段的輸入內(nèi)容必須滿足CHECK約束的條件,若不滿足,則數(shù)據(jù)無法正常輸入。對(duì)于TimeStamp和Identity兩種類型字段不能定義CHECK約束。(1) 通過企業(yè)管理器創(chuàng)建與刪除CHECK約束在XSCJ數(shù)據(jù)庫的XS_KC表中,學(xué)生每門功課的成績一般在0100的范圍內(nèi),如果對(duì)用戶的輸入數(shù)據(jù)要施加這一限制,可按如下步驟進(jìn)行:第1步 在XS_KC表設(shè)計(jì)器界面右擊鼠標(biāo),出現(xiàn)如圖5.8所示的快捷菜單;域完整性的實(shí)現(xiàn)圖5.8表設(shè)計(jì)器快捷菜單域完整性的實(shí)現(xiàn)第2步 選擇CHECK約束菜單項(xiàng)進(jìn)入如圖5.9所示的CHECK選項(xiàng)卡屬性窗口;圖5.9 CHECK

39、選項(xiàng)卡屬性窗口 圖5.10 CHECK約束輸入窗口域完整性的實(shí)現(xiàn)第3步 選擇“新建”,進(jìn)入CHECK約束的輸入窗口,輸入約束表達(dá)式“成績>=0 and 成績<=100”,如圖5.10所示,選擇“關(guān)閉”。按上述步驟創(chuàng)建約束后,輸入數(shù)據(jù)時(shí)如果成績不是在0100的范圍內(nèi),系統(tǒng)將報(bào)告錯(cuò)誤。如果要?jiǎng)h除上述約束,進(jìn)入如圖5.10的CHECK約束屬性窗口,刪除約束表達(dá)式,然后選擇“關(guān)閉”即可。(2) 利用SQL語句在創(chuàng)建表時(shí)創(chuàng)建CHECK約束語法格式:CREATE TABLE table_name /*指定表名*/(column_name datatype NOT NULL | NULLDEFA

40、ULT constraint_expression /*缺省值約束表達(dá)式*/check_name CHECK ?( logical_expression ) /*CHECK約束表達(dá)式*/,n)/* 定義列名、數(shù)據(jù)類型、標(biāo)識(shí)列、是否空值及定義缺省值約束、CHECK 約束*/域完整性的實(shí)現(xiàn)說明:關(guān)鍵字CHECK表示定義CHECK約束,其后的logical_expression邏輯表達(dá)式,稱為CHECK約束表達(dá)式。語法格式中其它項(xiàng)的含義同DEFAULT約束的定義?!纠?.16】在 XSCJ 數(shù)據(jù)庫中創(chuàng)建表books,其中包含所有的約束定義。USE XSCJCREATE TABLE books(boo

41、k_id smallint, /*書號(hào)*/book_name varchar(50) NOT NULL /*書名*/book _desc varchar(50) NOT NULL /*書的簡要說明*/DEFAULT 'New book - ',max_lvl tinyint NOT NULLCHECK (max_lvl <= 250)/*書允許的最高價(jià)CHECK約束*/)(3) 利用SQL語句在修改表時(shí)創(chuàng)建CHECK約束語法格式:ALTER TABLE table_nameADD CONSTRAINT check_name CHECK ? (logical_express

42、ion)域完整性的實(shí)現(xiàn)說明:關(guān)鍵字ADD CONSTRAINT表示在已定義的table_name表中增加一個(gè)約束定義,約束名由check_name指定,約束條件表達(dá)式為logical_expression。【例5.17】通過修改XSCJ數(shù)據(jù)庫的XS_KC表,增加成績字段的CHECK約束。USE XSCJALTER TABLE XS_KCADD CONSTRAINT cj_constraint CHECK ?(成績>=0 and 成績<=100)(4) 利用SQL語句刪除CHECK約束CHECK約束的刪除可在企業(yè)管理器中通過界面刪除,有興趣的讀者可以自己試一試,在此介紹如何利用SQL

43、命令刪除。語法格式:ALTER TABLE table_nameDROP CONSTRAINT check_name說明:在table_name指定的表中,刪除名為check_name的約束?!纠?.18】刪除XSCJ數(shù)據(jù)庫中XS_KC表成績字段的CHECK約束。USE XSCJALTER TABLE XS_KCDROP CONSTRAINT cj_constraintGO域完整性的實(shí)現(xiàn)2. 規(guī)則對(duì)象的定義、使用與刪除規(guī)則對(duì)象的使用方法與缺省值對(duì)象的使用步驟類似:(1) 定義規(guī)則對(duì)象;(2) 將規(guī)則對(duì)象綁定到列或用戶自定義類型;規(guī)則對(duì)象的定義可利用企業(yè)管理器,通過界面定義,也可以利用查詢分析器

44、,通過執(zhí)行SQL語句定義。1)利用企業(yè)管理器定義規(guī)則對(duì)象并綁定到自定義類型或列對(duì)于XSCJ數(shù)據(jù)庫的KC表課程類別列,如果規(guī)定前1位代表課程類別(輸入時(shí)只能選1- 5),后2位為課程序號(hào)。課程類別為:1-通修、2-必修、3-專修、4-方向、5-任選。對(duì)于課程類別的輸入限制如何通過規(guī)則約束實(shí)現(xiàn)呢?首先通過企業(yè)管理器定義一個(gè)規(guī)則對(duì)象,步驟如下:第1步 進(jìn)入企業(yè)管理器,展開控制臺(tái)目錄樹中的XSCJ數(shù)據(jù)庫圖標(biāo),選中“規(guī)則”圖標(biāo)右擊,出現(xiàn)如圖5.11所示的快捷菜單;域完整性的實(shí)現(xiàn)圖5.11規(guī)則圖標(biāo)的快捷菜單域完整性的實(shí)現(xiàn)第2步 選擇“新建規(guī)則”,進(jìn)入規(guī)則創(chuàng)建窗口,如圖5.12所示,在窗口中輸入規(guī)則名及規(guī)則

45、表達(dá)式,本例的規(guī)則名為kc_rule,規(guī)則表達(dá)式為:num like 1-50-90-9,其中num為任意輸入的局部變量,但必須以開頭。第3步 選擇“確定”按鈕,則新建規(guī)則創(chuàng)建成功,出現(xiàn)如圖5.13的圖標(biāo)。圖5.12規(guī)則創(chuàng)建窗口 圖5.13規(guī)則屬性窗口域完整性的實(shí)現(xiàn)第4步 在規(guī)則圖標(biāo)下選中剛定義的規(guī)則對(duì)象kc_rule對(duì)象雙擊,出現(xiàn)如圖5.13所示的規(guī)則屬性界面;第5步 在規(guī)則屬性窗口中有兩個(gè)按鈕:一個(gè)是“綁定UDT”,即綁定到用戶自定義類型;另一個(gè)按鈕是“綁定列”,對(duì)于本例選中“綁定列”,進(jìn)入如圖5.14所示將規(guī)則對(duì)象綁定到列的界面;圖5.14 將規(guī)則綁定到列的窗口域完整性的實(shí)現(xiàn)第6步 選擇

46、表dbo.kc,在未綁定規(guī)則字段中選擇“課程號(hào)”字段并添加到“綁定列”,如圖5.14所示,然后選擇確定。將規(guī)則綁定到表KC的課程號(hào)字段后,如果向表中插入記錄的課程號(hào)不滿足規(guī)則約束,將報(bào)告出錯(cuò)信息。如果要?jiǎng)h除規(guī)則對(duì)象,首先應(yīng)解除規(guī)則對(duì)象與列或自定義數(shù)據(jù)類型之間的綁定關(guān)系,然后刪除規(guī)則對(duì)象,請(qǐng)讀者在企業(yè)管理器中試一試。2)利用SQL命令定義規(guī)則對(duì)象并綁定到自定義類型或列(1)規(guī)則對(duì)象的定義語法格式:CREATE RULE ruleAS condition_expression說明:參數(shù)rule為定義的新規(guī)則名,規(guī)則名必須符合標(biāo)識(shí)符規(guī)則;參數(shù)condition_expression為規(guī)則的條件表達(dá)式

47、,該表達(dá)式可為WHERE 子句中任何有效的表達(dá)式,但規(guī)則表達(dá)式中不能包含列或其它數(shù)據(jù)庫對(duì)象,可以包含不引用數(shù)據(jù)庫對(duì)象的內(nèi)置函數(shù),在condition_expression 條件表達(dá)式中包含一個(gè)局部變量,每個(gè)局部變量的前面都有一個(gè) 符號(hào),使用UPDATE 或 INSERT 語句修改或插入值時(shí),該表達(dá)式用于對(duì)規(guī)則關(guān)聯(lián)的列值進(jìn)行約束。域完整性的實(shí)現(xiàn) 創(chuàng)建的規(guī)則對(duì)先前已存在于數(shù)據(jù)庫中的數(shù)據(jù)無效。 單個(gè)批處理中,CREATE RULE 語句不能與其它 T-SQL 語句組合使用。 規(guī)則表達(dá)式的類型必須與列的數(shù)據(jù)類型兼容,不能將規(guī)則綁定到 text、image 或 timestamp 列。要用單引號(hào) (&#

48、39;) 將字符和日期常量引起來,在十六進(jìn)制常量前加 0x。 對(duì)于用戶定義數(shù)據(jù)類型,當(dāng)在該類型的數(shù)據(jù)列中插入值,或更新該類型的數(shù)據(jù)列時(shí),綁定到該類型的規(guī)則才會(huì)激活。規(guī)則不檢驗(yàn)變量,所以在向用戶定義數(shù)據(jù)類型的變量賦值時(shí),不能與列綁定的規(guī)則沖突。 如果列同時(shí)有默認(rèn)值和規(guī)則與之關(guān)聯(lián),則默認(rèn)值必須滿足規(guī)則的定義,與規(guī)則沖突的默認(rèn)值不能插入列。(2)將規(guī)則對(duì)象綁定到自定義類型或列語法格式:sp_bindrule rulename = 'rule' , objname = 'object_name' , futureonly = 'futureonly_flag&#

49、39; 說明:參數(shù)rule為 CREATE RULE 語句創(chuàng)建的規(guī)則名,要用單引號(hào)括起來。參數(shù)object_name為綁定到規(guī)則的列或用戶定義的數(shù)據(jù)類型,如果object_name采用 表名.字段名 格式,則認(rèn)為綁定到表的列,否則綁定到用戶定義數(shù)據(jù)類型;參數(shù)futureonly_flag僅當(dāng)將規(guī)則綁定到用戶定義的數(shù)據(jù)類型時(shí)才使用,如果futureonly_flag設(shè)置為 futureonly ,用戶定義數(shù)據(jù)類型的現(xiàn)有列不繼承新規(guī)則。如果 futureonly_flag 為 NULL,當(dāng)被綁定的數(shù)據(jù)類型當(dāng)前無規(guī)則時(shí),新規(guī)則將綁定到用戶定義數(shù)據(jù)類型的每一列。域完整性的實(shí)現(xiàn)(3)應(yīng)用舉例【例5.19

50、】如下程序創(chuàng)建一個(gè)規(guī)則,并綁定到表KC的課程號(hào)列,用于限制課程號(hào)的輸入范圍。USE XSCJCREATE RULE kc_ruleAS range like 1-50-90-9 GOUSE XSCJEXEC sp_bindrule 'kc_rule', 'KC.課程號(hào)'GO【例5.20】創(chuàng)建一個(gè)規(guī)則,用以限制輸入到該規(guī)則所綁定的列中的值只能是該規(guī)則中列出的值。USE XSCJCREATE RULE list_ruleAS list IN ('C語言', '離散數(shù)學(xué)', '微機(jī)原理')GOUSE XSCJ EXECs

51、p_bindrule 'list_rule', 'KC.課程名'GO域完整性的實(shí)現(xiàn)【例5.21】如下程序定義一個(gè)用戶數(shù)據(jù)類型course_num,然后將前面定義的規(guī)則“kc_rule”綁定到用戶數(shù)據(jù)類型course_num上,最后定義表KC,其課程號(hào)的數(shù)據(jù)類型為course_num。USE XSCJ /* 打開數(shù)據(jù)庫 */EXEC sp_addtype course_num,char(3),not null /* 調(diào)用存儲(chǔ)過程 */EXEC sp_bindrule 'kc_rule', 'course_num'GOCREATE T

52、ABLE KC1(課程號(hào) course_num /* 將學(xué)號(hào)定義為 student_num類型 */課程名 char(16) NOT NULL,開課學(xué)期 tinyint ,學(xué)時(shí) tinyint,學(xué)分 tinyint)GO(4)規(guī)則對(duì)象的刪除刪除規(guī)則對(duì)象前,首先應(yīng)使用系統(tǒng)存儲(chǔ)過程sp_unbindrule解除被綁定對(duì)象與規(guī)則對(duì)象之間的綁定關(guān)系,使用格式如下:sp_unbindrule objname = 'object_name', futureonly = 'futureonly_flag'域完整性的實(shí)現(xiàn)說明:參數(shù)object_name用于指定解除規(guī)則綁定的列或

53、者用戶定義類型名。如果object_name是 表名.字段名 形式,則認(rèn)為object_name表列,否則 object_name 為用戶定義數(shù)據(jù)類型。 為用戶定義數(shù)據(jù)類型解除規(guī)則綁定時(shí),所有屬于該數(shù)據(jù)類型并具有相同規(guī)則的列也同時(shí)解除規(guī)則綁定。對(duì)屬于該數(shù)據(jù)類型的列,如果其規(guī)則直接綁定到列上,則該列不受影響。參數(shù)futureonly_flag僅用于解除用戶定義數(shù)據(jù)類型規(guī)則的綁定,當(dāng)參數(shù) futureonly_flag 取值為 futureonly 時(shí),規(guī)則仍然對(duì)現(xiàn)有的屬于該數(shù)據(jù)類型的列有效。在解除列或自定義類型與規(guī)則對(duì)象之間的綁定關(guān)系后,就可以刪除規(guī)則對(duì)象了。語法格式:DROP RULE rul

54、e ,.n 說明:參數(shù)rule指定刪除的規(guī)則名,可以包含規(guī)則所有者名;參數(shù)n表示可以指定多個(gè)規(guī)則同時(shí)刪除?!纠?.22】解除課程號(hào)列與kc_rule之間的綁定關(guān)系,并刪除規(guī)則對(duì)象kc_rule。USE XSCJEXEC sp_unbindrule 'KC.課程號(hào)'DROP RULE kc_ruleGO域完整性的實(shí)現(xiàn)【例5.23】解除自定義類型course_num與kc_rule之間的綁定關(guān)系,并刪除規(guī)則對(duì)象 kc_rule。USE XSCJEXEC sp_unbindrule 'course_num'DROP RULE kc_ruleGO實(shí)體完整性的實(shí)現(xiàn)如果要確

55、保一個(gè)表中的非主鍵列不輸入重復(fù)值,應(yīng)在該列上定義唯一約束(UNIQUE約束)。例如,對(duì)于XSCJ數(shù)據(jù)庫中的XS表“學(xué)號(hào)列”是主鍵,XS表中增加一列“身份證號(hào)碼”,可以定義一個(gè)唯一約束來要求表中“身份證號(hào)碼” 列的取值是唯一的。PRIMARY KEY約束與UNIQUE約束的主要區(qū)別如下:(1) 一個(gè)數(shù)據(jù)表只能創(chuàng)建一個(gè)PRIMARY KEY約束,但一個(gè)表中可根據(jù)需要對(duì)不同的列創(chuàng)建若干個(gè)UNIQUE約束;(2) PRIMARY KEY字段的值不允許為NULL,而UNIQUE字段的值可取NULL;(3) 一般創(chuàng)建PRIMARY KEY約束時(shí),系統(tǒng)會(huì)自動(dòng)產(chǎn)生索引,索引的缺省類型為簇索引。創(chuàng)建UNIQUE

56、約束時(shí),系統(tǒng)會(huì)自動(dòng)產(chǎn)生一個(gè)UNIQUE索引,索引的缺省類型為非簇索引。PRIMARY KEY約束與UNIQUE約束的相同點(diǎn)在于:二者均不允許表中對(duì)應(yīng)字段存在重復(fù)值。實(shí)體完整性的實(shí)現(xiàn)1. 利用企業(yè)管理器創(chuàng)建和刪除PRIMARY KEY約束(1)利用企業(yè)管理器創(chuàng)建PRIMARY KEY約束如果要對(duì)XS表按學(xué)號(hào)建立PRIMARY KEY約束,應(yīng)如何操作呢?可以按下列步驟進(jìn)行:第1步 選擇XS表圖標(biāo),右擊,打開XS表的表設(shè)計(jì)器,進(jìn)入如圖5.15所示的表設(shè)計(jì)器界面。圖5.15 表設(shè)計(jì)器界面 圖5.16 XS表設(shè)計(jì)器界面實(shí)體完整性的實(shí)現(xiàn)第2步 選中“學(xué)號(hào)”對(duì)應(yīng)的這一行,選擇主鍵圖標(biāo),這樣在“學(xué)號(hào)”對(duì)應(yīng)的這一行前

溫馨提示

  • 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)論