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

下載本文檔

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

文檔簡介

第五章數(shù)據(jù)完整性

數(shù)據(jù)完整性的概念

約束管理

默認(rèn)管理

規(guī)則管理

完整性技術(shù)比較研究

習(xí)題1/14/20231一、數(shù)據(jù)完整性的概念所謂完整性,就是指存儲在數(shù)據(jù)庫中數(shù)據(jù)的一致性和正確性。數(shù)據(jù)完整性是衡量數(shù)據(jù)庫中數(shù)據(jù)質(zhì)量好壞的一種標(biāo)志,是確保數(shù)據(jù)庫中數(shù)據(jù)一致、正確以及符合企業(yè)規(guī)則的一種思想,是使無序的數(shù)據(jù)條理化,確保正確的數(shù)據(jù)被存放在正確的位置的一種手段,實(shí)施數(shù)據(jù)庫完整性的目的是確保數(shù)據(jù)的質(zhì)量。所以,滿足完整性要求的數(shù)據(jù)具有以下3個(gè)特點(diǎn):①數(shù)據(jù)的值正確無誤。②數(shù)據(jù)的存在必須確保同一表格數(shù)據(jù)之間的和諧關(guān)系。③數(shù)據(jù)的存在必須能確保維護(hù)不同表格數(shù)據(jù)之間的和諧關(guān)系。在MicrosoftSQLServer系統(tǒng)中,從維護(hù)數(shù)據(jù)完整性的意義上來看,數(shù)據(jù)完整性分為四類:實(shí)體完整性、域完整性、參考完整性、用戶定義的完整性。1/14/202321.實(shí)體完整性實(shí)體完整性,也可以稱為行完整性,規(guī)定表的每一行在表中是惟一的實(shí)體。實(shí)體就是數(shù)據(jù)庫所要表示的一個(gè)實(shí)際的物體或事件。實(shí)體完整性要求每個(gè)實(shí)體都保持惟一性,因此,要求表中的所有行有一個(gè)惟一的標(biāo)識符,這種標(biāo)識符一般稱為主鍵值。實(shí)體完整性要求數(shù)據(jù)庫表中的每一條記錄都是惟一的,即表中沒有重復(fù)的記錄。因此,這就要求所有數(shù)據(jù)記錄中至少必須有一個(gè)字段的內(nèi)容是不能重復(fù)的。1/14/202332.域完整性(值域完整性)域完整性,也可以稱為列完整性,是指給定列的輸入有效性,即數(shù)據(jù)庫表中的列必須滿足某種特定的數(shù)據(jù)類型或約束。指定一個(gè)數(shù)據(jù)集對某一個(gè)列是否有效和確定是否允許空值。域完整性通常是通過有效性檢查來實(shí)現(xiàn)的,并且還可以通過限制數(shù)據(jù)類型、格式或者可能的取值范圍來實(shí)現(xiàn)。因此,強(qiáng)制域有效性的方法有:限制類型(通過數(shù)據(jù)類型)、格式(通過CHECK約束和規(guī)則)或可能值的范圍(通過FOREIGNKEY約束、CHECK約束、DEFAULT定義、NOTNULL定義和規(guī)則)。 1/14/202343.參照完整性(引用完整性)參照完整性是在插入或刪除數(shù)據(jù)時(shí),維護(hù)表格間數(shù)據(jù)一致性的手段。參照完整性確保在不同表之間的關(guān)鍵性數(shù)據(jù)保持一致(涉及兩個(gè)或兩個(gè)以上表的數(shù)據(jù)的一致性維護(hù)),防止了數(shù)據(jù)丟失或無意義的數(shù)據(jù)在數(shù)據(jù)庫中擴(kuò)散。當(dāng)添加、刪除或修改數(shù)據(jù)庫表中的記錄時(shí),可以借助引用完整性來保證相關(guān)聯(lián)的表之間的數(shù)據(jù)一致性。在SQLServer中,參照完整性一般建立在主鍵與外鍵之間的關(guān)系,或者外鍵與唯一索引之間關(guān)系的基礎(chǔ)上,它確保了有主關(guān)鍵字的表中對應(yīng)其它表的外部關(guān)鍵字的行存在。1/14/202351/14/202364.用戶定義的完整性這是由用戶定義的完整性。用戶定義的完整性即是針對某個(gè)特定關(guān)系數(shù)據(jù)庫的約束條件,它反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語義要求。SQLServer提供了定義和檢驗(yàn)這類完整性的機(jī)制,以便用統(tǒng)一的系統(tǒng)方法來處理它們,而不是用應(yīng)用程序來承擔(dān)這一功能。用戶定義完整性可以定義不屬于其他任何完整性分類的特定業(yè)務(wù)規(guī)則,其它的完整性類型都支持用戶定義的完整性。用戶定義的完整性主要是體現(xiàn)實(shí)際運(yùn)用的業(yè)務(wù)規(guī)則,可以通過前面三種完整性的實(shí)施而得到維護(hù)。例如:在titles表中,規(guī)定商業(yè)類用書的title_id的前兩個(gè)字符必須是BU等。1/14/20237實(shí)現(xiàn)數(shù)據(jù)完整性在MicrosoftSQLServer系統(tǒng)中,可以使用兩種方式實(shí)現(xiàn)數(shù)據(jù)完整性,即聲明數(shù)據(jù)完整性和過程數(shù)據(jù)完整性。聲明數(shù)據(jù)完整性(說明性引用數(shù)據(jù)完整性)就是通過在對象定義中定義的數(shù)據(jù)標(biāo)準(zhǔn)來實(shí)現(xiàn)數(shù)據(jù)完整性,在插入、修改和刪除數(shù)據(jù)時(shí)由系統(tǒng)本身自動強(qiáng)制來實(shí)現(xiàn)的。聲明數(shù)據(jù)完整性的方式包括使用各種約束、缺省和規(guī)則。過程數(shù)據(jù)完整性(引用的行動完整性)是通過在腳本語言中定義的數(shù)據(jù)完整性標(biāo)準(zhǔn)來實(shí)現(xiàn)的。在執(zhí)行這些腳本的過程中,由腳本中定義的強(qiáng)制完整性的實(shí)現(xiàn)。過程數(shù)據(jù)完整性的方式包括使用視圖、觸發(fā)器和存儲過程等,其中視圖和存儲過程不能自動執(zhí)行。1/14/20238實(shí)現(xiàn)數(shù)據(jù)完整性的途徑數(shù)據(jù)完整性類型實(shí)施途徑數(shù)據(jù)完整性類型實(shí)施途徑實(shí)體完整體性主鍵約束PRIMARYKEY域完整性默認(rèn)值約束Default惟一性約束UniqueKey檢查約束Check索引UniqueIndex外鍵約束ForeignKey標(biāo)識列IdentityColumn數(shù)據(jù)類型DataType參照完整性外鍵約束ForeignKey規(guī)則Rule檢查約束Check用戶定義完整性Rule、Triggers、Procedure觸發(fā)器TriggersCreateTable中的全部列級和表級約束系統(tǒng)存儲過程StoredProcedure1/14/20239二、約束管理約束是通過限制列中、行中和表之間數(shù)據(jù)輸入值的范圍來保證數(shù)據(jù)完整性的非常有效的方法。約束可以分為兩種:①列級約束:是行定義的一部分,只能夠應(yīng)用在一列上。②表級約束:其定義獨(dú)立于列的定義,可以應(yīng)用在一個(gè)表中的多個(gè)列上。約束的類型定義約束默認(rèn)管理檢查約束管理主鍵約束管理惟一性約束管理外鍵約束管理約束類型綜合例題1/14/202310約束的類型完整性類型約束類型描述域完整性DEFAULT(缺省)在使用INSERT語句插入數(shù)據(jù)時(shí),如果某個(gè)列的值沒有明確提供,則將定義的缺省值插入到該列中CHECK(檢查)指定某一個(gè)列中的可保存值的范圍實(shí)體完整性PRIMARYKEY(主鍵)每一行的惟一標(biāo)識符,確保用戶不能輸入冗余值和確保創(chuàng)建索引,提高性能,不允許空值UNIQUE(惟一性)防止出現(xiàn)冗余值,并且確保創(chuàng)建索引,提高性能。允許空值參考完整性FOREIGNKEY(外鍵)定義一列或幾列,其值與本表或者另外一個(gè)表的主鍵值匹配約束是保證數(shù)據(jù)完整性的有效方法。約束可以確保把有效的數(shù)據(jù)輸入到列中和維護(hù)表和表之間的特定關(guān)系。每一種數(shù)據(jù)完整性類型,例如實(shí)體完整性、域完整性、參考完整性,都由不同的約束類型來保障。下表描述了不同類型的約束和完整性之間的關(guān)系。1/14/202311定義約束定義約束從無到有的創(chuàng)建約束,這種操作可以使用CREATETABLE語句或ALTERTABLE語句完成。使用CREATETABLE語句表示在創(chuàng)建表的時(shí)候定義約束,使用ALTERTABLE語句表示在已有的表中添加約束。如果表中已經(jīng)有數(shù)據(jù),那么也可以增加約束。1/14/202312CREATETABLE語句CREATETABLEtable_name(column_namedata_type[CONSTRAINTconstraint_name{PRIMARYKEY[CLUSTERED|NONCLUSTERED]|UNIQUE[CLUSTERED|NONCLUSTERED]|FOREIGNKEYREFERENCESref_table(ref_colunm)|DEFAULTconstant_expression|CHECKlogical_expression}]使用ALTERTABLE語句定義約束的語法與使用CREATETABLE語句定義約束的語法類似。1/14/202313【示例】定義一個(gè)主鍵約束CREATETABLEstudents(student_idintNOTNULLCONSTRAINTPK_student_idPRIMARYKEY,student_namevarchar(10)NOTNULL,student_genderchar(1)NOTNULL,student_birthdaydatetimeNOTNULL)1/14/202314當(dāng)定義約束或修改約束的定義時(shí),應(yīng)該考慮下列因素:不必刪除表,就可以直接創(chuàng)建、修改和刪除約束的定義。應(yīng)該在應(yīng)用程序中增加錯(cuò)誤檢查機(jī)制,測試數(shù)據(jù)是否與約束相沖突。當(dāng)在表上增加索引時(shí),SQLSERVER系統(tǒng)檢查表中的數(shù)據(jù)是否與約束沖突。當(dāng)創(chuàng)建約束時(shí),應(yīng)該指定約束的名稱。否則,系統(tǒng)將要提供復(fù)雜的、系統(tǒng)自動生成的名稱。對于一個(gè)數(shù)據(jù)庫來說,約束名稱必須是惟一的。一般來說,約束的名稱格式應(yīng)該是:約束類型簡稱_表名_列號_代號1/14/202315約束信息的查看查看約束信息的方法為:(1)執(zhí)行系統(tǒng)存儲過程,如:sp_help或sp_helpconstraint。(2)查詢信息模式視圖,如:check_constraints、referential_constraints或table_constraints。(3)查看一些系統(tǒng)表,例如約束的定義存儲在下列系統(tǒng)表中:sysconstraints、sysreferences和syscomments。1/14/202316(1)使用sp_helpconstraint可得到數(shù)據(jù)庫中某一個(gè)表中的全部約束信息?!纠匡@示pubs數(shù)據(jù)庫中authors表中的全部約束信息USEpubsEXECsp_helpconstraintauthors1/14/202317(2)syscomments系統(tǒng)表包含了每一個(gè)視圖、規(guī)則、缺省、觸發(fā)器、檢查約束、缺省約束和存儲過程等信息。在該系統(tǒng)表中的文本列上記錄了這些對象的原始定義語句。使用該系統(tǒng)表,可以查看有關(guān)約束的定義信息。【例】顯示pubs數(shù)據(jù)庫中syscomments系統(tǒng)表的內(nèi)容USEpubsSELECTid,text,texttype,languageFROMsyscomments1/14/202318(3)sysreferences系統(tǒng)表記錄了與外鍵約束有關(guān)的信息。【例】顯示pubs數(shù)據(jù)庫中sysreferences系統(tǒng)表的內(nèi)容USEpubsSELECT*FROMsysreferences1/14/202319默認(rèn)(DEFAULT)約束管理當(dāng)使用INSERT語句插入數(shù)據(jù)時(shí),如果某一個(gè)列沒有指定數(shù)據(jù),那么默認(rèn)約束就在該列中輸入一個(gè)值。因此,默認(rèn)約束保證了域完整性。DEFAULT約束用于指定一個(gè)字段的默認(rèn)值。它的作用是:當(dāng)向表中插入數(shù)據(jù)時(shí),如果用戶沒有給某一字段輸入數(shù)據(jù),則系統(tǒng)自動將默認(rèn)值作為該字段的數(shù)據(jù)內(nèi)容。向表中添加數(shù)據(jù)時(shí),如果沒有輸入字段值,則此字段的值可能是下面幾種情況:●此字段定義了默認(rèn)值,則此字段的內(nèi)容為默認(rèn)值;●此字段未定義默認(rèn)值,而且允許為NULL值,則NULL值將成為該字段的內(nèi)容;●此字段未定義默認(rèn)值,也不允許為NULL值,保存時(shí)將會出現(xiàn)錯(cuò)誤信息,而且添加數(shù)據(jù)操作失敗。1/14/202320使用CREATETABLE語句創(chuàng)建DEFAULT約束在CREATETABLE語句中添加DEFAULT子句,DEFAULT子句格式如下:[CONSTRAINTconstraint_name]DEFAULTconstant_expression其中:constraint_name為約束名;constant_expression為常量表達(dá)式?!臼纠?/p>

將入學(xué)日期字段的默認(rèn)值設(shè)置為2003-9-1CREATETABLEstud_new(學(xué)號char(8)NOTNULL,姓名char(8)NOTNULL,入學(xué)日期datetimeCONSTRAINTdtDEFAULT'2003-9-1')1/14/202321使用企業(yè)管理器創(chuàng)建DEFAULT約束1/14/202322當(dāng)使用默認(rèn)約束時(shí),需要考慮下列一些因素:默認(rèn)約束只能應(yīng)用于INSERT語句。每一個(gè)列只能定義一個(gè)默認(rèn)約束。默認(rèn)約束不能放在有IDENTITY屬性的列上或者數(shù)據(jù)類型為timestamp的列上。默認(rèn)約束允許指定一些由系統(tǒng)函數(shù)提供的值。這些系統(tǒng)函數(shù)包括USER、CURRENT_USER、SESSION_USER、SYSTEM_USER、CURRENT_TIMESTAMP等。1/14/202323檢查(CHECK)約束管理檢查約束用來限制用戶輸入某一個(gè)列的數(shù)據(jù),即在該列中只能輸入指定范圍的數(shù)據(jù)。檢查約束非常類似于WHERE子句,其共同之處就是指定可接受數(shù)據(jù)的條件。檢查約束與外鍵約束的相同之處,在于都是通過檢查數(shù)據(jù)的值的合理性來實(shí)現(xiàn)數(shù)據(jù)完整性的維護(hù)。但是,外鍵約束是從另一張表上獲得合理的數(shù)據(jù),而檢查約束則是通過對一個(gè)邏輯表達(dá)式的結(jié)果進(jìn)行判斷來對數(shù)據(jù)進(jìn)行檢查。檢查約束可以用來限制字段上可以接受的數(shù)據(jù)值。檢查約束使用邏輯表達(dá)式來限制字段上可以接受的數(shù)據(jù)值。檢查約束通過檢查輸入表中字段的的數(shù)據(jù)值來維護(hù)域完整性。1/14/202324使用檢查約束的方式有:●在創(chuàng)建表格時(shí),定義檢查約束,檢查約束是表格定義的一部分?!裨谝呀?jīng)建立的表上添加檢查約束?!裥薷幕騽h除表上已經(jīng)定義的檢查約束。1/14/202325使用CREATETABLE語句創(chuàng)建檢查約束使用CREATETABLE語句創(chuàng)建表時(shí),可以通過在該語句中添加一個(gè)CHECK子句創(chuàng)建檢查約束。該子句的語法格式如下: [CONSTRAINTcheck_name]CHECK(check_criterial)其中,check_name為約束名,check_criterial為約束條件。【示例】將“學(xué)號”和“課程編號”兩個(gè)字段的組合設(shè)置為主鍵,再將“成績”字段的取值限制在0到100之間USElxCREATETABLE學(xué)生成績( 學(xué)號char(8)NOTNULL, 課程編號char(3)NOTNULL, 成績r(jià)ealNOTNULL

CONSTRAINTCK_CJCHECK(成績>=0AND成績<=100),

CONSTRAINTpk_xkPRIMARYKEY(學(xué)號,課程編號))

1/14/202326【例】定義一個(gè)檢查約束ALTERTABLEstudentsADDCONSTRAINTCHECK_student_denderCHECK(student_gender='F'ORstudent_gender='M')【示例】創(chuàng)建名為chk_id的約束CREATETABLEcust_sample(cust_id intPRIMARYKEY,cust_namechar(50),cust_addresschar(50),cust_credit_limit money,

constraintchk_idcheck(cust_idbetween0and10000))1/14/202327當(dāng)使用檢查約束時(shí),需要考慮以下因素:當(dāng)執(zhí)行INSERT語句或UPDATE語句時(shí),該約束驗(yàn)證相應(yīng)的數(shù)據(jù)是否滿足檢查約束的條件。檢查約束可以參考本表中的其他列。例如,在employee表中包含出生日期(birthdate)列和雇用日期(hiredate)列,那么birthdate列可以引用hiredate列,使得birthdate列的數(shù)據(jù)小于hiredate列的數(shù)據(jù)。檢查約束不能放在有IDENTITY屬性的列上或者數(shù)據(jù)類型為timestamp的列上。因?yàn)檫@兩種列都會自動插入數(shù)據(jù)。檢查約束不能包含子查詢語句。1/14/202328刪除檢查約束的語法是:ALTERTABLEtable_nameDROP{[CONSTRAINT]check_name}[,...n]向表添加檢查約束的語法是:ALTERTABLEtable_name{ADDcolumn_name

column_definition

CHECK(check_criterial)}[,...n]使所有的約束或指定的約束無效的語法是:ALTERTABLEtable_name{CHECK|NOCHECK}CONSTRAINT{ALL|constraint_name[,...n]}1/14/202329使用企業(yè)管理器創(chuàng)建檢查約束1/14/202330主鍵(PRIMARYKEY)約束管理一個(gè)表通常可以通過一個(gè)字段(或多個(gè)字段組合)的數(shù)據(jù)來惟一標(biāo)識表中的每一行,這個(gè)字段(或字段組合)被稱為表的主鍵。為了有效實(shí)現(xiàn)數(shù)據(jù)的管理,每個(gè)表都應(yīng)該有主鍵,且只能有一個(gè)主鍵。建議使用一個(gè)小的整數(shù)列作為主鍵。如果要求表中的一個(gè)字段(或幾個(gè)字段的組合)具有不重復(fù)的值,而且不允許為NULL值,就應(yīng)當(dāng)將這個(gè)字段(或字段組合)設(shè)置為表的主鍵。設(shè)置主鍵后,系統(tǒng)會檢查該字段(或字段組合)的輸入值是否符合這個(gè)約束條件,從而來維護(hù)數(shù)據(jù)的完整性,并且也可以減少輸入錯(cuò)誤數(shù)據(jù)的概率。主鍵約束在表中定義一個(gè)主鍵值,這是惟一確定表中每一行數(shù)據(jù)的標(biāo)識符。在所有的約束類型中,主鍵約束是最重要的一種約束類型,也是使用最為廣泛的約束類型。該約束強(qiáng)制實(shí)體完整性。1/14/202331如果不在主鍵字段中輸入數(shù)據(jù)或輸入的數(shù)據(jù)在前面已經(jīng)輸入過,則這條記錄將被拒絕。另外,當(dāng)主鍵是由多個(gè)字段組合而成時(shí),某個(gè)字段的數(shù)據(jù)可以出現(xiàn)重復(fù),但是這幾個(gè)字段的組合值必須是惟一的。使用主鍵約束的方式有:●在創(chuàng)建表格時(shí),定義主鍵,主鍵是表格定義的一部分。●在一個(gè)沒有定義主鍵的表上添加主鍵約束。●修改或刪除表上已經(jīng)定義的主鍵。1/14/202332在CREATETABLE語句中添加PRIMARY子句,PRIMARY子句格式如下: [CONSTRAINTconstraint_name] PRIMARYKEY[CLUSTERED|NONCLUSTERED] [(column_name,...n)]使用CONSTRAINT關(guān)鍵字時(shí),可以顯式地對約束命名。如果省略這個(gè)關(guān)鍵字,則由系統(tǒng)自動地對約束命名。主鍵字具有索引作用,用來實(shí)現(xiàn)對表內(nèi)數(shù)據(jù)的快速查詢。索引類型可以是CLUSTERED(聚集的)或NONCLUSTERED(非聚集的),默認(rèn)類型為CLUSTERED(聚集的)。使用CREATETABLE語句創(chuàng)建主鍵約束1/14/202333①若用單個(gè)字段作為主鍵,則直接在該字段定義中加入PRIMARYKEY子句,但不能指定字段名;【示例】用單個(gè)字段作為主鍵 CREATETABLElx1( 學(xué)號char(8)NOTNULLPRIMARYKEY, 姓名char(8)NOTNULL, 入學(xué)日期datetime)【示例】用單個(gè)字段作為主鍵 CREATETABLElx1( 學(xué)號char(8)NOTNULL

CONSTRAINTpk_ID

PRIMARYKEY, 姓名char(8)NOTNULL, 入學(xué)日期datetime)1/14/202334一個(gè)表中可以有一個(gè)以上的列組合,這些組合能惟一標(biāo)識表中的行,這任意一種列組合被成為候選鍵(candidatekey)。數(shù)據(jù)庫管理員從候選鍵中選擇一個(gè)(也只能挑選一個(gè))合適的作為表的主鍵?!臼纠吭趐art_sample表中,part_nmbr和part_name都可以是候選鍵,但是只將part_nmbr選作主鍵。USEpubsCREATETABLEpart_sample(part_nmbrintPRIMARYKEY,part_namechar(30),part_weightdecimal(6,2),part_colorchar(15))1/14/202335②若用幾個(gè)字段的組合作為主鍵,則在各個(gè)字段定義后面加上PRIMARYKEY子句,并指定組成主鍵的各個(gè)字段名?!臼纠坑脦讉€(gè)字段的組合作為主鍵,建立表級主鍵CREATETABLE成績(學(xué)號char(8)NOTNULL, 課程編號char(3)NOTNULL, 成績r(jià)eal,

CONSTRAINTpk_x_kPRIMARYKEY(學(xué)號,課程編號))1/14/202336刪除主鍵的語法是:ALTERTABLEtable_nameDROP{[CONSTRAINT]primarykey_name}[,...n]向表添加主鍵約束的語法是:ALTERTABLEtable_nameADD[CONSTRAINTprimarykey_name]

PRIMARYKEY[CLUSTERED|NONCLUSTERED](column_name[,...n])1/14/202337查看指定表上的主鍵信息利用系統(tǒng)存儲過程sp_pkeys,可以瀏覽指定表上的主鍵信息。語法為:sp_pkeystable_name【示例】USEpubsEXECsp_pkeyspart_sampleGO1/14/202338通過企業(yè)管理器創(chuàng)建/取消主鍵約束1/14/202339惟一性(UNIQUE)約束管理惟一性約束主要用來確保不受主鍵約束的列上的數(shù)據(jù)的惟一性。即:保證在不是主鍵的字段上不會出現(xiàn)重復(fù)的數(shù)據(jù)。當(dāng)表中已經(jīng)有了一個(gè)主鍵約束時(shí),如果需要在其他列上實(shí)現(xiàn)實(shí)體完整性,由于表中不能有兩個(gè)或兩個(gè)以上的主鍵約束,那么可以通過創(chuàng)建惟一性約束來實(shí)現(xiàn)。一般把唯一性約束稱為候選的主鍵約束。使用惟一性約束的方式有:●在創(chuàng)建表格時(shí),定義惟一性約束,惟一性約束是表格定義的一部分?!裨谝呀?jīng)有數(shù)據(jù)但是沒有重復(fù)值的列或列的集合上添加惟一性約束?!裥薷幕騽h除表上已經(jīng)定義的惟一性約束。1/14/202340使用惟一性約束和主鍵約束都可以保證數(shù)據(jù)的惟一性,但它們之間有兩個(gè)明顯的區(qū)別:●惟一性約束主要用在非主鍵的一列或多列上要求數(shù)據(jù)惟一的情況。●定義了惟一性約束的字段的數(shù)據(jù)可以為NULL值,而定義了主鍵約束的字段的數(shù)據(jù)不能為NULL值。●可以在同一個(gè)表上設(shè)置多個(gè)惟一性約束,而在一個(gè)表上只能設(shè)置一個(gè)主鍵。1/14/202341通過在CREATETABLE語句中添加一個(gè)UNIQUE子句,也可以設(shè)置惟一性約束,該子句的語法格式如下:

CONSTRAINTconstraint_nameUNIQUE[CLUSTERED|NONCLUSTERED](column[,…n])如果要對單個(gè)字段創(chuàng)建惟一性約束,則直接在字段定義中添加UNIQUE子句;如果要對幾個(gè)字段的組合創(chuàng)建惟一性約束,則在各個(gè)字段定義后面加上UNIQUE子句?!纠繉ⅰ敖滩木幪枴痹O(shè)置為主鍵,將“教材名”設(shè)置為惟一性約束USElxCREATETABLE教材(教材編號char(8)NOTNULLCONSTRAINTPK_JPRIMARYKEY,教材名char(20)NULLCONSTRAINTUN_JUNIQUENONCLUSTERED,出版社char(30),定價(jià)real)使用CREATETABLE語句創(chuàng)建惟一性約束1/14/202342刪除惟一性約束的語法是:ALTERTABLEtable_nameDROP{[CONSTRAINT]unique_name}[,...n]向表添加惟一性鍵約束的語法是:ALTERTABLEtable_nameADD[CONSTRAINTunique_name]

UNIQUE[CLUSTERED|NONCLUSTERED](column_name[,...n])1/14/202343

使用企業(yè)管理器創(chuàng)建惟一性約束1/14/202344外鍵(FOREIGNKEY)約束管理外鍵約束用于維護(hù)同一數(shù)據(jù)庫中兩表之間的一致性關(guān)系。如果希望一個(gè)表中的字段(或字段組合)與其他表中的主鍵字段(或具有惟一性約束的字段,或字段組合)相關(guān),這個(gè)字段(或字段組合)就成為前一個(gè)表中的外鍵。外鍵約束將限制破壞這種關(guān)聯(lián)的操作。外鍵約束強(qiáng)制參考完整性。外鍵約束定義一個(gè)列或多個(gè)列,這些列可以參考同一個(gè)表或另外一個(gè)表中的主鍵約束列或惟一性約束列。實(shí)際上,通過創(chuàng)建外鍵約束可以實(shí)現(xiàn)表和表之間的依賴關(guān)系。在SQLServer關(guān)系型數(shù)據(jù)庫管理系統(tǒng)中,表和表之間存在著大量的關(guān)系,這些關(guān)系都是由主鍵約束和外鍵約束共同實(shí)現(xiàn)的。1/14/202345以SQLServer提供的pubs數(shù)據(jù)庫中的publisgers表和titles表為例。外鍵的作用不只是對輸入自身表格的數(shù)據(jù)進(jìn)行限制,同時(shí)也限制了對主鍵所在表的數(shù)據(jù)進(jìn)行修改。當(dāng)主鍵所在的表的數(shù)據(jù)被另一張表的外鍵所引用時(shí),用戶將無法對主鍵里的數(shù)據(jù)進(jìn)行修改或刪除,除非事先刪除或修改引用的數(shù)據(jù)。1/14/202346如果定義了兩個(gè)表之間的參照完整性,則要求:(1)從表不能引用不存在的鍵值。例如,CJB表中行記錄出現(xiàn)的學(xué)號必須是XSB表中已存在的學(xué)號。(2)如果主表中的鍵值更改了,那么在整個(gè)數(shù)據(jù)庫中,對從表中該鍵值的所有引用要進(jìn)行一致的更改。例如,如果對XSB表中的某一學(xué)號修改,則CJB表中所有對應(yīng)學(xué)號也要進(jìn)行相應(yīng)的修改。(3)如果主表中沒有關(guān)聯(lián)的記錄,則不能將記錄添加到從表。如果要刪除主表中的某一記錄,則應(yīng)先刪除從表中與該記錄匹配的相關(guān)記錄。1/14/202347使用CREATETALBE語句創(chuàng)建外鍵約束該子句的語法格式如下:

[CONSTRAINTconstraint_name] FOREIGNKEY(column_name[,...n]) REFERENTCESref_table(ref_column[,...n])其中,constraint_name為約束名,column_name為字段名,ref_table為引用表,ref_column為引用表中的具有主鍵或惟一性屬性的字段。在FOREIGNKEY關(guān)鍵字后面的列名是外鍵約束所在的表中的列名,REFERENCES關(guān)鍵字后面的表名和列名是主鍵約束所在的表名和列名。若外鍵由一個(gè)字段組成,則該字段名可以省略,可將FOREIGNKEY子句跟在該字段定義的后面;若外鍵由多個(gè)字段組合而成,則該字段名列表不能省略,應(yīng)將FOREIGNKEY子句放在所有字段定義的后面。1/14/202348【示例】創(chuàng)建外鍵約束CREATEDATABASE商品銷售/*創(chuàng)建一個(gè)名為“商品銷售”的數(shù)據(jù)庫。*/GOUSE商品銷售CREATETABLE商品(/*創(chuàng)建一個(gè)名為“商品”的主鍵表*/商品編號char(8)NOTNULLCONSTRAINTPK_SPRIMARYKEY,/*設(shè)置商品編號字段為主鍵*/品名char(16),單價(jià)real)GOCREATETABLE銷售(/*創(chuàng)建一個(gè)名稱為“銷售”的外鍵表*/訂單編號char(8)NOTNULL,商品編號char(8)NOTNULL

CONSTRAINTFK_SFOREIGNKEYREFERENCES商品(商品編號),/*設(shè)置商品編號字段為外鍵*/數(shù)量int,金額real,

CONSTRAINTPK_D_SPRIMARYKEY(訂單編號,商品編號))/*設(shè)置“訂單編號”和“商品編號”兩個(gè)字段的組合為主鍵*/GO1/14/202349【示例】建立外鍵約束CREATEDATABASEFK/*創(chuàng)建數(shù)據(jù)庫*/GOUSEFKCREATETABLEpub(/*創(chuàng)建描述出版商的表pub*/pub_idvarchar(20)PRIMARYKEY,pub_namevarchar(50),addressvarchar(20),cityvarchar(10),statechar(2),countrychar(10))GOCREATETABLEauthor(/*創(chuàng)建描述作者的表author*/author_idvarchar(20)PRIMARYKEY,author_namevarchar(50),phonevarchar(20),zipcodechar(10))GO1/14/202350CREATETABLEbook(/*創(chuàng)建描述書的表*/title_idintPRIMARYKEY,title_namevarchar(50),autor_idvarchar(20)CONSTRAINTFK_auidFOREIGNKEYREFERENCESauthor(author_id),

/*列級外鍵限制author_id*/pub_idvarchar(20)CONSTRAINTFK_pubFOREIGNKEYREFERENCESpub(pub_id))

/*表級外鍵限制pub_id*/GO1/14/202351外鍵約束可以引用同一個(gè)數(shù)據(jù)庫中同一張表里的列,稱為自引用表?!臼纠繀⒖纪槐淼耐怄I約束USElibraryALTERTABLEemployee(emp_numintNOTNULL

CONSTRAINTpk_emp_numPRIMARYKEY,mgr_numintNOTNULL

CONSTRAINTfk_mgr_numREFERENCESemployee(emp_num))注意:在這個(gè)外鍵約束中,由于參考了同一個(gè)表,所以只使用REFERENCES子句,沒有使用FOREIFNKEY子句。1/14/202352創(chuàng)建外鍵時(shí)注意:●外鍵字段與主鍵字段的數(shù)據(jù)類型應(yīng)當(dāng)匹配,字段長度應(yīng)當(dāng)相等,字段名稱可以相同也可以不同,兩個(gè)表必須位于同一個(gè)數(shù)據(jù)庫內(nèi)?!窬哂兄麈I約束或惟一性約束的表為主鍵表,另一個(gè)則為外鍵表。1/14/202353刪除外鍵約束的語法是:ALTERTABLEtable_nameDROP{[CONSTRAINT]foreignkey_name}[,...n]向表添加外鍵約束的語法是:ALTERTABLEtable_name{ADD

{

column_name

column_definition[CONSTRAINTconstraint_name]

[[FOREIGNKEY]REFERENTCESref_table[(ref_column)]]}[,...n]

1/14/202354【示例】在juvenile表中增加一個(gè)外鍵約束該約束把juvenile表中的成年人代號與adult表中的成年人代號關(guān)聯(lián)起來,在這兩個(gè)表之間創(chuàng)建了一種制約關(guān)系。USElibraryALTERTABLEjuvenileADDCONSTRAINTFK_adult_menbernoFOREIFNKEY(adult_menberno)REFERENCESadule(menber_no)1/14/202355使用sp_fkeys系統(tǒng)存儲過程查看有關(guān)外鍵的信息,語法為:

sp_fkeysprimary_table_name【示例】查看引用表pub的主鍵的外鍵信息USEFKEXECsp_fkeyspubGO查看外鍵信息1/14/202356使用企業(yè)管理器創(chuàng)建外鍵約束1/14/202357

圖表允許以一種圖形化的方式來管理和使用數(shù)據(jù)庫的表格、字段、索引和約束等。通過圖表,用戶可以瀏覽數(shù)據(jù)庫中的表格和表格的關(guān)系,也可以對數(shù)據(jù)庫的結(jié)構(gòu)作復(fù)雜的操作。使用數(shù)據(jù)庫關(guān)系圖管理外鍵約束1/14/2023581/14/2023591/14/202360綜合例題createdatabase教學(xué)成績管理數(shù)據(jù)庫gocreatetable班級信息表(編號char(8)primarykey,--定義主鍵名稱nvarchar(15)notnull,入學(xué)日期datetimenotnull,專業(yè)編號char(6))gocreatetable學(xué)生信息表(學(xué)號char(6)primarykey,姓名nchar(4)notnull,性別nchar(1)check(性別in('女','男')),出生日期datetime,民族nvarchar(8)default('漢族'),籍貫nvarchar(20)default('陜西省'),家庭地址nvarchar(20),郵政編碼char(6),宿舍號intidentity(1001,1)notnull,--創(chuàng)建標(biāo)識列宿舍電話varchar(8)constraintck_宿舍電話check(宿舍電話like'8155[0-9][0-9][0-9][0-9]'),身份證號char(18)notnullunique,政治面貌nvarchar(5)check(政治面貌in('中共黨員','共青團(tuán)員','群眾','其他')),班級編號char(8)references班級信息表(編號)onupdatecascade,--onupdatecascade表示級聯(lián)更新,即參照表(父表)中更新被引用主鍵數(shù)據(jù)時(shí),也將在引用表(子表)中更新引用外鍵數(shù)據(jù)。備注varchar(200),簡歷ntext,照片image)1/14/202361三、默認(rèn)值管理默認(rèn)(DEFAULT,缺?。┦且环N數(shù)據(jù)庫對象,是往用戶輸入記錄時(shí)沒有指定具體數(shù)據(jù)的列中自動插入的數(shù)據(jù)。默認(rèn)值對象可以用于多個(gè)列或用戶自定義數(shù)據(jù)類型,當(dāng)使用INSERT語句向表中插入數(shù)據(jù)時(shí),如果沒有為綁定有默認(rèn)值的列或者數(shù)據(jù)類型指定數(shù)據(jù),那么系統(tǒng)將自動地把指定的默認(rèn)值插入到相應(yīng)的位置。當(dāng)默認(rèn)值定義之后,可以反復(fù)使用。默認(rèn)值定義是限制列數(shù)據(jù)的首選并且標(biāo)準(zhǔn)的方法,因?yàn)槎x和表存儲在一起,當(dāng)除去表時(shí),將自動除去默認(rèn)值定義。然而,當(dāng)在多個(gè)列中多次使用默認(rèn)值時(shí),默認(rèn)值也有其優(yōu)點(diǎn)。定義默認(rèn)默認(rèn)值綁定解除默認(rèn)值綁定刪除默認(rèn)使用企業(yè)管理器管理默認(rèn)1/14/202362在定義默認(rèn)時(shí),定義的默認(rèn)值必須與列的數(shù)據(jù)類型一致,并且不能與表中的各種約束定義相違背。默認(rèn)值是一個(gè)向后兼容的功能,它執(zhí)行一些與使用ALTER或CREATETABLE語句的DEFAULT關(guān)鍵字創(chuàng)建的默認(rèn)值定義相同的功能。使用CREATEDEFAULT創(chuàng)建默認(rèn)值。語法格式為:

CREATEDEFAULTdefault_name

AS

constant_expression定義默認(rèn)1/14/202363當(dāng)創(chuàng)建默認(rèn)對象時(shí),需要考慮以下因素:作為默認(rèn)的值必須對綁定到該列或者數(shù)據(jù)類型上的各種約束定義是有效的。即該值必須是一個(gè)合法量。如果定義的默認(rèn)值大于它隨后要綁定的表列的允許長度,那么它將被截?cái)?。因此,要確保列的數(shù)據(jù)庫類型和大小要與將要創(chuàng)建的默認(rèn)值相匹配。如果在數(shù)據(jù)類型或者列上已經(jīng)綁定了一個(gè)默認(rèn),那么就不能在該列上創(chuàng)建一個(gè)默認(rèn)約束。也就是說,在一個(gè)列上,只能有一個(gè)默認(rèn)值。1/14/202364【示例】創(chuàng)建字符默認(rèn)值unknownUSEpubsCREATEDEFAULTphonedfltAS'unknown'GO【示例】使用CREATEDEFAULT創(chuàng)建默認(rèn)值對象USEpubsCREATEDEFAULT入館時(shí)間ASgetdate()GO1/14/202365默認(rèn)值綁定將默認(rèn)值捆綁到列或用戶自定義數(shù)據(jù)類型上,它就可以為列和用戶自定義數(shù)據(jù)類型提供默認(rèn)值。默認(rèn)值和表列的綁定通過sp_bindefault系統(tǒng)存儲過程實(shí)現(xiàn)。語法格式為:sp_bindefault[@defname=]'default_name',

[@objname=]'object_name'

[,[@futureonly=]'futureonly_flag']

1/14/202366A.將默認(rèn)值捆綁到數(shù)據(jù)庫表中的列上假定已經(jīng)用CREATEDEFAULT語句在當(dāng)前數(shù)據(jù)庫中定義了名為today的默認(rèn)值,此示例將默認(rèn)值綁定到employees表的hiredate列。當(dāng)將行添加到employees表而且沒有提供hiredate列的數(shù)據(jù)時(shí),列取得默認(rèn)值today的值?!臼纠縐SEpubsEXECsp_bindefault'today','employee.hire_date'GO【示例】創(chuàng)建和綁定一個(gè)默認(rèn)USElibraryCREATEDEFAULTphone_no_defaultAS'(010)00000000'GOEXECsp_bindefault'phone_no_default','customers.phone_no_col‘GO1/14/202367

【例如】將前面創(chuàng)建的默認(rèn)值捆綁到列上USEpubsEXECsp_bindefault'入館時(shí)間','employee.hire_date'1/14/202368B.將默認(rèn)值綁定到用戶定義的數(shù)據(jù)類型假定存在命名為def_ssn的默認(rèn)值和命名為ssn的用戶定義數(shù)據(jù)類型,此示例將默認(rèn)值def_ssn綁定到用戶定義的數(shù)據(jù)類型ssn中。在創(chuàng)建表時(shí),所有指派了用戶定義數(shù)據(jù)類型ssn的列都將繼承默認(rèn)值。類型ssn的現(xiàn)有列也繼承默認(rèn)值def_ssn,除非為futureonly_flag值指定了futureonly,或者在列上直接綁定了默認(rèn)值。綁定到列的默認(rèn)值始終優(yōu)先于綁定到數(shù)據(jù)類型的默認(rèn)值?!臼纠縐SEmasterEXECsp_bindefault'def_ssn','ssn'GO1/14/202369C.使用futureonly_flag示例將默認(rèn)值def_ssn綁定到用戶定義的數(shù)據(jù)類型ssn。因?yàn)橐阎付╢utureonly,所以不影響類型ssn的現(xiàn)有列?!臼纠縐SEmasterEXECsp_bindefault'def_ssn','ssn','futureonly'GO1/14/202370解除默認(rèn)值綁定使用sp_unbindefault在當(dāng)前數(shù)據(jù)庫中為列或用戶定義數(shù)據(jù)類型解除默認(rèn)值綁定。語法格式為:

sp_unbindefault[@objname=]'對象名'

[,[@futureonly=]'futureonly_flag']1/14/202371a.為列解除默認(rèn)值綁定為表employees的hiredate列解除默認(rèn)值綁定。EXECsp_unbindefault'employees.hire_date'b.為用戶定義數(shù)據(jù)類型解除默認(rèn)值綁定為用戶定義數(shù)據(jù)類型ssn解除默認(rèn)值綁定。這將為該數(shù)據(jù)類型的現(xiàn)有列和將來的列解除綁定。EXECsp_unbindefault'ssn'c.使用futureonly_flag為用戶定義數(shù)據(jù)類型ssn解除默認(rèn)值綁定,現(xiàn)有的ssn列不受影響。EXECsp_unbindefault'ssn','futureonly'1/14/202372刪除默認(rèn)如果要刪除一個(gè)默認(rèn)值對象,首先應(yīng)解除默認(rèn)值對象與用戶定義類型及表字段的捆綁關(guān)系,然后才能刪除當(dāng)前數(shù)據(jù)庫中的一個(gè)或多個(gè)默認(rèn)值對象。使用DROPDEFAULT從當(dāng)前數(shù)據(jù)庫中刪除一個(gè)或多個(gè)用戶定義的默認(rèn)值。語法格式為:

DROPDEFAULTdefault_name

[,...n]如果默認(rèn)值沒有綁定到列或用戶定義的數(shù)據(jù)類型,可以很容易地使用DROPDEFAULT將其除去?!臼纠縿h除默認(rèn)值USElibraryDROPDEFAULTphone_no_defaultGO【例如】解除默認(rèn)值并刪除USE學(xué)生圖書借閱管理EXECsp_unbindefault'圖書信息.入館時(shí)間'DROPDEFAULT入館時(shí)間1/14/202373使用企業(yè)管理器管理默認(rèn)值A(chǔ).使用企業(yè)管理器創(chuàng)建默認(rèn)值B.使用企業(yè)管理器查看默認(rèn)C.使用企業(yè)管理器對默認(rèn)綁定與松綁D.用企業(yè)管理器管理刪除默認(rèn)1/14/202374四、規(guī)則管理規(guī)則是一種數(shù)據(jù)庫對象,是一組使用T-SQL書寫的條件語句,就是數(shù)據(jù)庫中對存儲在表的列或用戶自定義數(shù)據(jù)類型中的值的規(guī)定和限制。規(guī)則是單獨(dú)存儲的獨(dú)立的數(shù)據(jù)庫對象。規(guī)則可以被綁定到一個(gè)或多個(gè)列上,還可以被綁定到用戶自己定義的數(shù)據(jù)類型上。規(guī)則與其作用的表或用戶自定義數(shù)據(jù)類型是相互獨(dú)立的,即表或用戶自定義對象的刪除、修改不會對與之相連的規(guī)則產(chǎn)生影響。當(dāng)用戶向綁定有規(guī)則的數(shù)據(jù)列上插入或修改值時(shí),如果表中有綁定有規(guī)則對象的列或數(shù)據(jù)類型,那么規(guī)則會檢測修改值的完整性。當(dāng)某個(gè)規(guī)則定義之后,可以反復(fù)使用。創(chuàng)建規(guī)則捆綁規(guī)則解除規(guī)則綁定刪除規(guī)則規(guī)則的優(yōu)先級使用企業(yè)管理器管理規(guī)則1/14/202375創(chuàng)建規(guī)則使用T-SQL語句CREATERULE可以創(chuàng)建規(guī)則。語法格式為:

CREATERULErule_name

AScondition_expression或rule_decription條件表達(dá)式是定義規(guī)則的條件。描述規(guī)則的條件表達(dá)式中可以包含諸如算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和謂詞(如IN、LIKE、BETWEEN)之類的關(guān)鍵字??傊?,只要是在查詢的WHERE子句中任何有效的表達(dá)式都可以用作規(guī)則。注:①規(guī)則不能引用表中的數(shù)據(jù)列或其他數(shù)據(jù)庫對象。可以包含不引用數(shù)據(jù)庫對象的內(nèi)置函數(shù)。②條件表達(dá)式包含一個(gè)局部變量,用來指定滿足規(guī)則的條件,每個(gè)局部變量以且必須以@符號開頭,該變量代表在修改該列的記錄時(shí)用戶輸入的數(shù)值。1/14/202376【例】在“學(xué)生圖書借閱管理”數(shù)據(jù)庫中定義規(guī)則“電話號碼”,限制學(xué)生的電話號碼必須是8位的數(shù)字。USE學(xué)生圖書借閱管理GOCREATERULE電話號碼AS@valelike'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'【例】在“學(xué)生圖書借閱管理”數(shù)據(jù)庫中定義規(guī)則“可借圖書冊數(shù)”,限制學(xué)生借閱圖書的冊數(shù)在“0~5”之間。USE學(xué)生圖書借閱管理GOCREATERULE可借圖書冊數(shù)AS@vale>=0AND@vale<=51/14/202377【示例】創(chuàng)建一個(gè)規(guī)則,用以限制插入該規(guī)則所綁定的列中的整數(shù)范圍。createrulerange_ruleas@range>=$1000and@range<$20000【示例】創(chuàng)建一個(gè)規(guī)則,用以將輸入到該規(guī)則所綁定的列中的實(shí)際值限制為只能是該規(guī)則中列出的有限幾個(gè)值中。createrulelist_ruleas@listin('1389','0736','0877')【示例】創(chuàng)建一個(gè)遵循這種模式的規(guī)則:任意兩個(gè)字符的后面跟一個(gè)連字符和任意多個(gè)。createrulepattern_ruleas@valuelike'__-%[0-9]'1/14/202378捆綁規(guī)則創(chuàng)建規(guī)則后,規(guī)則僅僅只是一個(gè)存在于數(shù)據(jù)庫中的對象,并未發(fā)生作用。需要將規(guī)則綁定規(guī)則與數(shù)據(jù)庫表或用戶自定義對象聯(lián)系起來,才能達(dá)到創(chuàng)建規(guī)則的目的。聯(lián)系的方法稱為“綁定”。所謂綁定就是指定規(guī)則作用于哪個(gè)表的哪一列或哪個(gè)用戶自定義數(shù)據(jù)類型。表的一列或一個(gè)用戶自定義數(shù)據(jù)類型只能與一個(gè)規(guī)則相綁定,而一個(gè)規(guī)則可以綁定多個(gè)對象,這正是規(guī)則的魅力所在。使用系統(tǒng)存儲過程sp_bindrule,可以將規(guī)則捆綁到列或用戶自定義數(shù)據(jù)類型上。語法格式為:

sp_bindrule[@rulename=]'rule_name',[@objname=]'object_name'[,[@futureonly=]'futureonly_flag']1/14/202379說明:futureonly_flag僅當(dāng)將規(guī)則綁定到用戶定義的數(shù)據(jù)類型時(shí)才使用。futureonly_flag的數(shù)據(jù)類型為varchar(15),默認(rèn)值為NULL。如果futureonly_flag被設(shè)置為future_only時(shí),所有的表列不管是以后才創(chuàng)建的或綁定的,或者已經(jīng)存在的都將受到這個(gè)規(guī)則的約束。如果futureonly_flag被設(shè)置為NULL,已經(jīng)存在的使用了這個(gè)用戶自定義類型的表列,將不受這個(gè)規(guī)則的約束。使用的語法為:sp_bindrulerule_name

,'table_name.column_name'或sp_bindrulerule_name,'user_defind_datatype'[,'futureonly_flag']1/14/2023801、將規(guī)則綁定到列【示例】創(chuàng)建和綁定規(guī)則USEcompanyCREATERULErule_employee_ageAS(@employee_age>=18AND@employee_age<=35)GOsp_bindrule'rule_employee_age','employee.age'1/14/2023812、將規(guī)則綁定到用戶定義的數(shù)據(jù)類型【示例】假設(shè)存在名為rule_ssn的規(guī)則和名為ssn的用戶定義數(shù)據(jù)類型,此示例將rule_ssn綁定到ssn。在CREATETABLE語句中,類型ssn的列繼承rule_ssn規(guī)則。類型ssn的現(xiàn)有列也繼承rule_ssn規(guī)則,除非為futureonly_flag指定了futureonly或者在ssn上直接綁定了規(guī)則。綁定到列的規(guī)則始終優(yōu)先于綁定到數(shù)據(jù)類型的規(guī)則。USEmasterEXECsp_bindrule'rule_ssn','ssn'GO1/14/2023823、使用futureonly_flag【示例】將rule_ssn規(guī)則綁定到用戶定義數(shù)據(jù)類型ssn。因?yàn)橐阎付╢utureonly,所以不影響類型ssn的現(xiàn)有列。USEmasterEXECsp_bindrule'rule_ssn','ssn','futureonly'GO4、使用分隔標(biāo)識符【示例】顯示在object_name中分隔標(biāo)識符的使用USEmaste

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論