版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2022-1-2611第第9章章 數(shù)據(jù)完整性數(shù)據(jù)完整性2022-1-2622本章內(nèi)容本章內(nèi)容n 9.1 數(shù)據(jù)完整性數(shù)據(jù)完整性n 9.2 約束約束n 9.3 規(guī)則規(guī)則n 9.4 默認(rèn)值默認(rèn)值2022-1-26339.1 數(shù)據(jù)完整性數(shù)據(jù)完整性數(shù)據(jù)完整性是指數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù)的一致性和正確性,數(shù)據(jù)完整性是指數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù)的一致性和正確性,確保各個(gè)文件或表中的數(shù)據(jù)值的關(guān)系一致,確保數(shù)據(jù)庫(kù)中的確保各個(gè)文件或表中的數(shù)據(jù)值的關(guān)系一致,確保數(shù)據(jù)庫(kù)中的數(shù)據(jù)可以成功和正確地更新數(shù)據(jù)可以成功和正確地更新 。數(shù)據(jù)庫(kù)設(shè)計(jì)的一項(xiàng)重要內(nèi)容是確定如何加強(qiáng)數(shù)據(jù)的完整數(shù)據(jù)庫(kù)設(shè)計(jì)的一項(xiàng)重要內(nèi)容是確定如何加強(qiáng)數(shù)據(jù)的完整性。性。202
2、2-1-26449.1 數(shù)據(jù)完整性數(shù)據(jù)完整性n 關(guān)系數(shù)據(jù)完整性關(guān)系數(shù)據(jù)完整性關(guān)系數(shù)據(jù)完整性包括一下內(nèi)容:關(guān)系數(shù)據(jù)完整性包括一下內(nèi)容:(1) 實(shí)體完整性實(shí)體完整性實(shí)體完整性就是把表中每一條記錄看作一個(gè)實(shí)體,要求實(shí)體完整性就是把表中每一條記錄看作一個(gè)實(shí)體,要求所有行都具有唯一標(biāo)識(shí),即主鍵,且主鍵的值非空,又稱(chēng)為所有行都具有唯一標(biāo)識(shí),即主鍵,且主鍵的值非空,又稱(chēng)為行完整性行完整性 。(2) 域完整性域完整性域完整性是關(guān)于數(shù)據(jù)列取值有效性的限制域完整性是關(guān)于數(shù)據(jù)列取值有效性的限制 。域完整性通。域完整性通常用有效性檢查來(lái)實(shí)現(xiàn),也可以通過(guò)限制數(shù)據(jù)類(lèi)型、格式或常用有效性檢查來(lái)實(shí)現(xiàn),也可以通過(guò)限制數(shù)據(jù)類(lèi)型、
3、格式或者可能的取值范圍來(lái)實(shí)現(xiàn)者可能的取值范圍來(lái)實(shí)現(xiàn) 。例如,對(duì)于例如,對(duì)于teaching數(shù)據(jù)庫(kù)中數(shù)據(jù)庫(kù)中s_c表中,表中,GRADE字段的取字段的取值只能是從值只能是從0到到100的整數(shù)值,而不能為其他數(shù)值的整數(shù)值,而不能為其他數(shù)值 。2022-1-26559.1 數(shù)據(jù)完整性數(shù)據(jù)完整性(3) 參照完整性參照完整性參照完整性是對(duì)外鍵取值有效性的限制,以確保數(shù)據(jù)在參照完整性是對(duì)外鍵取值有效性的限制,以確保數(shù)據(jù)在另一個(gè)參照表的取值范圍內(nèi)另一個(gè)參照表的取值范圍內(nèi) 。參照完整性要求外鍵的取值只。參照完整性要求外鍵的取值只能取參照表中的有效值或空值能取參照表中的有效值或空值 。如果在參考表中某一記錄的。
4、如果在參考表中某一記錄的主鍵被依賴(lài)表中的外部鍵參考,那么這一記錄既不能刪除,主鍵被依賴(lài)表中的外部鍵參考,那么這一記錄既不能刪除,也不能修改其主鍵值,以確保關(guān)鍵字的一致性也不能修改其主鍵值,以確保關(guān)鍵字的一致性 。(4) 用戶(hù)定義完整性用戶(hù)定義完整性用戶(hù)定義完整性允許特定的不屬于上述類(lèi)別規(guī)則的完整用戶(hù)定義完整性允許特定的不屬于上述類(lèi)別規(guī)則的完整性定義,前面的性定義,前面的3個(gè)完整性類(lèi)型都支持用戶(hù)定義完整性。個(gè)完整性類(lèi)型都支持用戶(hù)定義完整性。實(shí)現(xiàn)用戶(hù)定義完整性,可以有兩種方法,即聲明數(shù)據(jù)完實(shí)現(xiàn)用戶(hù)定義完整性,可以有兩種方法,即聲明數(shù)據(jù)完整性和過(guò)程數(shù)據(jù)完整性。整性和過(guò)程數(shù)據(jù)完整性。 2022-1-2
5、6669.1 數(shù)據(jù)完整性數(shù)據(jù)完整性 聲明數(shù)據(jù)完整性聲明數(shù)據(jù)完整性聲明數(shù)據(jù)完整性是通過(guò)在對(duì)象定義中定義的標(biāo)準(zhǔn)來(lái)實(shí)現(xiàn)聲明數(shù)據(jù)完整性是通過(guò)在對(duì)象定義中定義的標(biāo)準(zhǔn)來(lái)實(shí)現(xiàn)數(shù)據(jù)完整性,是由系統(tǒng)本身的自動(dòng)強(qiáng)制來(lái)實(shí)現(xiàn)的,它包括使數(shù)據(jù)完整性,是由系統(tǒng)本身的自動(dòng)強(qiáng)制來(lái)實(shí)現(xiàn)的,它包括使用各種約束、缺省的規(guī)則。用各種約束、缺省的規(guī)則。 過(guò)程數(shù)據(jù)完整性過(guò)程數(shù)據(jù)完整性 過(guò)程數(shù)據(jù)完整性是通過(guò)在腳本語(yǔ)言中定義的完整性標(biāo)準(zhǔn)過(guò)程數(shù)據(jù)完整性是通過(guò)在腳本語(yǔ)言中定義的完整性標(biāo)準(zhǔn)來(lái)實(shí)現(xiàn)的,當(dāng)執(zhí)行這些腳本時(shí),就可以強(qiáng)制完整性的實(shí)現(xiàn)來(lái)實(shí)現(xiàn)的,當(dāng)執(zhí)行這些腳本時(shí),就可以強(qiáng)制完整性的實(shí)現(xiàn) 。過(guò)程數(shù)據(jù)完整性的方式包括使用觸發(fā)器和存儲(chǔ)過(guò)程等。過(guò)程數(shù)據(jù)
6、完整性的方式包括使用觸發(fā)器和存儲(chǔ)過(guò)程等。2022-1-26779.1 數(shù)據(jù)完整性數(shù)據(jù)完整性n SQL Server 2005中的數(shù)據(jù)完整性中的數(shù)據(jù)完整性 各類(lèi)數(shù)據(jù)完整性和對(duì)應(yīng)實(shí)現(xiàn)完整性的各類(lèi)數(shù)據(jù)完整性和對(duì)應(yīng)實(shí)現(xiàn)完整性的SQL Server組件如表組件如表9.1所示所示 。數(shù)據(jù)完整性數(shù)據(jù)完整性 對(duì)應(yīng)的對(duì)應(yīng)的SQL Server組件組件 實(shí)體完整性實(shí)體完整性 PRIMARY KEY(主鍵主鍵)約束、約束、UNIQUE(唯一唯一)約束約束UNIQUE INDEX(唯一索引唯一索引)、IDENTITY COLUMN(標(biāo)識(shí)列標(biāo)識(shí)列) 域完整性域完整性 DEFAULT(默認(rèn)值默認(rèn)值)、CHECK(檢查檢查
7、)約束、約束、RULE(規(guī)則規(guī)則)FOREIGN KEY(外鍵外鍵)約束、約束、DATA TYPE(數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型) 參照完整性參照完整性 FOREIGN KEY (外鍵外鍵)約束、約束、CHECK (檢查檢查)約束約束TRIGGER(觸發(fā)器觸發(fā)器)、STORED PROCEDURE(存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程) 用戶(hù)定義完整性用戶(hù)定義完整性 RULE(規(guī)則規(guī)則)、TRIGGER(觸發(fā)器觸發(fā)器)、STORED PROCEDURE(存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程)2022-1-26889.1 數(shù)據(jù)完整性數(shù)據(jù)完整性(1) 空值空值數(shù)據(jù)表中的列可以接受空值,也可以拒絕空值。在數(shù)據(jù)數(shù)據(jù)表中的列可以接受空值,也可以拒絕空值。
8、在數(shù)據(jù)庫(kù)中,庫(kù)中,NULL是一個(gè)特殊值,表示未知值的概念。是一個(gè)特殊值,表示未知值的概念。NULL不同于空字符或不同于空字符或0。空字符是一個(gè)有效的字符,??兆址且粋€(gè)有效的字符,0是是一個(gè)有效的數(shù)字。一個(gè)有效的數(shù)字。NULL只是表示此值未知這一概念。只是表示此值未知這一概念。NULL也不同于零長(zhǎng)度字符串也不同于零長(zhǎng)度字符串(空串空串)。如果列定義中包含如果列定義中包含NOT NULL子句,則不能為該列輸入子句,則不能為該列輸入NULL值。如果列定義中僅包含值。如果列定義中僅包含NULL關(guān)鍵字,則接受關(guān)鍵字,則接受NULL值值 2022-1-26999.1 數(shù)據(jù)完整性數(shù)據(jù)完整性(2) 約束約束
9、約束定義關(guān)于列中允許值的規(guī)則,是強(qiáng)制實(shí)施完整性的約束定義關(guān)于列中允許值的規(guī)則,是強(qiáng)制實(shí)施完整性的標(biāo)準(zhǔn)機(jī)制。使用約束優(yōu)先于使用標(biāo)準(zhǔn)機(jī)制。使用約束優(yōu)先于使用DML觸發(fā)器觸發(fā)器、規(guī)則規(guī)則和和默認(rèn)默認(rèn)值值 。 約束類(lèi)型約束類(lèi)型SQL Server 2005有下列約束類(lèi)型有下列約束類(lèi)型 : NOT NULL約束約束 :非空約束,指定列不接受:非空約束,指定列不接受NULL值值 . CHECK約束約束 :檢查約束,通過(guò)限制可輸入到列中的值:檢查約束,通過(guò)限制可輸入到列中的值來(lái)強(qiáng)制實(shí)施域完整性來(lái)強(qiáng)制實(shí)施域完整性 。a. UNIQUE約束:唯一約束,強(qiáng)制實(shí)施列取值集合中值的約束:唯一約束,強(qiáng)制實(shí)施列取值集合中
10、值的唯一性。主鍵強(qiáng)制實(shí)施唯一性,但主鍵不允許唯一性。主鍵強(qiáng)制實(shí)施唯一性,但主鍵不允許NULL作為一作為一個(gè)唯一值。個(gè)唯一值。2022-1-2610109.1 數(shù)據(jù)完整性數(shù)據(jù)完整性d. PRIMARY KEY約束:主鍵約束,標(biāo)識(shí)具有唯一標(biāo)識(shí)約束:主鍵約束,標(biāo)識(shí)具有唯一標(biāo)識(shí)表中行的值的列或列集表中行的值的列或列集 。e. FOREIGN KEY約束:外鍵約束,標(biāo)識(shí)并強(qiáng)制實(shí)施表約束:外鍵約束,標(biāo)識(shí)并強(qiáng)制實(shí)施表之間的關(guān)系之間的關(guān)系 。 列約束和表約束列約束和表約束 列約束指定為列定義的一部分,并且只應(yīng)用于該列。表列約束指定為列定義的一部分,并且只應(yīng)用于該列。表約束的聲明與列定義無(wú)關(guān),可以應(yīng)用于表中多個(gè)
11、列約束的聲明與列定義無(wú)關(guān),可以應(yīng)用于表中多個(gè)列 。當(dāng)一個(gè)。當(dāng)一個(gè)約束中必須包含多個(gè)列時(shí),應(yīng)使用表約束。約束中必須包含多個(gè)列時(shí),應(yīng)使用表約束。2022-1-2611119.1 數(shù)據(jù)完整性數(shù)據(jù)完整性(3) 規(guī)則規(guī)則規(guī)則用于執(zhí)行一些與規(guī)則用于執(zhí)行一些與CHECK約束相同的功能。使用約束相同的功能。使用CHECK約束是限制列值的首選標(biāo)準(zhǔn)方法。約束是限制列值的首選標(biāo)準(zhǔn)方法。CHECK約束還約束還比規(guī)則更簡(jiǎn)明。一個(gè)列只能應(yīng)用一個(gè)規(guī)則,但可以應(yīng)用多個(gè)比規(guī)則更簡(jiǎn)明。一個(gè)列只能應(yīng)用一個(gè)規(guī)則,但可以應(yīng)用多個(gè)CHECK約束。約束。CHECK約束被指定為約束被指定為CREATE TABLE語(yǔ)句語(yǔ)句的一部分,而規(guī)則是作
12、為單獨(dú)的對(duì)象創(chuàng)建,然后綁定到列上。的一部分,而規(guī)則是作為單獨(dú)的對(duì)象創(chuàng)建,然后綁定到列上。2022-1-2612129.1 數(shù)據(jù)完整性數(shù)據(jù)完整性(4) 默認(rèn)值默認(rèn)值如果插入行時(shí)沒(méi)有為列指定值,默認(rèn)值則指定列中默認(rèn)如果插入行時(shí)沒(méi)有為列指定值,默認(rèn)值則指定列中默認(rèn)取值。默認(rèn)值可以是計(jì)算結(jié)果為常量的任何值,例如常量、取值。默認(rèn)值可以是計(jì)算結(jié)果為常量的任何值,例如常量、內(nèi)置函數(shù)或數(shù)學(xué)表達(dá)式。內(nèi)置函數(shù)或數(shù)學(xué)表達(dá)式。若要應(yīng)用默認(rèn)值,可以通過(guò)在若要應(yīng)用默認(rèn)值,可以通過(guò)在CREATE TABLE中使用中使用DEFAULT關(guān)鍵字來(lái)創(chuàng)建默認(rèn)值定義。這將為每一列分配一關(guān)鍵字來(lái)創(chuàng)建默認(rèn)值定義。這將為每一列分配一個(gè)常量表
13、達(dá)式作為默認(rèn)值,也可以作為單獨(dú)的對(duì)象創(chuàng)建,然個(gè)常量表達(dá)式作為默認(rèn)值,也可以作為單獨(dú)的對(duì)象創(chuàng)建,然后綁定到列上。后綁定到列上。2022-1-2613139.2 約束約束約束是通過(guò)限制字段中數(shù)據(jù)、記錄中數(shù)據(jù)和表之間的數(shù)約束是通過(guò)限制字段中數(shù)據(jù)、記錄中數(shù)據(jù)和表之間的數(shù)據(jù)來(lái)保證數(shù)據(jù)完整性據(jù)來(lái)保證數(shù)據(jù)完整性 。約束獨(dú)立于表結(jié)構(gòu),創(chuàng)建約束有兩種方法約束獨(dú)立于表結(jié)構(gòu),創(chuàng)建約束有兩種方法 : 創(chuàng)建表時(shí)在創(chuàng)建表時(shí)在CREATE TABLE命令中聲明;命令中聲明; 在不改變表結(jié)構(gòu)的基礎(chǔ)上,通過(guò)修改表結(jié)構(gòu)命令在不改變表結(jié)構(gòu)的基礎(chǔ)上,通過(guò)修改表結(jié)構(gòu)命令A(yù)LTER TABLE添加或刪除添加或刪除 。當(dāng)表被刪除時(shí),表所帶
14、的所有約束定義也隨之被刪除。當(dāng)表被刪除時(shí),表所帶的所有約束定義也隨之被刪除。2022-1-2614149.2 約束約束表表9.2 所有可用的約束類(lèi)型所有可用的約束類(lèi)型完整性類(lèi)型完整性類(lèi)型 約束類(lèi)型約束類(lèi)型 域完整性域完整性 DEFAULT(默認(rèn)值默認(rèn)值)、CHECK(檢檢查查)約束約束 實(shí)體完整性實(shí)體完整性 PRIMARY KEY(主鍵主鍵)約束、約束、UNIQUE(唯一唯一)約束約束 參照完整性參照完整性 FOREIGN KEY(外鍵外鍵)約束約束 2022-1-2615159.2 約束約束n 主鍵約束主鍵約束在數(shù)據(jù)表中經(jīng)常有一列或多列的組合,其值能唯一地標(biāo)在數(shù)據(jù)表中經(jīng)常有一列或多列的組合,
15、其值能唯一地標(biāo)識(shí)表中的每一行。這樣的一列或多列稱(chēng)為表的主鍵識(shí)表中的每一行。這樣的一列或多列稱(chēng)為表的主鍵 。通過(guò)它可強(qiáng)制表的實(shí)體完整性,以確保數(shù)據(jù)表中數(shù)據(jù)的通過(guò)它可強(qiáng)制表的實(shí)體完整性,以確保數(shù)據(jù)表中數(shù)據(jù)的唯一性唯一性 。當(dāng)創(chuàng)建或更改表時(shí),可通過(guò)定義當(dāng)創(chuàng)建或更改表時(shí),可通過(guò)定義PRIMARY KEY (主鍵主鍵)約束來(lái)創(chuàng)建主鍵。約束來(lái)創(chuàng)建主鍵。2022-1-2616169.2 約束約束對(duì)于主鍵約束,需滿(mǎn)足以下規(guī)則。對(duì)于主鍵約束,需滿(mǎn)足以下規(guī)則。 一個(gè)表只能包含一個(gè)一個(gè)表只能包含一個(gè)PRIMARY KEY約束。約束。 由由PRIMARY KEY約束生成的索引不會(huì)使表中的非約束生成的索引不會(huì)使表中的非
16、聚集索引超過(guò)聚集索引超過(guò)249個(gè),聚集索引超過(guò)個(gè),聚集索引超過(guò)1個(gè)。個(gè)。 如果沒(méi)有為如果沒(méi)有為PRIMARY KEY約束指定約束指定CLUSTERED或或NONCLUSTERED,并且沒(méi)有為,并且沒(méi)有為UNIQUE約束指定約束指定聚集索引,則將對(duì)該聚集索引,則將對(duì)該P(yáng)RIMARY KEY約束使用約束使用CLUSTERED。 在在PRIMARY KEY約束中定義的所有列都必須定義約束中定義的所有列都必須定義為為NOT NULL。如果沒(méi)有指定為空性,則加入。如果沒(méi)有指定為空性,則加入PRIMARY KEY約束的所有列的為空性都將設(shè)置為約束的所有列的為空性都將設(shè)置為NOT NULL。2022-1-2
17、617179.2 約束約束(1) 創(chuàng)建表時(shí)聲明主鍵約束創(chuàng)建表時(shí)聲明主鍵約束 如果表的主鍵由單列組成,則該主鍵約束可以定義為該如果表的主鍵由單列組成,則該主鍵約束可以定義為該列的列約束。如果主鍵由兩個(gè)以上的列組成,則該主鍵約束列的列約束。如果主鍵由兩個(gè)以上的列組成,則該主鍵約束必須定義為表約束必須定義為表約束 。定義列級(jí)主鍵約束定義列級(jí)主鍵約束語(yǔ)法格式如下:語(yǔ)法格式如下: CONSTRAINT constraint_name PRIMARY KEY CLUSTERED | NONCLUSTERED 2022-1-2618189.2 約束約束 CONSTRAINT:可選關(guān)鍵字,表示:可選關(guān)鍵字,表
18、示PRIMARY KEY、NOT NULL、UNIQUE、FOREIGN KEY或或CHECK約束定約束定義的開(kāi)始義的開(kāi)始 。 constraint_name:約束的名稱(chēng)。約束名稱(chēng)必須在表所屬:約束的名稱(chēng)。約束名稱(chēng)必須在表所屬的架構(gòu)中唯一。的架構(gòu)中唯一。 PRIMARY KEY:是通過(guò)唯一索引對(duì)給定的一列或多列:是通過(guò)唯一索引對(duì)給定的一列或多列強(qiáng)制實(shí)體完整性的約束。每個(gè)表只能創(chuàng)建一個(gè)強(qiáng)制實(shí)體完整性的約束。每個(gè)表只能創(chuàng)建一個(gè) PRIMARY KEY 約束約束 。 CLUSTERED | NONCLUSTERED:指示為:指示為PRIMARY KEY約束創(chuàng)建聚集索引還是非聚集索引。約束創(chuàng)建聚集索引
19、還是非聚集索引。PRIMARY KEY約束默認(rèn)為約束默認(rèn)為CLUSTERED。2022-1-2619199.2 約束約束定義表級(jí)主鍵約束定義表級(jí)主鍵約束語(yǔ)法格式如下。語(yǔ)法格式如下。 CONSTRAINT constraint_name PRIMARY KEY CLUSTERED | NONCLUSTERED ( column_name ,.n ) 其中,其中,column_name ,.n 指定組成主鍵的列名,指定組成主鍵的列名,n最大最大值為值為16。2022-1-2620209.2 約束約束(2) 修改表時(shí)創(chuàng)建主鍵約束修改表時(shí)創(chuàng)建主鍵約束 語(yǔ)法格式如下。語(yǔ)法格式如下。ALTER TABLE
20、 table_nameADD CONSTRAINT Constraint_name PRIMARY KEY CLUSTERED | NONCLUSTERED ( column_name ,n ) 2022-1-2621219.2 約束約束例如:假設(shè)在例如:假設(shè)在teaching數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)中的s_c表中沒(méi)有設(shè)置主鍵表中沒(méi)有設(shè)置主鍵約束,以下示例通過(guò)約束,以下示例通過(guò)ALTER TABLE命令添加主鍵約束命令添加主鍵約束 。USE teachingGOALTER TABLE s_cADD CONSTRAINT PK_sc PRIMARY KEY (SNO, CNO)GO通過(guò)通過(guò)ALTER T
21、ABLE命令也可以刪除不使用的主鍵約束,命令也可以刪除不使用的主鍵約束,命令格式如下。命令格式如下。ALTER TABLE table_name DROP CONSTRAINT constraint_name2022-1-2622229.2 約束約束n 外鍵約束外鍵約束通過(guò)將用于保存表中主鍵值的一列或多列添加到另一個(gè)通過(guò)將用于保存表中主鍵值的一列或多列添加到另一個(gè)表中,可創(chuàng)建兩個(gè)表之間的鏈接。這個(gè)列就成為第二個(gè)表的表中,可創(chuàng)建兩個(gè)表之間的鏈接。這個(gè)列就成為第二個(gè)表的外鍵。外鍵。 外鍵用于建立和加強(qiáng)兩個(gè)表數(shù)據(jù)之間的鏈接的一列或多外鍵用于建立和加強(qiáng)兩個(gè)表數(shù)據(jù)之間的鏈接的一列或多列。列。 當(dāng)創(chuàng)建或更
22、改表時(shí),可以通過(guò)定義當(dāng)創(chuàng)建或更改表時(shí),可以通過(guò)定義FOREIGN KEY約束約束來(lái)創(chuàng)建外鍵。來(lái)創(chuàng)建外鍵。2022-1-2623239.2 約束約束對(duì)于外鍵約束,需要滿(mǎn)足以下規(guī)則。對(duì)于外鍵約束,需要滿(mǎn)足以下規(guī)則。 如果在如果在FOREIGN KEY約束的列中輸入非約束的列中輸入非NULL值,則此值必值,則此值必須在被引用列中存在;否則,將返回違反外鍵約束的錯(cuò)誤信息。須在被引用列中存在;否則,將返回違反外鍵約束的錯(cuò)誤信息。 FOREIGN KEY約束僅能引用位于同一服務(wù)器上的同一數(shù)據(jù)約束僅能引用位于同一服務(wù)器上的同一數(shù)據(jù)庫(kù)中的表。跨數(shù)據(jù)庫(kù)的參照完整性必須通過(guò)觸發(fā)器實(shí)現(xiàn)。庫(kù)中的表??鐢?shù)據(jù)庫(kù)的參照完整
23、性必須通過(guò)觸發(fā)器實(shí)現(xiàn)。 FOREIGN KEY約束可引用同一表中的其他列,此行為稱(chēng)為約束可引用同一表中的其他列,此行為稱(chēng)為自引用。自引用。 列級(jí)列級(jí)FOREIGN KEY約束的約束的REFERENCES子句只能列出一個(gè)子句只能列出一個(gè)引用列。此列的數(shù)據(jù)類(lèi)型必須與定義約束的列的數(shù)據(jù)類(lèi)型相同。引用列。此列的數(shù)據(jù)類(lèi)型必須與定義約束的列的數(shù)據(jù)類(lèi)型相同。 表級(jí)表級(jí)FOREIGN KEY約束的約束的REFERENCES子句中引用列的數(shù)子句中引用列的數(shù)目必須與約束列列表中的列數(shù)相同。每個(gè)引用列的數(shù)據(jù)類(lèi)型也必目必須與約束列列表中的列數(shù)相同。每個(gè)引用列的數(shù)據(jù)類(lèi)型也必須與列表中相應(yīng)列的數(shù)據(jù)類(lèi)型相同。須與列表中相應(yīng)
24、列的數(shù)據(jù)類(lèi)型相同。 FOREIGN KEY約束只能引用所參照的表的約束只能引用所參照的表的PRIMARY KEY或或UNIQUE約束中的列或所引用的表上約束中的列或所引用的表上UNIQUE INDEX中的列。中的列。2022-1-2624249.2 約束約束(1) 創(chuàng)建表時(shí)聲明外鍵約束創(chuàng)建表時(shí)聲明外鍵約束 語(yǔ)法格式如下。語(yǔ)法格式如下。 CONSTRAINT constraint_name FOREIGN KEYREFERENCES schema_name . referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE |
25、 SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT 2022-1-2625259.2 約束約束 FOREIGN KEY REFERENCES:為列中的數(shù)據(jù)提供參:為列中的數(shù)據(jù)提供參照完整性的約束。照完整性的約束。FOREIGN KEY 約束要求列中的每個(gè)值在約束要求列中的每個(gè)值在所引參照的表中對(duì)應(yīng)的被引用列中都存在。所引參照的表中對(duì)應(yīng)的被引用列中都存在。 schema_name . referenced_table_name:是:是FOREIGN KEY約束參照的表的名稱(chēng),以及該表所屬架構(gòu)
26、的名稱(chēng)。約束參照的表的名稱(chēng),以及該表所屬架構(gòu)的名稱(chēng)。 ( ref_column ,. n ):是:是FOREIGN KEY約束所引用的約束所引用的表中的一列或多列表中的一列或多列 。 ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT :指定如果已創(chuàng)建表中的行具有引用關(guān)系,:指定如果已創(chuàng)建表中的行具有引用關(guān)系,并且被引用行已從父表中刪除,則對(duì)這些行采取的操作。默并且被引用行已從父表中刪除,則對(duì)這些行采取的操作。默認(rèn)值為認(rèn)值為NO ACTION。2022-1-2626269.2 約束約束NO ACTION:數(shù)據(jù)庫(kù)引擎將引發(fā)錯(cuò)誤,并回滾對(duì)父
27、表中:數(shù)據(jù)庫(kù)引擎將引發(fā)錯(cuò)誤,并回滾對(duì)父表中相應(yīng)行的刪除操作。相應(yīng)行的刪除操作。CASCADE:如果從父表中刪除一行,則將從引用表中:如果從父表中刪除一行,則將從引用表中刪除相應(yīng)行。刪除相應(yīng)行。SET NULL:如果父表中對(duì)應(yīng)的行被刪除,則組成外鍵:如果父表中對(duì)應(yīng)的行被刪除,則組成外鍵的所有值都將設(shè)置為的所有值都將設(shè)置為NULL。若要執(zhí)行此約束,外鍵列必須。若要執(zhí)行此約束,外鍵列必須可為空值??蔀榭罩?。SET DEFAULT:如果父表中對(duì)應(yīng)的行被刪除,則組成外:如果父表中對(duì)應(yīng)的行被刪除,則組成外鍵的所有值都將設(shè)置為默認(rèn)值。若要執(zhí)行此約束,所有外鍵鍵的所有值都將設(shè)置為默認(rèn)值。若要執(zhí)行此約束,所有外
28、鍵列都必須有默認(rèn)定義。如果某列為空值,并且未設(shè)置顯式的列都必須有默認(rèn)定義。如果某列為空值,并且未設(shè)置顯式的默認(rèn)值,則將使用默認(rèn)值,則將使用NULL作為該列的隱式默認(rèn)值。作為該列的隱式默認(rèn)值。2022-1-2627279.2 約束約束 ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT :指定在發(fā)生更改的表中,如果行有引用:指定在發(fā)生更改的表中,如果行有引用關(guān)系且引用的行在父表中被更新,則對(duì)這些行采取什么操作。關(guān)系且引用的行在父表中被更新,則對(duì)這些行采取什么操作。默認(rèn)值為默認(rèn)值為NO ACTION 。2022-1-2628289.2 約束
29、約束外鍵約束不僅可以與一張表上的主鍵約束建立聯(lián)系,也外鍵約束不僅可以與一張表上的主鍵約束建立聯(lián)系,也可以與另一張表上的可以與另一張表上的UNIQUE約束建立聯(lián)系。當(dāng)一行新的數(shù)約束建立聯(lián)系。當(dāng)一行新的數(shù)據(jù)被加入到表格中,或表格中已經(jīng)存在的外鍵上的數(shù)據(jù)進(jìn)行據(jù)被加入到表格中,或表格中已經(jīng)存在的外鍵上的數(shù)據(jù)進(jìn)行修改時(shí),新的數(shù)據(jù)必須存在于另一張表的主鍵上,或者為修改時(shí),新的數(shù)據(jù)必須存在于另一張表的主鍵上,或者為NULL 。在外鍵約束上允許存在為在外鍵約束上允許存在為NULL的值的值 。當(dāng)主鍵所在表的數(shù)據(jù)被另一張表的外鍵所引用時(shí),用戶(hù)當(dāng)主鍵所在表的數(shù)據(jù)被另一張表的外鍵所引用時(shí),用戶(hù)將無(wú)法對(duì)主鍵里的數(shù)據(jù)進(jìn)行
30、修改或刪除,除非事先刪除或修將無(wú)法對(duì)主鍵里的數(shù)據(jù)進(jìn)行修改或刪除,除非事先刪除或修改引用的數(shù)據(jù)。改引用的數(shù)據(jù)。 2022-1-2629299.2 約束約束(2) 修改表時(shí)創(chuàng)建外鍵約束修改表時(shí)創(chuàng)建外鍵約束 語(yǔ)法格式如下。語(yǔ)法格式如下。ALTER TABLE table_nameADDCONSTRAINT constraint_nameFOREIGN KEY( column ,n )REFERENCES ref_table( ref_column ,n )2022-1-2630309.2 約束約束例如:假設(shè)在例如:假設(shè)在teaching數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)中的s_c表中沒(méi)有設(shè)置外鍵約束,以下示例通過(guò)表中
31、沒(méi)有設(shè)置外鍵約束,以下示例通過(guò)ALTER TABLE命令添加外鍵約束。命令添加外鍵約束。 USE teachingGOALTER TABLE s_cADD CONSTRAINT FK_sc_sno FOREIGN KEY (SNO) REFERENCES student(SNO)GOALTER TABLE s_cADD CONSTRAINT FK_sc_cno FOREIGN KEY (CNO) REFERENCES course(CNO)GO 通過(guò)通過(guò)ALTER TABLE命令也可以刪除不使用的外鍵約束,命令格式如下。命令也可以刪除不使用的外鍵約束,命令格式如下。ALTER TABLE ta
32、ble_name DROP CONSTRAINT constraint_name,n2022-1-2631319.2 約束約束n UNIQUE(唯一唯一)約束約束 對(duì)于數(shù)據(jù)表中非主鍵列的指定列,唯一約束確保不會(huì)輸對(duì)于數(shù)據(jù)表中非主鍵列的指定列,唯一約束確保不會(huì)輸入重復(fù)的值。每個(gè)入重復(fù)的值。每個(gè)UNIQUE約束建立一個(gè)唯一索引。每個(gè)表約束建立一個(gè)唯一索引。每個(gè)表中只能有一個(gè)主鍵,但是可以有多個(gè)中只能有一個(gè)主鍵,但是可以有多個(gè)UNIQUE列。唯一約束列。唯一約束指定的列可以有指定的列可以有NULL值。表中的主鍵也強(qiáng)制執(zhí)行唯一性,值。表中的主鍵也強(qiáng)制執(zhí)行唯一性,但主鍵不允許為但主鍵不允許為NULL,主
33、鍵約束強(qiáng)度大于唯一約束。,主鍵約束強(qiáng)度大于唯一約束。唯一約束需滿(mǎn)足以下規(guī)則。唯一約束需滿(mǎn)足以下規(guī)則。 如果沒(méi)有為如果沒(méi)有為UNIQUE約束指定約束指定CLUSTERED或或NONCLUSTERED,則默認(rèn)使用,則默認(rèn)使用NONCLUSTERED。 每個(gè)每個(gè)UNIQUE約束都生成一個(gè)索引。約束都生成一個(gè)索引。UNIQUE約束約束的數(shù)目不會(huì)使表中的非聚集索引超過(guò)的數(shù)目不會(huì)使表中的非聚集索引超過(guò)249個(gè),聚集索引個(gè),聚集索引超過(guò)超過(guò)1個(gè)。個(gè)。2022-1-2632329.2 約束約束(1) 創(chuàng)建表時(shí)聲明唯一約束創(chuàng)建表時(shí)聲明唯一約束 如果表的唯一約束由單列組成,則該唯一約束可以定義如果表的唯一約束由單
34、列組成,則該唯一約束可以定義為該列的列約束。如果唯一約束由兩個(gè)以上的列組成,則該為該列的列約束。如果唯一約束由兩個(gè)以上的列組成,則該唯一約束必須定義為表約束。唯一約束必須定義為表約束。定義列級(jí)主鍵約束定義列級(jí)主鍵約束語(yǔ)法格式如下。語(yǔ)法格式如下。 CONSTRAINT constraint_name UNIQUE CLUSTERED | NONCLUSTERED UNIQUE:唯一約束:唯一約束 。 CLUSTERED | NONCLUSTERED:指示為:指示為UNIQUE約約束創(chuàng)建聚集索引還是非聚集索引。束創(chuàng)建聚集索引還是非聚集索引。2022-1-2633339.2 約束約束定義表級(jí)唯一約束
35、定義表級(jí)唯一約束語(yǔ)法格式如下。語(yǔ)法格式如下。 CONSTRAINT constraint_name UNIQUE CLUSTERED | NONCLUSTERED ( column_name ,.n ) (2) 修改表時(shí)創(chuàng)建唯一約束修改表時(shí)創(chuàng)建唯一約束 語(yǔ)法格式如下。語(yǔ)法格式如下。ALTER TABLE table_nameADDCONSTRAINT constraint_nameUNIQUE( column ,n )2022-1-2634349.2 約束約束例如:以下示例將例如:以下示例將teaching數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)中的student表中的姓名列設(shè)置為表中的姓名列設(shè)置為唯一約束。唯一約束
36、。 USE teachingGOALTER TABLE studentADDCONSTRAINT UQ_studentUNIQUE (SNAME)通過(guò)通過(guò)ALTER TABLE命令也可以刪除不使用的唯一約束,命令格式命令也可以刪除不使用的唯一約束,命令格式如下。如下。ALTER TABLE table_name DROP CONSTRAINT constraint_name,n2022-1-2635359.2 約束約束n 檢查約束檢查約束檢查檢查(CHECK)約束通過(guò)檢查輸入表列的數(shù)據(jù)的值來(lái)維護(hù)約束通過(guò)檢查輸入表列的數(shù)據(jù)的值來(lái)維護(hù)值域的完整性,它可用來(lái)指定某列可取值的清單或可取值的值域的完整性
37、,它可用來(lái)指定某列可取值的清單或可取值的集合,也可指定某列可取值的范圍集合,也可指定某列可取值的范圍 ??梢栽谝涣猩显O(shè)置多個(gè)檢查約束,也可以將一個(gè)檢查約可以在一列上設(shè)置多個(gè)檢查約束,也可以將一個(gè)檢查約束應(yīng)用于多列。當(dāng)一列受多個(gè)檢查約束控制時(shí),所有的約束束應(yīng)用于多列。當(dāng)一列受多個(gè)檢查約束控制時(shí),所有的約束按照創(chuàng)建的順序,依次進(jìn)行數(shù)據(jù)有效性的檢查。按照創(chuàng)建的順序,依次進(jìn)行數(shù)據(jù)有效性的檢查。根據(jù)檢查約束是作用于單列還是多列,可分為列級(jí)檢查根據(jù)檢查約束是作用于單列還是多列,可分為列級(jí)檢查約束和表級(jí)檢查約束。約束和表級(jí)檢查約束。2022-1-2636369.2 約束約束對(duì)于檢查約束,需滿(mǎn)足以下規(guī)則。對(duì)于
38、檢查約束,需滿(mǎn)足以下規(guī)則。 列可以有任意多個(gè)列可以有任意多個(gè)CHECK約束,并且約束條件中可以包含用約束,并且約束條件中可以包含用AND和和OR組合起來(lái)的多個(gè)邏輯表達(dá)式。列上的多個(gè)組合起來(lái)的多個(gè)邏輯表達(dá)式。列上的多個(gè)CHECK約束約束按創(chuàng)建順序進(jìn)行驗(yàn)證。按創(chuàng)建順序進(jìn)行驗(yàn)證。 搜索條件必須取值為布爾表達(dá)式,并且不能引用其他表。搜索條件必須取值為布爾表達(dá)式,并且不能引用其他表。 列級(jí)列級(jí)CHECK約束只能引用被約束的列,表級(jí)約束只能引用被約束的列,表級(jí)CHECK約束只約束只能引用同一表中的列。能引用同一表中的列。 當(dāng)執(zhí)行當(dāng)執(zhí)行INSERT和和DELETE語(yǔ)句時(shí),語(yǔ)句時(shí),CHECK 約束和規(guī)則具有約
39、束和規(guī)則具有相同的數(shù)據(jù)驗(yàn)證功能。相同的數(shù)據(jù)驗(yàn)證功能。 當(dāng)列上存在規(guī)則和一個(gè)或多個(gè)當(dāng)列上存在規(guī)則和一個(gè)或多個(gè)CHECK約束時(shí),將驗(yàn)證所有限約束時(shí),將驗(yàn)證所有限制。制。 不能在不能在text、ntext或或image列上定義列上定義CHECK約束。約束。2022-1-2637379.2 約束約束(1)創(chuàng)建表時(shí)聲明唯一約束創(chuàng)建表時(shí)聲明唯一約束語(yǔ)法格式如下。語(yǔ)法格式如下。 CONSTRAINT constraint_name CHECK (logical_expression)各選項(xiàng)含義如下各選項(xiàng)含義如下 : CHECK:檢查約束。該約束通過(guò)限制可輸入一列或多:檢查約束。該約束通過(guò)限制可輸入一列或多列
40、中的可能值來(lái)強(qiáng)制實(shí)現(xiàn)域完整性。列中的可能值來(lái)強(qiáng)制實(shí)現(xiàn)域完整性。 logical_expression:返回:返回TRUE或或FALSE的邏輯表達(dá)式。的邏輯表達(dá)式。別名數(shù)據(jù)類(lèi)型不能作為表達(dá)式的一部分別名數(shù)據(jù)類(lèi)型不能作為表達(dá)式的一部分 。2022-1-2638389.2 約束約束(2)修改表時(shí)創(chuàng)建檢查約束修改表時(shí)創(chuàng)建檢查約束語(yǔ)法格式如下。語(yǔ)法格式如下。ALTER TABLE table_nameADDCONSTRAINT constraint_nameCHECK(logical_expression)2022-1-2639399.2 約束約束例如:假設(shè)在例如:假設(shè)在teaching數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)
41、中的s_c表中沒(méi)有設(shè)置對(duì)成績(jī)列的檢查表中沒(méi)有設(shè)置對(duì)成績(jī)列的檢查約束,以下示例通過(guò)約束,以下示例通過(guò)ALTER TABLE命令添加檢查約束命令添加檢查約束 。USE teachingGOALTER TABLE s_cADDCONSTRAINT CK_sc CHECK(GRADE=0 AND GRADE=0 and Grade=100GO2022-1-2646469.3 規(guī)則規(guī)則n 查看規(guī)則查看規(guī)則可以使用系統(tǒng)存儲(chǔ)過(guò)程可以使用系統(tǒng)存儲(chǔ)過(guò)程sp_helptext查看已經(jīng)創(chuàng)建的規(guī)則,查看已經(jīng)創(chuàng)建的規(guī)則,語(yǔ)法格式如下。語(yǔ)法格式如下。sp_helptext objname= object_name其中:其
42、中: objname=object_name:指定對(duì)象的名稱(chēng)。:指定對(duì)象的名稱(chēng)。例如:以下示例查看已經(jīng)創(chuàng)建的規(guī)則例如:以下示例查看已經(jīng)創(chuàng)建的規(guī)則grade_rule。 USE teachingGOEXEC sp_helptext grade_ruleGO 執(zhí)行結(jié)果如圖執(zhí)行結(jié)果如圖9.1所示所示 。2022-1-2647479.3 規(guī)則規(guī)則n 綁定與解除規(guī)則綁定與解除規(guī)則 1. 綁定規(guī)則綁定規(guī)則創(chuàng)建好一個(gè)規(guī)則后,必須通過(guò)綁定才能使用規(guī)則,一般創(chuàng)建好一個(gè)規(guī)則后,必須通過(guò)綁定才能使用規(guī)則,一般情況下,規(guī)則可以綁定在用戶(hù)自定義數(shù)據(jù)類(lèi)型或是數(shù)據(jù)列中。情況下,規(guī)則可以綁定在用戶(hù)自定義數(shù)據(jù)類(lèi)型或是數(shù)據(jù)列中。
43、 綁定規(guī)則可以使用存儲(chǔ)過(guò)程綁定規(guī)則可以使用存儲(chǔ)過(guò)程sp_bindrule,語(yǔ)法格式如下,語(yǔ)法格式如下 :sp_bindrule rulename=rule, objname=object_name rulename=rule:指定規(guī)則名稱(chēng):指定規(guī)則名稱(chēng) 。 objname=object_name:指定規(guī)則綁定的對(duì)象:指定規(guī)則綁定的對(duì)象 。2022-1-2648489.3 規(guī)則規(guī)則如果規(guī)則綁定的對(duì)象是表的列,則如果規(guī)則綁定的對(duì)象是表的列,則object_name的格式是的格式是table.column,否則認(rèn)為是用戶(hù)定義數(shù)據(jù)類(lèi)型。,否則認(rèn)為是用戶(hù)定義數(shù)據(jù)類(lèi)型。 例如:以下示例將例例如:以下示例將
44、例9.7創(chuàng)建的規(guī)則創(chuàng)建的規(guī)則grade_rule綁定到綁定到teaching數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)中的s_c表中的表中的GRADE列上列上 。USE teachingGOEXEC sp_bindrule grade_rule,s_c.GRADEGO2022-1-2649499.3 規(guī)則規(guī)則2. 解除規(guī)則解除規(guī)則系統(tǒng)存儲(chǔ)過(guò)程系統(tǒng)存儲(chǔ)過(guò)程sp_unbindrule用于當(dāng)前數(shù)據(jù)庫(kù)中為列或用用于當(dāng)前數(shù)據(jù)庫(kù)中為列或用戶(hù)定義數(shù)據(jù)類(lèi)型解除規(guī)則綁定戶(hù)定義數(shù)據(jù)類(lèi)型解除規(guī)則綁定 。語(yǔ)法格式如下。語(yǔ)法格式如下。sp_unbindrule objname=object_name例如:解除綁定在例如:解除綁定在teachin
45、g數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)中的s_c表中表中GRADE列列上的規(guī)則上的規(guī)則 。USE teachingGOEXEC sp_unbindrule s_c.GRADEGO 2022-1-2650509.3 規(guī)則規(guī)則n 刪除規(guī)則刪除規(guī)則從數(shù)據(jù)庫(kù)中刪除一個(gè)規(guī)則值時(shí),可以分為以下兩種情況從數(shù)據(jù)庫(kù)中刪除一個(gè)規(guī)則值時(shí),可以分為以下兩種情況來(lái)處理。來(lái)處理。 如果這個(gè)規(guī)則尚未綁定到表或用戶(hù)定義數(shù)據(jù)類(lèi)型上,可如果這個(gè)規(guī)則尚未綁定到表或用戶(hù)定義數(shù)據(jù)類(lèi)型上,可以使用以使用DROP RULE語(yǔ)句來(lái)刪除。語(yǔ)句來(lái)刪除。 如果已經(jīng)將這個(gè)規(guī)則綁定到表或用戶(hù)定義數(shù)據(jù)類(lèi)型上,如果已經(jīng)將這個(gè)規(guī)則綁定到表或用戶(hù)定義數(shù)據(jù)類(lèi)型上,必須首先使用系統(tǒng)
46、存儲(chǔ)過(guò)程必須首先使用系統(tǒng)存儲(chǔ)過(guò)程sp_unbindrule來(lái)解除該規(guī)則在表來(lái)解除該規(guī)則在表列或用戶(hù)定義數(shù)據(jù)類(lèi)型上的綁定,然后使用列或用戶(hù)定義數(shù)據(jù)類(lèi)型上的綁定,然后使用DROP RULE語(yǔ)語(yǔ)句刪除該規(guī)則。句刪除該規(guī)則。 2022-1-2651519.3 規(guī)則規(guī)則可以使用可以使用Transact-SQL命令的命令的DROP RULE語(yǔ)句從數(shù)據(jù)語(yǔ)句從數(shù)據(jù)庫(kù)刪除一個(gè)或多個(gè)規(guī)則庫(kù)刪除一個(gè)或多個(gè)規(guī)則 。其語(yǔ)法格式如下。其語(yǔ)法格式如下。DROP RULE rule_name,n 例如:刪除例如:刪除teaching數(shù)據(jù)庫(kù)中的規(guī)則數(shù)據(jù)庫(kù)中的規(guī)則grade_rule 。USE teachingGODROP RU
47、LE grade_ruleGO2022-1-2652529.4 默認(rèn)值默認(rèn)值默認(rèn)值就是當(dāng)用戶(hù)未指定時(shí)由默認(rèn)值就是當(dāng)用戶(hù)未指定時(shí)由SQL Server自動(dòng)指派的數(shù)自動(dòng)指派的數(shù)據(jù)值,它可以是常量、內(nèi)置函數(shù)或表達(dá)式據(jù)值,它可以是常量、內(nèi)置函數(shù)或表達(dá)式 。使用默認(rèn)值有兩種方式使用默認(rèn)值有兩種方式 : 在在CREATE TABLE語(yǔ)句中對(duì)列定義一個(gè)語(yǔ)句中對(duì)列定義一個(gè)DEFAULT約束約束 使用使用CREATE DEFAULT語(yǔ)句在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)默認(rèn)語(yǔ)句在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)默認(rèn)值對(duì)象,然后使用值對(duì)象,然后使用sp_binddefault系統(tǒng)存儲(chǔ)過(guò)程將該對(duì)象綁系統(tǒng)存儲(chǔ)過(guò)程將該對(duì)象綁定到表列上定到表列上 。2
48、022-1-2653539.4 默認(rèn)值默認(rèn)值n 創(chuàng)建默認(rèn)值創(chuàng)建默認(rèn)值1. 創(chuàng)建默認(rèn)值對(duì)象可以使用創(chuàng)建默認(rèn)值對(duì)象可以使用Transact-SQL命令命令CREATE DEFAULT語(yǔ)句來(lái)完成語(yǔ)句來(lái)完成 。語(yǔ)法格式如下。語(yǔ)法格式如下。CREATE DEFAULT default_name AS constant_expression其中:其中:constant_expression可以是常量表達(dá)式、任何常量、內(nèi)置可以是常量表達(dá)式、任何常量、內(nèi)置函數(shù)或數(shù)學(xué)表達(dá)式,但不能包含任何列或其他數(shù)據(jù)庫(kù)對(duì)象的函數(shù)或數(shù)學(xué)表達(dá)式,但不能包含任何列或其他數(shù)據(jù)庫(kù)對(duì)象的名稱(chēng)。名稱(chēng)。2022-1-2654549.4 默認(rèn)值
49、默認(rèn)值例如:在例如:在teaching數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名為數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名為grade_default的的默認(rèn)值,并以默認(rèn)值,并以0作為其值。作為其值。USE teachingGOCREATE DEFAULT grade_default AS 0GO2022-1-2655559.4 默認(rèn)值默認(rèn)值2. 可以使用系統(tǒng)存儲(chǔ)過(guò)程可以使用系統(tǒng)存儲(chǔ)過(guò)程sp_helptext查看默認(rèn)值定義,查看默認(rèn)值定義,語(yǔ)法格式如下。語(yǔ)法格式如下。sp_helptext objname = namename為用戶(hù)定義的對(duì)象名稱(chēng)。僅當(dāng)指定限定對(duì)象時(shí)才需為用戶(hù)定義的對(duì)象名稱(chēng)。僅當(dāng)指定限定對(duì)象時(shí)才需要引號(hào)。對(duì)象必須在當(dāng)前數(shù)據(jù)
50、庫(kù)中要引號(hào)。對(duì)象必須在當(dāng)前數(shù)據(jù)庫(kù)中 。例如:查看已經(jīng)創(chuàng)建的默認(rèn)值例如:查看已經(jīng)創(chuàng)建的默認(rèn)值grade_default。 USE teachingGOEXEC sp_helptext grade_defaultGO 執(zhí)行結(jié)果如圖執(zhí)行結(jié)果如圖9.2所示所示 2022-1-2656569.4 默認(rèn)值默認(rèn)值n 綁定與解除默認(rèn)值綁定與解除默認(rèn)值 1. 綁定默認(rèn)值綁定默認(rèn)值在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)默認(rèn)值后,還必須把該默認(rèn)值綁定在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)默認(rèn)值后,還必須把該默認(rèn)值綁定到列或用戶(hù)定義數(shù)據(jù)類(lèi)型上才能讓它發(fā)揮作用。到列或用戶(hù)定義數(shù)據(jù)類(lèi)型上才能讓它發(fā)揮作用。 可以用系統(tǒng)存儲(chǔ)過(guò)程可以用系統(tǒng)存儲(chǔ)過(guò)程sp_binddefault來(lái)完成來(lái)完成 ,其語(yǔ)法格式,其語(yǔ)法格式如下如下 :sp_bindefault defname=default,objname=object_name 2022-1-2657579.4 默認(rèn)值默認(rèn)值例如:以下示例將例例如:以下示例將例9.14創(chuàng)建的默認(rèn)值創(chuàng)建的默認(rèn)值grade_default綁定綁定到到teaching數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)中的s_c表中表中GRADE列上列上 。USE teachingGOEXEC sp_bindefault grade_default,s_c.GRADEGO
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度鋼結(jié)構(gòu)工程大數(shù)據(jù)分析與決策支持合同3篇
- 展會(huì)媒體合作合同(2篇)
- 2025年度環(huán)保項(xiàng)目財(cái)務(wù)代理與審計(jì)合同3篇
- 二零二五版智慧校園信息化建設(shè)與運(yùn)營(yíng)合同3篇
- 二零二五年新能源發(fā)電場(chǎng)電工勞務(wù)及環(huán)保設(shè)施合同3篇
- 二零二五年度高等學(xué)府外國(guó)專(zhuān)家講學(xué)合同參考文本3篇
- 二零二五年度出租屋租賃合同范本:租賃押金無(wú)息退還協(xié)議3篇
- 二零二五年度機(jī)械加工行業(yè)信息安全保護(hù)合同2篇
- 2025年度標(biāo)識(shí)標(biāo)牌照明系統(tǒng)升級(jí)改造合同3篇
- 二零二五版機(jī)票預(yù)訂代理及境外旅游套餐合同5篇
- (二統(tǒng))大理州2025屆高中畢業(yè)生第二次復(fù)習(xí)統(tǒng)一檢測(cè) 物理試卷(含答案)
- 影視作品價(jià)值評(píng)估-洞察分析
- 公司員工出差車(chē)輛免責(zé)協(xié)議書(shū)
- 2023年浙江杭州師范大學(xué)附屬醫(yī)院招聘聘用人員筆試真題
- 江蘇某小區(qū)園林施工組織設(shè)計(jì)方案
- 口腔執(zhí)業(yè)醫(yī)師定期考核試題(資料)帶答案
- 2024人教版高中英語(yǔ)語(yǔ)境記單詞【語(yǔ)境記單詞】新人教版 選擇性必修第2冊(cè)
- 能源管理總結(jié)報(bào)告
- 藥店醫(yī)保政策宣傳與執(zhí)行制度
- 勘察工作質(zhì)量及保證措施
- 體外膜肺氧合(ECMO)并發(fā)癥及護(hù)理
評(píng)論
0/150
提交評(píng)論