版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第8章數據完整性
《數據庫技術與應用-SQLServer2008》8.1使用規(guī)則實
施數據完整
性8.2使用默認值
實施數據完整性8.3使用約束實施數據完整性.8.1使用規(guī)則實施數據完整性 1.數據完整性數據完整性是防止數據庫中存在不符合語義規(guī)定的數據和防止因錯誤信息的輸入輸出造成無效操作或錯誤信息而提出的。數據完整性主要有以下3種類型:實體完整性(EntityIntegrity)參照完整性(ReferentialIntegrity)用戶自定義的完整性(User-definedIntegrity)在SQLServer2008中提供了完善的數據完整性機制,可以通過各種規(guī)則、默認、約束和觸發(fā)器等數據庫對象來保證數據的完整性。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.1使用規(guī)則實施數據完整性 2.規(guī)則規(guī)則(Rule)是數據庫中對存儲在表的列或用戶定義數據類型中的值的規(guī)定和限制。規(guī)則是單獨存儲的獨立的數據庫對象。規(guī)則與其作用的表或用戶定義數據類型是相互獨立的,即表或用戶定義對象的刪除、修改不會對與之相連的規(guī)則產生影響。規(guī)則的管理主要包括創(chuàng)建、查看、綁定、松綁和刪除等操作。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.1使用規(guī)則實施數據完整性 8.1.1創(chuàng)建規(guī)則
創(chuàng)建規(guī)則只能通過Transact-SQL的CREATERULE語句,而不能使用SQLServer管理平臺工具創(chuàng)建。CREATERULE語法格式如下:CREATERULErule_nameAScondition_expression其中condition_expression子句是規(guī)則的定義。condition_expression子句可以是能用于WHERE條件子句的任何表達式,它可以包含算術運算符、關系運算符和謂詞(如IN、LIKE、BETWEEN等)。注意:ondition_expression子句中的表達式的變量必須以字符“@”開頭,通常情況下,該變量的名稱應與規(guī)則所關聯(lián)的列或用戶定義的數據類型具有相同的名字。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.1使用規(guī)則實施數據完整性 8.1.1創(chuàng)建規(guī)則
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-1】創(chuàng)建雇傭日期規(guī)則hire_date_rule。
CREATERULEhire_date_rule
AS@hire_date>='1980-01-01'and@hire_date<=getdate()
【例8-2】創(chuàng)建性別規(guī)則sex_rule。CREATERULEsex_ruleAS@sexin('男','女')8.1使用規(guī)則實施數據完整性 8.1.1創(chuàng)建規(guī)則
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-3】創(chuàng)建評分規(guī)則grade_rule。
CREATERULEgrade_rule
AS@valuebetween1and100
【例8-4】創(chuàng)建字符規(guī)則my_character_rule。CREATErulemy_character_ruleAs@valuelike'[a-f]%[0-9]'8.1使用規(guī)則實施數據完整性 8.1.2查看規(guī)則
使用系統(tǒng)存儲過程sp_helptext語句可查看某個規(guī)則的定義信息,或在SQLServer管理平臺中,點擊指定數據庫下面的“可編程性”,選中“規(guī)則”后找到要查看的規(guī)則名稱,單擊鼠標右鍵,在彈出的菜單中選擇“編寫規(guī)則腳本為”→“CREATE到”→“新查詢編輯器窗口”來查看規(guī)則。sp_helptext語法如下:sp_helptext[@objname=]'name'其中[@objname=]'name'子句指明對象的名稱,用Sp_helptext存儲過程查看的對象可以是當前數據庫中的規(guī)則、默認值、觸發(fā)器、視圖或未加密的存儲過程。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.1使用規(guī)則實施數據完整性 8.1.2查看規(guī)則
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-5】創(chuàng)建查看規(guī)則hire_date_rule的文本信息。EXECUTEsp_helptexthire_date_rule運行結果如圖8-1所示:8.1使用規(guī)則實施數據完整性 8.1.3規(guī)則的綁定與松綁
創(chuàng)建規(guī)則后,規(guī)則只是一個存在于數據庫中的對象,并未發(fā)生作用。需要將規(guī)則與數據庫表或用戶定義對象聯(lián)系起來,才能達到創(chuàng)建規(guī)則的目的。聯(lián)系的方法稱為綁定。綁定就是指定規(guī)則作用于哪個表的哪一列或哪個用戶定義數據類型。當向綁定了規(guī)則的列或綁定了規(guī)則的用戶定義數據類型的所有列中插入或更新數據時,新的數據必須符合規(guī)則。表的一列或一個用戶定義數據類型只能與一個規(guī)則相綁定,而一個規(guī)則可以綁定多個對象。解除規(guī)則與對象的綁定稱為松綁。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.1使用規(guī)則實施數據完整性 1.用存儲過程sp_bindrule綁定規(guī)則
系統(tǒng)存儲過程sp_bindrule可以綁定一個規(guī)則到表的一個列或一個用戶定義數據類型上。其語法格式如下:sp_bindrule[@rulename=]'rule',[@objname=]'object_name'[,[@futureonly=]'futureonly']8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.1使用規(guī)則實施數據完整性 8.1.3規(guī)則的綁定與松綁
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-6】將例8-1創(chuàng)建的規(guī)則hire_date_rule綁定到employee表的hire_date列上。EXECsp_bindrulehire_date_rule,'employee.hire_date'運行結果如下:已將規(guī)則綁定到表的列?!纠?-8】創(chuàng)建綁定例8-2創(chuàng)建的規(guī)則sex_rule到employee表的字段sex。EXECsp_bindrulesex_rule,'employee.sex'運行結果如下:已將規(guī)則綁定到表的列。8.1使用規(guī)則實施數據完整性 2.用系統(tǒng)存儲過程sp_unbindrule解除規(guī)則的綁定
如果不再使用規(guī)則,可以解除規(guī)則。使用系統(tǒng)存儲過程sp_unbindrule語句可解除規(guī)則與列或用戶定義數據類型的綁定,其語法格式如下:sp_unbindrule[@objname=]'object_name'[,[@futureonly=]'futureonly']參數的含義與sp_bindrule相同。其中,'futureonly'選項指定現有的由此用戶定義數據類型定義的列仍然保持與此規(guī)則的綁定。如果不指定此項,所有由此用戶定義數據類型定義的列也將隨之解除與此規(guī)則的綁定。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.1使用規(guī)則實施數據完整性 8.1.3規(guī)則的綁定與松綁
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-9】解除例8-6和例8-7綁定在employee表的hire_date列和用戶定義數據類型pat_char上的規(guī)則。EXECsp_unbindrule'employee.hire_date'運行結果如下:已解除了表列與規(guī)則之間的綁定。EXECsp_unbindrulepat_char,'futureonly'運行結果如下:已解除了數據類型與規(guī)則之間的綁定。8.1使用規(guī)則實施數據完整性 8.1.4刪除規(guī)則當不再需要規(guī)則時,可以在SQLServer管理平臺中選擇規(guī)則對象,單擊右鍵,從快捷菜單中選擇“刪除”選項刪除規(guī)則,也可使用DROPRULE語句刪除當前數據庫中的一個或多個規(guī)則。其語法格式如下:DROPRULE{rule_name}[,…n]注意:在刪除一個規(guī)則前,必須先將與其綁定的對象解除綁定,否則,在執(zhí)行刪除語句時會出錯。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-10】刪除例8-1和8-2中創(chuàng)建的規(guī)則。DROPRULEsex_rule,hire_date_rule8.2使用默認值實施數據完整性 1.默認值默認值(Default)是用戶輸入記錄時向沒有指定具體數據的列中自動插入的數據。默認值對象與CREATETABLE或ALTERTABLE語句操作表時用默認約束指定的默認值功能相似,兩者的區(qū)別類似于規(guī)則與檢查約束在使用上的區(qū)別。默認值對象可用于多個列或用戶定義數據類型,它不會因數據列或用戶定義數據類型的修改、刪除等操作而受影響。表的一列或一個用戶定義數據類型只能與一個默認值相綁定。默認值對象主要包括創(chuàng)建、查看、綁定、松綁和刪除操作。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.2使用默認值實施數據完整性 8.2.1創(chuàng)建默認值
和規(guī)則一樣,默認值對象的創(chuàng)建只能使用Transact-SQL語句CREATEDEFAULT來創(chuàng)建,其語法格式如下:CREATEDEFAULTdefault_nameASconstant_expression其中,constant_expression是默認值的定義,為一常量表達式,可以使用數學表達式或函數等,但不能包含表的列名或其他數據庫對象。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.2使用默認值實施數據完整性 8.2.1創(chuàng)建默認值
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-11】創(chuàng)建生日默認值birthday_defa。CREATEDEFAULTbirthday_defaAS'1978-1-1'【例8-12】創(chuàng)建當前日期默認值today_defa。CREATEDEFAULTtoday_defaASgetdate()上述語句創(chuàng)建一個today_defa默認值,其常量表達式是一個內置函數,表示自動填入的默認值是當前系統(tǒng)日期。8.2使用默認值實施數據完整性 8.2.2查看默認值
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性使用sp_helptext系統(tǒng)存儲過程可以查看默認值的細節(jié)?!纠?-13】查看默認值today_defa。EXECsp_helptexttoday_defa運行結果如圖8-2所示。8.2使用默認值實施數據完整性 8.2.3默認值的綁定與松綁
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性創(chuàng)建默認值后,默認值僅僅只是一個存在于數據庫中的對象,并未發(fā)生作用。同規(guī)則一樣,需要將默認值與數據庫表的列或用戶定義數據類型進行綁定,這樣才能將創(chuàng)建的默認值應用到數據列或用戶定義的數據類型中。8.2使用默認值實施數據完整性 1.用系統(tǒng)存儲過程sp_bindefault綁定默認值
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性系統(tǒng)存儲過程sp_bindefault可以綁定一個默認值到表的一個列或一個用戶定義數據類型上。其語法格式如下:sp_bindefault[@defname=]'default',[@objname=]'object_name'[,[@futureonly=]'futureonly']8.2使用默認值實施數據完整性 1.用系統(tǒng)存儲過程sp_bindefault綁定默認值
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-14】綁定默認值today_defa到employee表的hire_date列上。EXECsp_bindefaulttoday_defa,'employee.hire_date'運行結果如下:已將默認值綁定到列。8.2使用默認值實施數據完整性 2.用系統(tǒng)存儲過程sp_unbindefault解除默認值的綁定
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性系統(tǒng)存儲過程sp_unbindefault可以解除默認值與表的列或用戶定義數據類型的綁定,其語法格式如下:sp_unbindefault[@objname=]'object_name'[,[@futureonly=]'futureonly']8.2使用默認值實施數據完整性 2.用系統(tǒng)存儲過程sp_unbindefault解除默認值的綁定8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-15】解除默認值today_defa與表employee的hire_date列的綁定。EXECsp_unbindefault'employee.hire_date'運行結果如下:已解除了表列與其默認值之間的綁定。注意:如果列同時綁定了一個規(guī)則和一個默認值,那么默認值應該符合規(guī)則的規(guī)定。不能綁定默認值到一個用CREATETABLE或ALTERTABLE語句創(chuàng)建或修改表時用DEFAULT選項指定了默認值的列上。8.2使用默認值實施數據完整性 8.2.4刪除默認值
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性當不再需要定義默認值時,可以在SQLServer管理平臺中選擇默認值對象,單擊右鍵,從快捷菜單中選擇“刪除”選項刪除默認值,也可以使用DROPDEFAULT語句刪除當前數據庫中的一個或多個默認值。其語法格式如下:DROPDEFAULT{default_name}[,…n]注意:在刪除一個默認值前必須先將與其綁定的對象解除綁定,否則,在執(zhí)行刪除語句時會出錯。【例8-16】刪除生日默認值birthday_defa。DROPDEFAULTbirthday_defa8.3使用約束實施數據完整性 1.約束約束(Constraint)是SQLServer提供的自動保持數據庫中數據完整性的一種機制,它定義了可輸入表或表的單個列中的數據的限制條件。使用約束優(yōu)先于使用觸發(fā)器、規(guī)則和默認值。約束獨立于表結構,作為數據庫定義部分在CREATETABLE語句中聲明,可以在不改變表結構的基礎上,通過ALTERTABLE語句添加或刪除。當表被刪除時,表所帶的所有約束定義也隨之被刪除。在SQLServer中有6種約束:主鍵約束、外鍵約束、唯一性約束、檢查約束、默認約束和非空值約束。其中非空值約束已在第5章中做了詳細介紹,本節(jié)只介紹其他5種約束。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.3使用約束實施數據完整性 8.3.1主鍵約束
和規(guī)則一樣,默認值對象的創(chuàng)建只能使用Transact-SQL語句CREATEDEFAULT來創(chuàng)建,其語法格式如下:CREATEDEFAULTdefault_nameASconstant_expression其中,constant_expression是默認值的定義,為一常量表達式,可以使用數學表達式或函數等,但不能包含表的列名或其他數據庫對象。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.3使用約束實施數據完整性 8.3.1主鍵約束
表的一列或幾列組合的值在表中唯一地指定一行記錄,這樣的一列或多列稱為表的主鍵(PrimaryKey,PK),通過它可強制表的實體完整性。主鍵不允許為空值,且不同兩行的鍵值不能相同。表中可以有不止一個鍵唯一標識行,每個鍵都稱為候選鍵,只可以選其中一個候選鍵作為表的主鍵,其他候選鍵稱作備用鍵。表本身并不要求一定要有主鍵,但應該養(yǎng)成給表定義主鍵的良好習慣。在規(guī)范化的表中,每行中的所有數據值都完全依賴于主鍵。當創(chuàng)建或更改表時可通過定義主鍵約束來創(chuàng)建主鍵。如果一個表的主鍵由單列組成,則該主鍵約束可定義為該列的列約束。如果主鍵由兩個以上的列組成,則該主鍵約束必須定義為表約束。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.3使用約束實施數據完整性 8.3.1主鍵約束
定義列級主鍵約束的語法格式如下:[CONSTRAINTconstraint_name]PRIMARYKEY[CLUSTERED|NONCLUSTERED]定義表級主鍵約束的語法格式如下:[CONSTRAINTconstraint_name]PRIMARYKEY[CLUSTERED|NONCLUSTERED]{(column_name[,…n])}8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.3使用約束實施數據完整性 8.3.1主鍵約束
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-17】在Sales數據庫中創(chuàng)建customer表,并聲明主鍵約束。CREATETABLESales.dbo.customer(customer_idbigintNOTNULLIDENTITY(0,1)PRIMARYKEY,customer_namevarchar(50)NOTNULL,linkman_namechar(8),addressvarchar(50),telephonechar(12)NOTNULL)8.3使用約束實施數據完整性 8.3.1主鍵約束
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-18】創(chuàng)建一個產品信息表goods1,將產品編號goods_id列聲明為主鍵。CREATETABLEgoods1(goods_idchar(6)NOTNULL,goods_namevarchar(50)NOTNULL,classification_idchar(6)NOTNULL,unit_pricemoneyNOTNULL,stock_quantityfloatNOTNULL,order_quantityfloatNULLCONSTRAINTpk_p_idPRIMARYKEY(goods_id))ON[PRIMARY]8.3使用約束實施數據完整性 8.3.1主鍵約束
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-19】根據商品銷售的時間和商品類別來確定銷售的商品的數量。CREATETABLEg_order(good_typeint,order_timedatetime,order_numint,CONSTRAINTg_o_keyPRIMARYKEY(good_type,order_time))本例由兩列組合成主鍵g_o_key,使用表約束來定義。8.3使用約束實施數據完整性 8.3.2外鍵約束
外鍵約束定義了表與表之間的關系。通過將一個表中一列或多列添加到另一個表中,創(chuàng)建兩個表之間的連接,這個列就成為第二個表的外鍵(ForeignKey,FK),即外鍵是用于建立和加強兩個表數據之間的連接的一列或多列,通過它可以強制參照完整性。當一個表中的一列或多列的組合和其他表中的主鍵定義相同時,就可以將這些列或列的組合定義為外鍵,并設定與它關聯(lián)的表或列。這樣,當向具有外鍵的表插入數據時,如果與之相關聯(lián)的表的列中沒有與插入的外鍵列值相同的值時,系統(tǒng)會拒絕插入數據。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.3使用約束實施數據完整性 8.3.2外鍵約束
定義表級外鍵約束的語法格式如下:[CONSTRAINTconstraint_name]FOREIGNKEY(column_name[,…n])REFERENCESref_table[(ref_column[,…n])][ONDELETE{CASCADE|NOACTION}][ONUPDATE{CASCADE|NOACTION}]][NOTFORREPLICATION]定義列級外鍵約束的語法格式如下:[CONSTRAINTconstraint_name][FOREIGNKEY]REFERENCESref_table[NOTFORREPLICATION]8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.3使用約束實施數據完整性 8.3.2外鍵約束
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-20】創(chuàng)建一個訂貨表sell_order1,與例8-18創(chuàng)建的產品表goods1相關聯(lián)。CREATETABLEsell_order1(order_id1char(6)NOTNULL,goods_idchar(6)NOTNULL,employee_idchar(4)NOTNULL,customer_idchar(4)NOTNULL,transporter_idchar(4)NOTNULL,order_numfloatNULL,discountfloatNULL,order_datedatetimeNOTNULL,send_datedatetimeNULL,arrival_datedatetimeNULL,costmoneyNULL,CONSTRAINTpk_order_idPRIMARYKEY(order_id1),FOREIGNKEY(goods_id)REFERENCESgoods1(goods_id))8.3使用約束實施數據完整性 8.3.3唯一性約束
唯一性(unique)約束指定一個或多個列的組合的值具有唯一性,以防止在列中輸入重復的值,為表中的一列或者多列提供實體完整性。唯一性約束指定的列可以有NULL屬性。主鍵也強制執(zhí)行唯一性,但主鍵不允許空值,故主鍵約束強度大于唯一約束。因此主鍵列不能再設定唯一性約束。定義列級唯一性約束的語法格式如下:[CONSTRAINTconstraint_name]UNIQUE[CLUSTERED|NONCLUSTERED]8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.3使用約束實施數據完整性 8.3.3唯一性約束
唯一性約束應用于多列時的定義格式如下:[CONSTRAINTconstraint_name]UNIQUE[CLUSTERED|NONCLUSTERED](column_name[,…n])參數的含義與主鍵約束的參數含義相同。唯一性約束與主鍵約束的區(qū)別如下:(1)唯一性約束用于非主鍵的一列或列組合。(2)一個表可定義多個唯一性約束,只能定義一個主鍵約束。(3)唯一性約束可用于定義允許空值的列,而主鍵約束不能用于定義允許空值的列。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.3使用約束實施數據完整性 8.3.3唯一性約束
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-22】創(chuàng)建goods2表,使goods_name具有唯一性約束。CREATETABLEgoods2(goods_idchar(6)NOTNULLPRIMARYKEY,goods_namevarchar(50)NOTNULLCONSTRAINTu_goods_nameUNIQUENONCLUSTERED,classification_idchar(6)NOTNULL,unit_pricemoneyNOTNULL,stock_quantityfloatNOTNULL,order_quantityfloat)8.3使用約束實施數據完整性 8.3.3唯一性約束
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-23】定義一個員工信息表employees,其中員工的身份證號emp_cardid列具有唯一性。CREATETABLEemployees(emp_idchar(8),emp_namechar(10),emp_cardidchar(18),CONSTRAINTpk_emp_idPRIMARYKEY(emp_id),CONSTRAINTuk_emp_cardidUNIQUE(emp_cardid))本例創(chuàng)建了表employees,同時顯式地定義了表級主鍵約束pk_emp_id和唯一性約束uk_emp_cardid。8.3使用約束實施數據完整性 8.3.4檢查約束
檢查(Check)約束對輸入列或整個表中的值設置檢查條件,以限制輸入值,保證數據庫的數據完整性。當對具有檢查約束列進行插入或修改時,SQLServer將用該檢查約束的邏輯表達式對新值進行檢查,只有滿足條件(邏輯表達式返回TRUE)的值才能填入該列,否則報錯。可為每列指定多個CHECK約束。例如,在employee表中,可以為sex(性別)列定義檢查約束,其邏輯表達式為:sex='男'ORsex='女'或sexIN('男','女')從而限制該列只能輸入“男”、“女”兩值之一。檢查約束的邏輯表達式可以使用當前表的多列。例如,可以檢查約束的邏輯表達式為:DATEDIFF(year,Birth_Date,Hire_Date)>18該約束要求員工的雇用日期和出生日期這兩個日期數據在年份上的差距大于18(即確保不雇用18歲以下員工)。此時,該檢查約束必須定義為表級。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.3使用約束實施數據完整性 8.3.4檢查約束
定義檢查約束的語法格式如下:[CONSTRAINTconstraint_name]CHECK[NOTFORREPLICATION](logical_expression)各選項的含義如下:(1)NOTFORREPLICATION:指定檢查約束在把從其他表中復制的數據插入到表中時不發(fā)生作用。(2)logical_expression:指定檢查約束的邏輯表達式。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.3使用約束實施數據完整性 8.3.4檢查約束
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-24】更改表employee2以添加未驗證檢查約束。ALTERTABLEemployee2WITHNOCHECKADDCONSTRAINTCK_AgeCHECK(DATEDIFF(year,Birth_Date,Hire_Date)>18)本例向employee2表添加表級檢查約束以限制員工的聘用年齡必須大于18歲。利用WITHNOCHECK來防止對現有行驗證約束,從而允許在存在違反約束的值的情況下添加該約束。8.3使用約束實施數據完整性 8.3.4檢查約束
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-25】創(chuàng)建一個訂貨表orders,保證各訂單的訂貨量必須不小于10。CREATETABLEorders(order_idchar(8),p_idchar(8),p_namechar(10),quantitysmallintCONSTRAINTchk_quantityCHECK(quantity>=10),CONSTRAINTpk_orders_idPRIMARYKEY(order_id))本例為列quantity定義了列級檢查約束,使其值必須大于等于10。8.3使用約束實施數據完整性 8.3.4檢查約束
8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性【例8-26】創(chuàng)建transporters表并定義檢查約束。CREATETABLEtransporters(transporter_idchar(4)NOTNULL,transport_namevarchar(50),linkman_namechar(8),addressvarchar(50),telephonechar(12)NOTNULLCHECK(telephoneLIKE'0[1-9][0-9][0-9]-[1-9][0-9][0-9][0-9][0-9][0-9][0-9]'ORtelephoneLIKE'0[1-9][0-9]-[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'))注意:對計算列不能作為檢查約束外的任何約束。8.3使用約束實施數據完整性 8.3.5默認約束
默認(Default)約束通過定義列的默認值或使用數據庫的默認值對象綁定表的列,以確保在沒有為某列指定數據時,來指定列的值。默認值可以是常量,也可以是表達式,還可以為NULL值。當給表列定義了Default約束后,在表中插入一條記錄時,SQLServer會將該列的對應位置填入默認值。SQLServer推薦使用默認約束,而不使用默認值對象的方式來指定列的默認值。8.1使用規(guī)則實施數據完整性8.2使用默認值實施數據完整性8.3使用約束實施數據完整性8.3使用約束實
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 溫州職業(yè)技術學院《創(chuàng)新創(chuàng)業(yè)能力訓練》2023-2024學年第一學期期末試卷
- 二零二五版?zhèn)€人車位出租及車位租賃平臺合作合同3篇
- 二零二五年度貨物買賣合同涉及特定技術轉讓與售后服務2篇
- 2024版商場環(huán)保節(jié)能改造合同協(xié)議
- 二零二五版粉煤灰運輸合同規(guī)范范本下載6篇
- 個性化房產代理合作協(xié)議樣本(2024)版B版
- 2024版房地產經紀人與傭金合同3篇
- 二零二五年度適用于工程項目的自卸車租賃服務合同范本3篇
- 二零二五版基金代持及風險控制合作協(xié)議2篇
- 二零二五年餐飲店食品安全培訓與認證協(xié)議2篇
- 春節(jié)值班安全教育培訓
- 舌咽神經痛演示課件
- 子宮內膜癌業(yè)務查房課件
- 社會學概論課件
- 華為經營管理-華為的研發(fā)管理(6版)
- C及C++程序設計課件
- 公路路基路面現場測試隨機選點記錄
- 國家自然科學基金(NSFC)申請書樣本
- 湖南省省級溫室氣體排放清單土地利用變化和林業(yè)部分
- 材料設備驗收管理流程圖
- 培訓機構消防安全承諾書范文(通用5篇)
評論
0/150
提交評論