版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)庫(kù)完整性第一頁(yè),共二十七頁(yè),2022年,8月28日第9章
數(shù)據(jù)庫(kù)完整性不同的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)根據(jù)其應(yīng)用環(huán)境的不同,往往還需要一些特殊的約束條件。用戶(hù)定義的完整性即是針對(duì)某個(gè)特定關(guān)系數(shù)據(jù)庫(kù)的約束條件,它反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿(mǎn)足的語(yǔ)義要求。SQLServer提供了定義和檢驗(yàn)這類(lèi)完整性的機(jī)制,以便用統(tǒng)一的系統(tǒng)方法來(lái)處理它們,而不是用應(yīng)用程序來(lái)承擔(dān)這一功能。
SQLServer提供了一些工具來(lái)幫助用戶(hù)實(shí)現(xiàn)數(shù)據(jù)完整性,其中最主要的是規(guī)則(Rule)、缺省值(Default)、約束(Constraint)和觸發(fā)器(Trigger)9.1約束9.2默認(rèn)值9.3規(guī)則本章首頁(yè)2
第二頁(yè),共二十七頁(yè),2022年,8月28日9.1約束
約束(Constraint)是MicrosoftSQLServer提供的自動(dòng)保持?jǐn)?shù)據(jù)庫(kù)完整性的一種方法,定義了可輸入表或表的單個(gè)列中的數(shù)據(jù)的限制條件。
主鍵約束PRIMARYKEY
外關(guān)鍵字約束FOREIGNKEY
惟一性約束UNIQUE
檢查約束CHECK
缺省約束Default
列約束和表約束本節(jié)首頁(yè)3
第三頁(yè),共二十七頁(yè),2022年,8月28日9.1約束1.PRIMARYKEY約束
用于定義基本表的主鍵,它是惟一確定表中每一條記錄的標(biāo)識(shí)符,其值不能為NULL,也不能重復(fù),且IMAGE和TEXT類(lèi)型的列不能被指定為主鍵,以此來(lái)保證實(shí)體的完整性。語(yǔ)法如下:CONSTRAINTconstraint_name PRIMARYKEY[CLUSTERED|NONCLUSTERED]
(column_name)4
第四頁(yè),共二十七頁(yè),2022年,8月28日9.1約束/*例9.1:test數(shù)據(jù)庫(kù)創(chuàng)建department表,指定dno為主鍵*/UsetestGoCreatetabledepartment/*部門(mén)表*/(dnointprimarykey,/*部門(mén)號(hào),為主鍵*/dnamechar(20)/*部門(mén)名*/)Go本節(jié)首頁(yè)Createtabledepartment(dnoint,dnamechar(20),
CONSTRAINTPK_salary
primarykey(dno,dname))5
第五頁(yè),共二十七頁(yè),2022年,8月28日9.1約束
2.FOREIGNKEY約束
用于建立和加強(qiáng)兩個(gè)表數(shù)據(jù)之間的鏈接的一列或多列。外鍵約束用于強(qiáng)制參照完整性。當(dāng)一個(gè)表中的一列或多個(gè)列的組合和其它表中的主鍵定義相同時(shí),就可以將這些列或列的組合定義為外鍵,并設(shè)定它適合哪個(gè)表中哪些列相關(guān)聯(lián)。外關(guān)鍵字約束的作用還體現(xiàn)在,當(dāng)向含有外關(guān)鍵字的表插入數(shù)據(jù)時(shí),如果與之相關(guān)聯(lián)的表的列中無(wú)與插入的外關(guān)鍵字列值相同的值時(shí),系統(tǒng)會(huì)拒絕插入數(shù)據(jù)。語(yǔ)法如下:CONSTRAINTconstraint_name FOREIGNKEY(column_name[,…n]) REFERENCESref_table[(ref_column[,…n])]6
第六頁(yè),共二十七頁(yè),2022年,8月28日9.1約束當(dāng)使用外部鍵約束時(shí),應(yīng)該考慮以下幾個(gè)因素:外部鍵約束提供了字段參照完整性;外部鍵從句中的字段數(shù)目和每個(gè)字段指定的數(shù)據(jù)類(lèi)型都必須和REFERENCES從句中的字段相匹配;外部鍵約束不能自動(dòng)創(chuàng)建索引,需要用戶(hù)手動(dòng)創(chuàng)建;用戶(hù)想要修改外部鍵約束的數(shù)據(jù),必須有對(duì)外部鍵約束所參考表的SELECT權(quán)限或者REFERENCES權(quán)限;參考同一表中的字段時(shí),必須只使用REFERENCES子句,不能使用外部鍵子句;一個(gè)表中最多可以有31個(gè)外部鍵約束;在臨時(shí)表中,不能使用外部鍵約束;主鍵和外部鍵的數(shù)據(jù)類(lèi)型必須嚴(yán)格匹配7
第七頁(yè),共二十七頁(yè),2022年,8月28日9.1約束/*例9.2:使用外鍵約束*/Use
testGoCreatetableworker(nointprimarykey,namechar(8),sexchar(2),dnoint/*部門(mén)編號(hào)*/ foreignkeyreferencesdepartment(dno) ondeletenoaction,/*刪除因錯(cuò)誤失敗*/addresschar(30))Go本節(jié)首頁(yè)8
第八頁(yè),共二十七頁(yè),2022年,8月28日9.1約束3.UNIQUE約束
指定一個(gè)或多個(gè)列的組合的值具有惟一性,以防止在列中輸入重復(fù)的值。語(yǔ)法如下:CONSTRAINTconstraint_name UNIQUE[CLUSTERED|NONCLUSTERED]--指定索引類(lèi)別 (column_name[,…n])當(dāng)使用惟一性約束時(shí),需要考慮以下幾個(gè)因素:使用惟一性約束的字段允許為空值;一個(gè)表中可以允許有多個(gè)惟一性約束;可以把惟一性約束定義在多個(gè)字段上;惟一性約束用于強(qiáng)制在指定字段上創(chuàng)建一個(gè)惟一性索引;默認(rèn)情況下,創(chuàng)建的索引類(lèi)型為非聚集索引。9
第九頁(yè),共二十七頁(yè),2022年,8月28日9.1約束PRIMARYKEY與UNIQUE約束類(lèi)似,通過(guò)建立唯一索引來(lái)保證基本表在主鍵列取值的唯一性,但它們之間存在著很大的區(qū)別:①在一個(gè)基本表中只能定義一個(gè)PRIMARYKEY約束,但可定義多個(gè)UNIQUE約束;②對(duì)于指定為PRIMARYKEY的一個(gè)列或多個(gè)列的組合,其中任何一個(gè)列都不能出現(xiàn)空值,而對(duì)于UNIQUE所約束的唯一鍵,則允許為空。注意:不能為同一個(gè)列或一組列既定義UNIQUE約束,又定義PRIMARYKEY約束。PRIMARYKEY既可用于列約束,也可用于表約束。
10
第十頁(yè),共二十七頁(yè),2022年,8月28日9.1約束/*例9.3:test數(shù)據(jù)庫(kù)創(chuàng)建table5表,指定c1不含重復(fù)值*/UsetestGoCreatetabletable5(c1intunique,c2int)GoInserttable5values(1,100)GoInserttable5values(1,200)Go本節(jié)首頁(yè)11
第十一頁(yè),共二十七頁(yè),2022年,8月28日9.1約束
4.CHECK約束對(duì)輸入列或整個(gè)表中的值設(shè)置檢查條件,以限制輸入值,保證數(shù)據(jù)庫(kù)的數(shù)據(jù)完整性。語(yǔ)法如下:CONSTRAINTconstraint_name CHECK[NOTFORREPLICATION] (logical_expression)當(dāng)使用檢查約束時(shí),應(yīng)該考慮和注意以下幾點(diǎn):一個(gè)列級(jí)檢查約束只能與限制的字段有關(guān);一個(gè)表級(jí)檢查約束只能與限制的表中字段有關(guān);一個(gè)表中可以定義多個(gè)檢查約束;每個(gè)CREATETABLE語(yǔ)句中每個(gè)字段只能定義一個(gè)檢查約束;在多個(gè)字段上定義檢查約束,則必須將檢查約束定義為表級(jí)約束;當(dāng)執(zhí)行INSERT語(yǔ)句或者UPDATE語(yǔ)句時(shí),檢查約束將驗(yàn)證數(shù)據(jù);檢查約束中不能包含子查詢(xún)。12
第十二頁(yè),共二十七頁(yè),2022年,8月28日9.1約束/*例9.4:test數(shù)據(jù)庫(kù)創(chuàng)建table6表,指定f2只能0-100分*/UsetestGoCreatetabletable6(f1int,f2intnotnullcheck(f2>=0andf2<=100))GoInserttable6values(1,120)Go本節(jié)首頁(yè)13
第十三頁(yè),共二十七頁(yè),2022年,8月28日9.1約束5.Default約束在插入操作中如果沒(méi)提供輸入值時(shí),則系統(tǒng)自動(dòng)指定值。默認(rèn)約束可以包括常量、函數(shù)、不帶變?cè)膬?nèi)建函數(shù)或空值。語(yǔ)法如下:CONSTRAINTconstraint_name DEFAULTconstant_expression[FORcolumn_name]例:constraintde_order_quantitydefault100fororder_quantity使用默認(rèn)約束時(shí),應(yīng)該注意以下幾點(diǎn):每個(gè)字段只能定義一個(gè)默認(rèn)約束;如果定義的默認(rèn)值長(zhǎng)于其對(duì)應(yīng)字段的允許長(zhǎng)度,那么輸入到表中的默認(rèn)值將被截?cái)?;不能加入到帶有IDENTITY屬性或者數(shù)據(jù)類(lèi)型為timestamp的字段上;如果字段定義為用戶(hù)定義的數(shù)據(jù)類(lèi)型,而且有一個(gè)默認(rèn)綁定到這個(gè)數(shù)據(jù)類(lèi)型上,則不允許該字段有默認(rèn)約束。本節(jié)首頁(yè)14
第十四頁(yè),共二十七頁(yè),2022年,8月28日9.1約束6.列約束和表約束
列約束作為列定義的一部分只作用于此列本身。列約束是對(duì)某一個(gè)特定列的約束,包含在列定義中,直接跟在該列的其他定義之后,用空格分隔,不必指定列名。表約束作為表定義的一部分,可以作用于多個(gè)列。表約束與列定義相互獨(dú)立,不包括在列定義中,通常用于對(duì)多個(gè)列一起進(jìn)行約束,與列定義用’,’分隔,定義表約束時(shí)必須指出要約束的那些列的名稱(chēng)。15
第十五頁(yè),共二十七頁(yè),2022年,8月28日9.1約束/*例9.5:test數(shù)據(jù)庫(kù)創(chuàng)建table7表,主鍵為c1和c2*/UsetestGoCreatetabletable7(c1int,c2int,c3char(5),c4char(10),constraintc1primarykey(c1,c2)/*表約束*/)GoInserttable7values(1,2,'ABC1','XYZ1')Inserttable7values(1,2,'ABC2','XYZ2')GoSelect*fromtable7Go本節(jié)首頁(yè)16
第十六頁(yè),共二十七頁(yè),2022年,8月28日9.2默認(rèn)值默認(rèn)值Default是往用戶(hù)輸入記錄時(shí)沒(méi)有指定具體數(shù)據(jù)的列中自動(dòng)插入的數(shù)據(jù)。默認(rèn)值對(duì)象與ALTERTABLE或CREATETABLE命令操作表時(shí)用DEFAULT選項(xiàng)指定的缺省值功能相似,但默認(rèn)值對(duì)象可以用于多個(gè)列或用戶(hù)自定義數(shù)據(jù)類(lèi)型。創(chuàng)建默認(rèn)對(duì)象綁定默認(rèn)對(duì)象重命名默認(rèn)對(duì)象解除默認(rèn)對(duì)象的綁定刪除默認(rèn)對(duì)象本章首頁(yè)17
第十七頁(yè),共二十七頁(yè),2022年,8月28日9.2默認(rèn)值在創(chuàng)建表時(shí)指定默認(rèn)值/*例9.6:test數(shù)據(jù)庫(kù)創(chuàng)建table8表,c2指定默認(rèn)值為當(dāng)前日期*/UsetestGoCreatetabletable8(c1int,c2datetimedefault(getdate()))GoInserttable8(c1)values(1)Select*fromtable8Go18
第十八頁(yè),共二十七頁(yè),2022年,8月28日9.2默認(rèn)值1.用CREATEDEFAULT命令創(chuàng)建默認(rèn)對(duì)象其語(yǔ)法如下:CREATEDEFAULTdefault_nameASconstant_expressiondefault_name缺省值名稱(chēng)constant_expression可以是數(shù)學(xué)表達(dá)式或函數(shù),也可以包含表的列名或其它數(shù)據(jù)庫(kù)對(duì)象。例:創(chuàng)建con3默認(rèn)對(duì)象UsetestGoCreatedefaultcon3as10/*默認(rèn)值設(shè)置為10*/Go本節(jié)首頁(yè)19
第十九頁(yè),共二十七頁(yè),2022年,8月28日9.2默認(rèn)值2.綁定默認(rèn)對(duì)象其語(yǔ)法如下:sp_bindefault[@defname=]'default', [@objname=]'object_name' [,'futureonly']例:綁定默認(rèn)對(duì)象con3到test數(shù)據(jù)庫(kù)table8表的c1列上UsetestGoExecsp_bindefault'con3','table8.c1'Go本節(jié)首頁(yè)20
第二十頁(yè),共二十七頁(yè),2022年,8月28日9.2默認(rèn)值3.解除默認(rèn)對(duì)象的綁定其語(yǔ)法如下:Sp_unbindefault[@objname=]'object_name' [,'futureonly']例:解除test數(shù)據(jù)庫(kù)中table8表的c1列上的默認(rèn)對(duì)象綁定UsetestGoExecsp_unbindefault'table8.c1'Go本節(jié)首頁(yè)21
第二十一頁(yè),共二十七頁(yè),2022年,8月28日9.2默認(rèn)值4.刪除默認(rèn)對(duì)象其語(yǔ)法如下:DROPDEFAULT{default_name}[,...n]例:刪除默認(rèn)對(duì)象con3Use
testGoIfexists(selectnamefromsysobjects wherename='con3'andtype='D') dropdefaultcon3Go本節(jié)首頁(yè)22
第二十二頁(yè),共二十七頁(yè),2022年,8月28日9.3規(guī)則
規(guī)則(Rule)
就是數(shù)據(jù)庫(kù)中對(duì)存儲(chǔ)在表的列或用戶(hù)自定義數(shù)據(jù)類(lèi)型中的值的規(guī)定和限制。規(guī)則是單獨(dú)存儲(chǔ)的獨(dú)立的數(shù)據(jù)庫(kù)對(duì)象。規(guī)則與其作用的表或用戶(hù)自定義數(shù)據(jù)類(lèi)型是相互獨(dú)立的。規(guī)則和約束可以同時(shí)使用,表的列可以有一個(gè)規(guī)則及多個(gè)CHECK約束。創(chuàng)建規(guī)則
綁定規(guī)則
解除和刪除規(guī)則本章首頁(yè)23
第二十三頁(yè),共二十七頁(yè),2022年,8月28日9.3規(guī)則1.創(chuàng)建規(guī)則1)用企業(yè)管理器創(chuàng)建規(guī)則2)用CREATERULE命令創(chuàng)建規(guī)則語(yǔ)法格式為:CREATERULErule_nameAScondition_expressionrule_name規(guī)則名稱(chēng)。condition_expression規(guī)則的定義,是能用于WHERE條件子句中的任何表達(dá)式,它可以包含算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和謂詞(如IN、LIKE、BETWEEN等)。24
第二十四頁(yè),共二十七頁(yè),2022年,8月28日9.3規(guī)則例:限定輸入值在0~10之間。UsetestGoCreaterulerule1as@c1between0and10Go例:限定輸入值為2,5,8Createrulerul
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥用甘草項(xiàng)目營(yíng)銷(xiāo)計(jì)劃書(shū)
- 肚臍穿孔器械項(xiàng)目運(yùn)營(yíng)指導(dǎo)方案
- 空貴金屬制粉餅盒細(xì)分市場(chǎng)深度研究報(bào)告
- 自行車(chē)曲柄市場(chǎng)發(fā)展前景分析及供需格局研究預(yù)測(cè)報(bào)告
- 醫(yī)用抗真菌霜產(chǎn)品供應(yīng)鏈分析
- 成比例的模型車(chē)產(chǎn)品供應(yīng)鏈分析
- 尿素合成塔產(chǎn)業(yè)鏈招商引資的調(diào)研報(bào)告
- 家用電凈水器產(chǎn)品供應(yīng)鏈分析
- 牛奶均質(zhì)機(jī)項(xiàng)目營(yíng)銷(xiāo)計(jì)劃書(shū)
- 冰球守門(mén)員用保護(hù)墊產(chǎn)品供應(yīng)鏈分析
- 城區(qū)綠化病蟲(chóng)害防治服務(wù)投標(biāo)方案
- CASES-仿真分析規(guī)范編制指南V1.0版
- 孕婦學(xué)校質(zhì)量管理評(píng)價(jià)標(biāo)準(zhǔn)(100分)
- 2023年融媒體中心建設(shè)工作方案
- 老年友善醫(yī)院創(chuàng)建匯報(bào)PPT
- 園林景觀(guān)施工技術(shù)交底大全
- 交叉作業(yè)安全規(guī)程
- 個(gè)人二手牽引車(chē)轉(zhuǎn)讓合同范本
- 多學(xué)科聯(lián)合門(mén)診的實(shí)踐與探索課件
- 護(hù)理部防跌倒、墜床護(hù)理評(píng)價(jià)表
- 《高等數(shù)學(xué)》教案 03 泰勒公式
評(píng)論
0/150
提交評(píng)論