第5章 完整性約束定義_第1頁(yè)
已閱讀1頁(yè),還剩29頁(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)介

1、1,5.4 數(shù)據(jù)完整性的概念與實(shí)施方法,5.4.1 數(shù)據(jù)完整性概念數(shù)據(jù)完整性是指數(shù)據(jù)的正確性、完備性和一致性,是衡量數(shù)據(jù)庫(kù)質(zhì)量好壞的重要標(biāo)準(zhǔn)。在用INSERT、DELETE、UPDATE語(yǔ)句修改數(shù)據(jù)庫(kù)內(nèi)容時(shí),數(shù)據(jù)的完整性可能會(huì)遭到破壞。可能會(huì)存在下列情況:無(wú)效的數(shù)據(jù)被添加到數(shù)據(jù)庫(kù)的表中。如:將學(xué)生考試成績(jī)輸入成負(fù)數(shù); SQL Server提供了對(duì)數(shù)據(jù)庫(kù)中表、列實(shí)施數(shù)據(jù)完整性的方法。對(duì)表進(jìn)行設(shè)計(jì)數(shù)據(jù)完整性有兩個(gè)重要內(nèi)容:標(biāo)識(shí)列的有

2、效值和確定如何強(qiáng)制列中的數(shù)據(jù)完整性。,2,1. 域完整性域完整性是指一個(gè)列的輸入有效性,是否允許空值。強(qiáng)制域完整性的方法有:限制類(lèi)型(通過(guò)設(shè)定列的數(shù)據(jù)類(lèi)型)、格式(通過(guò)CHECK約束和規(guī)則)或可能值的范圍(通過(guò) FOREIGN KEY 約束、CHECK 約束、DEFAULT定義、NOT NULL定義和規(guī)則)。2. 實(shí)體完整性實(shí)體完整性是指保證表中所有的行唯一。實(shí)體完整性要求表中的所有行都有一個(gè)唯一標(biāo)識(shí)符。這個(gè)唯一標(biāo)識(shí)符可能是一列,

3、也可能是幾列的組合,稱(chēng)之為主鍵。也就是說(shuō),表中主鍵在所有行上必須取值唯一。強(qiáng)制實(shí)體完整性的方法有:索引、UNIQUE約束、PRIMARY KEY約束或 IDENTITY屬性 。3. 參照完整性參照完整性也叫引用完整性。參照完整性總是保證主關(guān)鍵字(被引用表)和外部關(guān)鍵字(引用表)之間的參照關(guān)系。它涉及兩個(gè)或兩個(gè)以上表數(shù)據(jù)的一致性維護(hù)。,3,5.4.2 數(shù)據(jù)完整性實(shí)施方法1. 聲明型數(shù)據(jù)完整性聲明型數(shù)據(jù)完整性一般在對(duì)象創(chuàng)建時(shí)定義,

4、由SQL Server強(qiáng)制實(shí)施,通常使用約束、缺省值和規(guī)則來(lái)實(shí)現(xiàn)。實(shí)現(xiàn)基本數(shù)據(jù)完整性的首選方法是使用聲明型數(shù)據(jù)完整性。聲明型數(shù)據(jù)完整性作為數(shù)據(jù)庫(kù)對(duì)象說(shuō)明的一部分在語(yǔ)法中實(shí)現(xiàn),在CREATE TABLE和ALTER TABLE定義中使用CONSTRAINT、DEFAULT等語(yǔ)句限制表中的值。使用這種方法實(shí)現(xiàn)數(shù)據(jù)完整性簡(jiǎn)單且不易出錯(cuò),系統(tǒng)直接將實(shí)現(xiàn)數(shù)據(jù)完整性的要求定義在表和列上。2. 過(guò)程型數(shù)據(jù)完整性過(guò)程型數(shù)據(jù)完整性是指由某個(gè)過(guò)程引發(fā)

5、而實(shí)施的數(shù)據(jù)完整性。一般先寫(xiě)出實(shí)施數(shù)據(jù)完整性的條件,再寫(xiě)出強(qiáng)制該條件所執(zhí)行的用于保證數(shù)據(jù)完整性的腳本。通常由觸發(fā)器和存儲(chǔ)過(guò)程實(shí)現(xiàn)。過(guò)程型數(shù)據(jù)完整性也可以在客戶機(jī)和服務(wù)器上使用其它編程語(yǔ)言和工具實(shí)現(xiàn)。,4,5.4.3 約束1.約束的定義和類(lèi)型約束是SQL Server提供的自動(dòng)保持?jǐn)?shù)據(jù)庫(kù)完整性的一種方法 。列級(jí)約束:列級(jí)約束是行定義的一部分,只能夠應(yīng)用在一列上。表級(jí)約束:表級(jí)約束的定義獨(dú)立于列的定義,可以應(yīng)用在一個(gè)表中的多列上。

6、約束有六種類(lèi)型:非空約束、缺省約束、檢查約束、主鍵約束、唯一約束、外鍵約束(參照約束)。非空約束(NOT NULL):表中的某些列必須存在有效值,不允許有空值出現(xiàn)。這是最簡(jiǎn)單的數(shù)據(jù)完整性約束,可在建表時(shí)將該列聲明為NOT NULL即可。缺省約束(DEFALUT CONSTRAINTS):當(dāng)向數(shù)據(jù)庫(kù)中的表插入數(shù)據(jù)時(shí),如果用戶沒(méi)有明確給出某列的值,SQL Server自動(dòng)為該列輸入指定值。,5,檢查約束(CHECK CONSTRAINT

7、S):限制插入列中的值的范圍。主鍵約束(PRIMARY KEY CONSTRAINTS):要求主鍵的列上沒(méi)有兩行具有相同值,也沒(méi)有空值。唯一約束(UNIQUE CONSTRAINTS):要求表中所有行在指定的列上沒(méi)有完全相同的列值。外鍵約束(FROEIGN KEY CONSTRAINTS):要求正被插入或更新的列(外鍵)的新值,必須在被參照表(主表)的相應(yīng)列(主鍵)中已經(jīng)存在。,6,不同的約束強(qiáng)制不同類(lèi)型的數(shù)據(jù)完整性。表中 給出了

8、兩者的對(duì)應(yīng)關(guān)系。,7,2.使用T-SQL語(yǔ)言創(chuàng)建、管理約束(1)使用CREATE TABLE語(yǔ)句創(chuàng)建約束使用CREATE TABLE語(yǔ)句創(chuàng)建約束的一般語(yǔ)法如下:CREATE TABLE table_name(column_name data_type[[CONSTRAINT constraint_name]{PRIMARY KEY [CLUSTERED | NONCLUSTERED]| UNIQUE [CLUSTERED

9、| NONCLUSTERED]| [FOREIGN KEY] REFERENCES ref_table [(ref_column) ]| DEFAULT constant_expression| CHECK(logical_expression)}] [,...n]),8,其中:table_name:創(chuàng)建約束所在的表的名稱(chēng)。column_name:列名。 data_type:數(shù)據(jù)類(lèi)型。constraint_name:約

10、束名。在創(chuàng)建、修改、實(shí)現(xiàn)約束時(shí)注意以下幾點(diǎn):① 可以在已有的表上創(chuàng)建、修改、刪除約束,而不必刪除并重建表。② 可以在應(yīng)用程序中創(chuàng)建錯(cuò)誤檢查邏輯,測(cè)試是否違反約束。③ 在給表添加約束時(shí),SQL將驗(yàn)證表中已有數(shù)據(jù)是否滿足正在添加的約束。,9,⑵ 缺省約束缺省約束是指當(dāng)向數(shù)據(jù)庫(kù)中的表插入數(shù)據(jù)時(shí),如果用戶沒(méi)有明確給出某列的值時(shí),SQL Server自動(dòng)為該列輸入的值,缺省約束用于實(shí)現(xiàn)域的完整性。創(chuàng)建DEFAULT約束時(shí)應(yīng)考慮以下因素

11、:DEFAULT約束只能用于INSERT語(yǔ)句不能用于具有IDENTITY屬性的列每列只能有一個(gè)DEFAULT約束【例1】 為數(shù)據(jù)庫(kù)JWGL中表teacher的SEX(性別)字段創(chuàng)建一個(gè)缺省約束,缺省值為1(男)USE JWGLGOALTER TABLE teacherADD CONSTRAINT default_sex DEFAULT 1 FOR SEX,10,⑶ 檢查約束檢查約束用來(lái)指定某列可取值的清

12、單、可取值的集合或可取值的范圍。檢查約束主要用于實(shí)現(xiàn)域完整性。創(chuàng)建CHECK約束時(shí)應(yīng)考慮以下因素:當(dāng)向數(shù)據(jù)庫(kù)中的表執(zhí)行插入或更新操作時(shí),檢查插入的新列值是否滿足CHECK約束條件不能在具有IDENTITY屬性,或具有timestamp或uniqueidentifier數(shù)據(jù)類(lèi)型的列上放置CHECK約束CHECK條件不能含有子查詢【例2】 為數(shù)據(jù)庫(kù)JWGL中表student_course 的GRADE(成績(jī))字段創(chuàng)建一個(gè)檢查約束,

13、使得GRADE的值在0-100之間。USE JWGLGOALTER TABLE student_courseADD CONSTRAINT check_grade CHECK (grade>=0 and grade<=100),11,⑷ 主鍵約束主鍵約束保證某一列或一組列值的組合相對(duì)于表中的每一行都是唯一的,主鍵約束創(chuàng)建在表的主鍵列上,它對(duì)實(shí)現(xiàn)實(shí)體完整性更加有用。主鍵約束的作用就是為表創(chuàng)建主鍵。創(chuàng)建P

14、RIMARY KEY約束時(shí)應(yīng)考慮以下因素:每個(gè)表只能有一個(gè)主鍵,并且必須有一個(gè)主鍵 ;不允許有空值;參照約束使用它作為維護(hù)參照完整性的參考點(diǎn);創(chuàng)建主鍵時(shí),在創(chuàng)建主鍵的列上創(chuàng)建了一個(gè)唯一索引,可以是聚簇索引,也可以是非聚簇索引,默認(rèn)是聚簇索引?!纠?】 將數(shù)據(jù)庫(kù)JWGL中teacher表的teacher_id(教師號(hào))字段設(shè)為主鍵。 USE JWGLGOALTER TABLE teacher ADD

15、CONSTRAINT PK_teacher_id PRIMARY KEY clustered (teacher_id),12,⑸ 唯一約束唯一約束限制表中指定列上所有的非空值必須唯一,即表中任意兩行在指定列上都不允許有相同的值。創(chuàng)建UNIQUE約束時(shí)應(yīng)考慮以下因素:一個(gè)表可以放置多個(gè)UNIQUE約束允許有空值創(chuàng)建唯一索引時(shí)強(qiáng)制UNIQUE約束【例4】 將數(shù)據(jù)庫(kù)JWGL中teacher表的teacher_id(教師號(hào)

16、)字段設(shè)為唯一約束。 USE JWGLGOALTER TABLE department ADD CONSTRAINT unique_department_name UNIQUE nonclustered (department_name),13,唯一約束和主鍵約束的區(qū)別:唯一約束與主鍵約束都為指定的列建立唯一索引,即不允許唯一索引的列上有相同的值。主鍵約束限制更嚴(yán)格,不但不允許有重復(fù)值,而且也不允許有空值。 唯

17、一約束與主鍵約束產(chǎn)生的索引可以是聚簇索引也可以是非聚簇索引,但在缺省情況下唯一約束產(chǎn)生非聚簇索引,主鍵約束產(chǎn)生聚簇索引。⑹ 外鍵約束通過(guò)外鍵約束強(qiáng)制參照完整性。SQL Server提供了外鍵/主鍵值約束。即滿足以下兩點(diǎn):① 存在外鍵時(shí),被參照表中這一行不能刪除。② 向子表插入記錄或更新子表中外鍵值的前提是,必須保證這個(gè)外鍵值與主表中主鍵的某個(gè)值相等或者該外鍵值為空,否則不允許插入或修改外鍵值。,14,創(chuàng)建FOREIGN KEY約

18、束時(shí)應(yīng)考慮以下因素:它提供一列或多列數(shù)據(jù)的參照完整性。FOREIGN KEY約束不自動(dòng)創(chuàng)建索引。但如果考慮數(shù)據(jù)庫(kù)的多表連接,建議為外鍵創(chuàng)建一個(gè)索引,以提高連接性能主鍵與外鍵的數(shù)據(jù)類(lèi)型和長(zhǎng)度必須一致,或系統(tǒng)可轉(zhuǎn)換【例5】為表teacher創(chuàng)建外鍵department_id,外鍵department_id參考表department中的主鍵department_id。USE JWGLGOALTER TABLE teacher

19、ADD CONSTRAINT FK_department_id FOREIGN KEY (department_id)REFERENCES department(department_id)GO,15,3. 使用企業(yè)管理器管理約束創(chuàng)建缺省約束 創(chuàng)建缺省約束的具體步驟如下:① 啟動(dòng)企業(yè)管理器。② 分別點(diǎn)擊“數(shù)據(jù)庫(kù)”、“JWGL”、“表”,顯示數(shù)據(jù)庫(kù)JWGL中所有的表。③ 右擊要設(shè)置缺省的表(假設(shè)要設(shè)置缺省的表為te

20、acher),在系統(tǒng)彈出的快捷菜單上點(diǎn)擊“設(shè)計(jì)表”,④ 點(diǎn)擊設(shè)置缺省的列,在下面列屬性設(shè)置欄的默認(rèn)值輸入框中,輸入對(duì)應(yīng)缺省值即可。 創(chuàng)建檢查約束創(chuàng)建主鍵約束創(chuàng)建唯一性約束 創(chuàng)建外鍵約束,16,5.4.4 使用默認(rèn)值1. 默認(rèn)值的定義默認(rèn)值是數(shù)據(jù)庫(kù)對(duì)象之一,它指定在向數(shù)據(jù)庫(kù)中的表插入數(shù)據(jù)時(shí),如果用戶沒(méi)有明確給出某列的值,SQL Server自動(dòng)為該列使用此默認(rèn)值。它是實(shí)現(xiàn)數(shù)據(jù)完整性的方法之一。在關(guān)系數(shù)據(jù)庫(kù)中,每個(gè)列都必須包

21、含有值,即使這個(gè)值是個(gè)空值。對(duì)于不接受空值的列,就必須為該列輸入某個(gè)非空值,要么由用戶明確輸入,要么由SQL Server輸入默認(rèn)值。默認(rèn)值可用于表中的列和用戶定義數(shù)據(jù)類(lèi)型。請(qǐng)注意,缺省約束中使用的缺省值可以由用戶創(chuàng)建時(shí)輸入,也可以通過(guò)綁定已創(chuàng)建的默認(rèn)值來(lái)指定。在創(chuàng)建默認(rèn)值時(shí),請(qǐng)考慮以下幾點(diǎn):默認(rèn)值需和它要綁定的列或用戶定義數(shù)據(jù)類(lèi)型具有相同的數(shù)據(jù)類(lèi)型。默認(rèn)值需符合該列的所有規(guī)則。默認(rèn)值缺省還需符合所有CHECK約束。創(chuàng)建、管

22、理默認(rèn)值可以用T-SQL語(yǔ)言也可以用企業(yè)管理器,17,2. 使用T-SQL語(yǔ)言創(chuàng)建默認(rèn)值:⑴ 創(chuàng)建默認(rèn)值的語(yǔ)法 CREATE DEFAULT default_name AS constant_expression這里:default_name:新建默認(rèn)值的名稱(chēng),它必須遵循SQL Server標(biāo)識(shí)符的命名規(guī)則。constant_expression:默認(rèn)值default_name的值,是一個(gè)常數(shù)表達(dá)式,在這個(gè)表達(dá)式中不能含有任

23、何列名或其他數(shù)據(jù)庫(kù)對(duì)象名,但可使用不涉及數(shù)據(jù)庫(kù)對(duì)象的SQL Server內(nèi)部函數(shù)。默認(rèn)值創(chuàng)建后,可以使用系統(tǒng)存儲(chǔ)過(guò)程sp_helptext可以查看用于定義一個(gè)默認(rèn)值的SQL腳本。其語(yǔ)法是: sp_helptext default_name,18,⑵ 默認(rèn)值的綁定默認(rèn)值創(chuàng)建之后,只有將其綁定到某個(gè)列或用戶自定義數(shù)據(jù)類(lèi)型才能有效。使用系統(tǒng)存儲(chǔ)過(guò)程sp_bindefault可實(shí)現(xiàn)與表中的列及用戶自定義數(shù)據(jù)類(lèi)型的綁定。一個(gè)

24、默認(rèn)值可以綁定到多個(gè)列或用戶自定義數(shù)據(jù)類(lèi)型。綁定默認(rèn)值的語(yǔ)法是: sp_bindefault default_name, ‘object_name’其中:default_name :由CREATE DEFAULT 語(yǔ)句創(chuàng)建的默認(rèn)值名字,它將與指定的列或用戶定義數(shù)據(jù)類(lèi)型相綁定。object_name :要與該默認(rèn)值相綁定的列名或用戶自定義數(shù)據(jù)類(lèi)型名。如果指定的是表中的列,其格式為‘table_name.column’;否則

25、被認(rèn)為是用戶自定義數(shù)據(jù)類(lèi)型名。,19,默認(rèn)值綁定的幾點(diǎn)考慮:① 綁定的默認(rèn)值只適用于受INSERT語(yǔ)句影響的行。② 不能將默認(rèn)值綁定到系統(tǒng)數(shù)據(jù)類(lèi)型或timestamp列。③ 若綁定了一個(gè)默認(rèn)值到一用戶定義數(shù)據(jù)類(lèi)型,又給使用該數(shù)據(jù)類(lèi)型的列綁定了一個(gè)不同的默認(rèn)值或規(guī)則,則綁定到列的默認(rèn)值和規(guī)則有效。⑶ 默認(rèn)值綁定的解除一個(gè)默認(rèn)值被綁定到表中的列或用戶自定義的數(shù)據(jù)類(lèi)型之后,可使用系統(tǒng)存儲(chǔ)過(guò)程sp_unbinddefault解除其綁定

26、。綁定解除后,作為數(shù)據(jù)庫(kù)對(duì)象的默認(rèn)值仍然存在于數(shù)據(jù)庫(kù)中。解除默認(rèn)值綁定的語(yǔ)法是: sp_unbindefault ‘object_name’ object_name :要解除和默認(rèn)值綁定的表的列名或用戶自定義數(shù)據(jù)類(lèi)型名。如果指定的是表中的列,其格式為“table_name.column”,否則被認(rèn)為是用戶定義數(shù)據(jù)類(lèi)型名。,20,⑷ 默認(rèn)值綁定的刪除如果一個(gè)默認(rèn)值不再使用了,可以用DROP語(yǔ)句將其刪除。刪除默

27、認(rèn)值的語(yǔ)法是: DROP DEFAULT default_name default_name :要?jiǎng)h除默認(rèn)值的名稱(chēng)。在刪除默認(rèn)值時(shí),應(yīng)注意以下幾點(diǎn):① DROP將默認(rèn)值從數(shù)據(jù)庫(kù)中刪除。② 如果要?jiǎng)h除一個(gè)默認(rèn)值,必須解除這個(gè)默認(rèn)值的所有綁定,否則該默認(rèn)值就不能被刪除掉。③ 在一個(gè)批中不能既定義默認(rèn)值又同時(shí)使用默認(rèn)值。④ 只有默認(rèn)值的創(chuàng)建者可以刪除默認(rèn)值。,21,【例6】 為數(shù)據(jù)庫(kù)JWGL創(chuàng)建一個(gè)名為profession_

28、default ,值為“講師”的默認(rèn)值,并綁定到表teacher的profession列,然后解除這個(gè)綁定,綁定解除后將此默認(rèn)值刪除。USE JWGLGOCREATE DEFAULT profession_default AS '講師'GOsp_bindefault profession_default , 'teacher.profession'GOsp_unbindefault

29、'teacher.profession'DROP DEFAULT profession_defaultGO,22,5.4.5 規(guī)則1. 規(guī)則的定義規(guī)則是數(shù)據(jù)庫(kù)對(duì)象之一。它指定向表的某列(或使用與該規(guī)則綁定的用戶定義數(shù)據(jù)類(lèi)型的所有列)插入或更新數(shù)據(jù)時(shí),限制輸入新值的取值范圍。一個(gè)規(guī)則可以是:值的清單或值的集合;值的范圍;必須滿足的單值條件;用like子句定義的編輯掩碼;規(guī)則是實(shí)現(xiàn)域完整性的方法之一。規(guī)

30、則用來(lái)驗(yàn)證一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)是否處于一個(gè)指定的值域范圍內(nèi),是否與特定的格式相匹配。當(dāng)數(shù)據(jù)庫(kù)中數(shù)據(jù)值被更新或被插入時(shí),就要檢查新值是否遵循規(guī)則,如果不符合規(guī)則就拒絕執(zhí)行此更新或插入的操作。,23,規(guī)則可用于表中列或用戶定義數(shù)據(jù)類(lèi)型。規(guī)則在實(shí)現(xiàn)功能上等同于CHECK約束。用CREATE RULE語(yǔ)句創(chuàng)建規(guī)則,然后用sp_bindrule把它綁定至一列或用戶定義的數(shù)據(jù)類(lèi)型。使用系統(tǒng)存儲(chǔ)過(guò)程sp_helptext查看用于定義一個(gè)規(guī)則或缺省的S

31、QL腳本。其語(yǔ)法是: sp_helptext rule_name在創(chuàng)建規(guī)則時(shí),應(yīng)考慮以下幾點(diǎn):① 缺省情況下,規(guī)則將檢查創(chuàng)建和綁定規(guī)則之前輸入的數(shù)據(jù)。② 規(guī)則可以綁定到一列、多列或數(shù)據(jù)庫(kù)中的用戶定義數(shù)據(jù)類(lèi)型。③ 規(guī)則要求一個(gè)值在一定范圍內(nèi),并與特定格式相匹配。④ 在一個(gè)列上至多有一個(gè)規(guī)則起作用,如果有多個(gè)規(guī)則與一列相綁定,那么只有最后綁定到該列的規(guī)則才是有效的。,24,2. 使用T-SQL語(yǔ)言創(chuàng)建、管理規(guī)則

32、⑴ 創(chuàng)建規(guī)則的語(yǔ)法是:CREATE RULE rule_name AS condition_expression rule_name:創(chuàng)建規(guī)則的名稱(chēng),應(yīng)遵循SQL Server標(biāo)識(shí)符的命名規(guī)范。 condition_expression:指明定義規(guī)則的條件,在這個(gè)條件表達(dá)式中不能包含列名或其他數(shù)據(jù)庫(kù)對(duì)象名,但它帶有一個(gè)@為前綴的參數(shù)(即參數(shù)的名字必須以@為第一個(gè)字符),也稱(chēng)空間標(biāo)志符( spaceholder)。意即這個(gè)規(guī)則被附

33、加到這個(gè)空間標(biāo)志符,它只在規(guī)則定義中引用,為數(shù)據(jù)項(xiàng)值在內(nèi)存中保留空間,以便與規(guī)則作比較。⑵ 規(guī)則的綁定規(guī)則創(chuàng)建之后,只有將其綁定到某個(gè)列或用戶自定義數(shù)據(jù)類(lèi)型才能有效。使用系統(tǒng)存儲(chǔ)過(guò)程sp_binderule可實(shí)現(xiàn)與表中的列及用戶自定義數(shù)據(jù)類(lèi)型的綁定。綁定規(guī)則的語(yǔ)法是: sp_bindrule rule_name, object_name,25,其中:rule_name :由CREATE RULE語(yǔ)句創(chuàng)建的規(guī)則名字,它將與指定的列

34、或用戶定義數(shù)據(jù)類(lèi)型相捆綁。object_name :指定要與該規(guī)則相綁定的列名或用戶定義數(shù)據(jù)類(lèi)型名。如果指定的是表中的列,其格式為“table.column”,否則被認(rèn)為是用戶定義數(shù)據(jù)類(lèi)型名。綁定時(shí)應(yīng)注意如下幾點(diǎn):① 綁定的缺省只適用于受INSERT語(yǔ)句影響的行。② 綁定的規(guī)則只適用于受INSERT和UPDATE語(yǔ)句影響的行。③ 不能將缺省或規(guī)則綁定到系統(tǒng)數(shù)據(jù)類(lèi)型或timestamp列。,26,⑶ 解除規(guī)則使用系統(tǒng)存儲(chǔ)過(guò)程s

35、p_unbindrule可以解除由sp_unbindrule綁定到列或用戶定義數(shù)據(jù)類(lèi)型的規(guī)則。但被解除的規(guī)則仍然存在于數(shù)據(jù)庫(kù)中。 解除規(guī)則的語(yǔ)法如下: sp_unbindrule rule_name , object_name其中:rule_name:由CREATE RULE語(yǔ)句創(chuàng)建的規(guī)則名字,它將與指定的列或用戶定義數(shù)據(jù)類(lèi)型相捆綁。object_name:指定要解除與該規(guī)則相綁定的列名或用戶定義數(shù)據(jù)類(lèi)型名。如果

36、指定的是表中的列,其格式為table.column;否則被認(rèn)為是用戶定義數(shù)據(jù)類(lèi)型名。,27,⑷ 刪除規(guī)則使用DROP RULE可刪除由CREATE RULE命令創(chuàng)建的規(guī)則。刪除規(guī)則的語(yǔ)法如下: DROP RULE [owner.] rule_name其中:rule_name:要解除的規(guī)則。在刪除規(guī)則時(shí),應(yīng)注意以下幾點(diǎn):① 使用DROP可將規(guī)則從數(shù)據(jù)庫(kù)中刪除。② 在刪除規(guī)則之前需先從列中或用戶定義數(shù)據(jù)類(lèi)型中解除

37、綁定。③ 只有規(guī)則定義者可以刪除規(guī)則。,28,【例7】 為數(shù)據(jù)庫(kù)JWGL創(chuàng)建一個(gè)規(guī)則grade_rule ,grade_rule的值大于等于0,小于等于100,并綁定到表student_course的grade列,然后解除這個(gè)綁定,綁定解除后將此規(guī)則刪除。USE JWGLGOcreate rule grade_rule as @grade>=0 and @grade<=100GOsp_bindrule gra

38、de_rule , 'student_course.grade'GOsp_unbindrule 'student_course.grade'GOdrop rule grade_rule,29,5.4.6 使用標(biāo)識(shí)列1. 標(biāo)識(shí)列的定義 IDENTITY屬性使得某一列的取值是基于上一行的列值和為該列定義的步長(zhǎng)自動(dòng)生成的。IDENTITY列的值可以唯一地標(biāo)識(shí)表中的一行,可以用于實(shí)現(xiàn)實(shí)體完整性。

39、有關(guān)DENTITY列屬性的特點(diǎn)及定義DENTITY列時(shí)的注意事項(xiàng),本章第一節(jié)已經(jīng)介紹。2. 用T-SQL語(yǔ)言定義標(biāo)識(shí)列⑴ 定義標(biāo)識(shí)列的語(yǔ)法: ALETR TABLE table_name ADD column_name data_type IDENTITY(seed , increment),30,table_name:要添加標(biāo)識(shí)列的表名。 column_name:要添加的標(biāo)識(shí)列的名稱(chēng)。 data_type:要添加

溫馨提示

  • 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ù)僅提供信息存儲(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)論