數據庫2016課件-第8章數據性_第1頁
數據庫2016課件-第8章數據性_第2頁
數據庫2016課件-第8章數據性_第3頁
數據庫2016課件-第8章數據性_第4頁
數據庫2016課件-第8章數據性_第5頁
免費預覽已結束,剩余43頁可下載查看

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

《數據庫技術與應用-SQLServer2008.

第8章數據完整8.1使用規(guī)則實施數據完整

數據完整實體完整性(Entity參照完整性(Referential用戶自定義的完整性(User-defined在SQLServer2008中提供了完善的數據完整使用規(guī)則實施數據完整

規(guī)規(guī)則(Rul)是數據庫中對存儲在表的列或用戶定義數據類型中的值的規(guī)定和限制。規(guī)則是單獨戶定義數據類型是相互獨立的,即表或用戶定義對使用規(guī)則實施數據完整

創(chuàng)建規(guī)創(chuàng)建規(guī)則只能通過Transact-SQL的CREATERULE語句,而不能使用SQLServer管理平臺工具創(chuàng)建。CREATERULE語法CREATERULE規(guī)則名><條件其中<條件>可以是能用于WHERE條件子,它可以包含算術運算符、關系運算符邏輯運算符和謂(如IN、LIKE、BETWEEN等)。注意:<條件>中的變量必須以字符“@”開頭。使用規(guī)則實施數據完整

創(chuàng)建規(guī)【例8-1】hire_date_ruleCREATERULE@hire_date>='1980-01-01'and【例8-2】創(chuàng)建性別規(guī)則sex_ruleCREATERULE@sexin('男','女8.1使用規(guī)則實施數據完整

創(chuàng)建規(guī)CREATERULE@valuebetween1and【例8-4】創(chuàng)建字符規(guī)則my_character_ruleCREATErule@valuelike'[a-f]%[0-8.1使用規(guī)則實施數據完整

查看規(guī)可在SQLServer管理平臺中,點擊指定數據庫下面的“可編程性”,選中“規(guī)則”后找到要查看的規(guī)則名稱,單擊鼠標右鍵,在彈出的菜單中選擇“編寫規(guī)則腳本為”→“CREATE到”→“新查詢編輯器窗口”來查看規(guī)則。也可使用系統存儲過程sp_helptext語句可則的定義信息sp_helptextsp_helptext其中[@objname=]'name'子句指明對象的名稱,用Sp_helptext存儲過程查看的對象可以是當前數據庫中的規(guī)則、默認值、觸發(fā)器、視圖或未加密的存儲過程。8.1使用規(guī)則實施數據完整

查看規(guī)【例8-5】創(chuàng)建查看規(guī)則hire_date_rule的文本EXECUTEsp_helptext8.1使用規(guī)則實施數據完整

規(guī)則的綁定與松創(chuàng)建規(guī)則后,規(guī)則只是一個存在于數據庫中的對象,并未發(fā)生作用。需要將規(guī)則與數據庫表或用戶定義對象聯綁定。綁定就是指定規(guī)則作用于哪個表的哪一列或哪個用戶定義數據類型。當向綁定了規(guī)則的列或綁定了規(guī)則的用戶定義數據類型的所有列中插入或更新數據時,新的數據必須符合規(guī)則。表的一列或一個用戶定義數據類型只能與一個規(guī)則相綁定,而一個規(guī)則可以綁定多個對象。解除規(guī)則與對象的綁定稱為松綁8.1使用規(guī)則實施數據完整

用存儲過程sp_bindrule系統存儲過程sp_bindrule可以綁定一個規(guī)則sp_bindrule[@rulename規(guī)則名>',[@objname=]‘<對象名>'[,[@futureonly=]'futureonly'<對象名>如果是列名,指定方法為:表名.列

8.1使用規(guī)則實施數據完整規(guī)則的綁定與松EXECsp_bindrule【例8-8】創(chuàng)建綁定例8-2創(chuàng)建的規(guī)則sex_rule到employee表的字段sex。EXECsp_bindrule使用規(guī)則實施數據完整

程p_unbindule語句可解除規(guī)則與列或用戶定義數據類型的綁定。其語法格式如下sp_unbindrule[@objname=]‘<對象名>'[,[@futureonly=]'futureonly']參數的含義與sp_bindrule相同。其中,'futureonly'項指定現有的由此用戶定義數據類型定義的列仍然保持與此規(guī)則的綁定。如果不指定此項,所有由此用戶定義數據類型定義的列也將隨之解除與此規(guī)則的綁定。

8.1使用規(guī)則實施數據完整8.1.3松EXECsp_unbindrule'employee.hire_date'EXECsp_unbindrulepat_char,'futureonly'使用規(guī)則實施數據完整

8.1.4刪除規(guī)當不再需要規(guī)則時,可以在SQLServer管理平臺中選刪除規(guī)則,也可使用DROPRULE語句刪除當前數據庫中的一其語法格式如下DROPRULE規(guī)則注意:在刪除一個規(guī)則前,必須先將與其綁定的對解除綁定,否則,在執(zhí)行刪除語句時會出錯DROPRULE

1.默認默認值(Default)是用戶輸入記錄時向沒有指定具CREATETABLE或ALTERTABLE語句操作表時用默認約束指定的默認值功能相似,兩者的區(qū)別類似于規(guī)則與檢查約束在使用上的區(qū)別。默認值對象可用于多個列或用戶定義數據類型,不會因數據列或用戶定義數據類型的修改、刪除等操作而受影響。表的一列或一個用戶定義數據類型只能與一個默認值相綁定。默認值對象主要包括創(chuàng)建、查看、綁定、松綁和除操作

8.2.1創(chuàng)建默認Transact-SQL語句CREATEDEFAULT來創(chuàng)建,其語CREATEDEFAULT默認名><常量

創(chuàng)建默認【例8-11創(chuàng)建生日默認值birthday_defa【例8-12創(chuàng)建當前日期默認值today_defa

查看默認使用sp_heltext的細節(jié)。【例8-13】查看默認值today_defaEXECsp_helptext8.2

樣,需要將默認值與數據庫表的列或用戶定義數據類型進行綁定,這樣才能將創(chuàng)建的默認值應用到數據列或用戶定義的數據類型中。8.2

1.用系統存儲過程sp_bindefault綁系統存儲過程sp_bindefault以綁定一個默sp_bindefault[@defname[@objname=]‘<對象名>'[,[@futureonly=]'futureonly'<對象名>如果是列名,指定方法為:表名.列8.2

【例8-14】綁定默認值today_defa到employeeEXECsp_bindefaulttoday_defa,8.2

系統存儲過程sp_unbindefault以解除默其語法格式如下sp_unbindefault[@objname[,[@futureonly=]'futureonly']8.2

2.用系統存儲過程sp_unbindefault【例8-15】解除默認值today_defa與表employeehire_date列的綁定EXECsp_unbindefault8.2

刪除默認當不再需要定義默認值時,可以在SQLServer管理平臺中選擇默認值對象,單擊右鍵,從快捷菜單中選擇“刪除”選項刪除默認值,也可以使用DROPDEFAULT語句刪除當前數據庫中的一個或多個默認值。其語法格式如下DROPDEFAULT默認注意:在刪除一解除綁定,否則,在執(zhí)行刪除語句時會出錯【例8-16】刪除生日默認值birthday_defa

8.3使用約束實施數據完整1.約約束(Constraint)是SQLServer提供的自動保持數單個列中的數據的限制條件。使用約束優(yōu)先于使用觸發(fā)、規(guī)則和默認值ALTERTABLE語句添加或刪除。當表被刪除時,表所帶的在SQLServer中有6種約束:主鍵約束、外鍵約束唯一性約束、檢查約束、默認約束和非空值約束。格式分為列級約束和表級約束。8.3使用約束實施數據完整

主鍵約表的一列或幾列,這樣的一列或多列稱為表的候選鍵,一個表中可以多個候選鍵,從候選鍵中選取一個作為主鍵PrimaryKey,PK),其他候選鍵稱作備選鍵,通過主鍵可對表實施實體完整性約束。主鍵不允許為空值,且不同兩行的鍵值不能相同,唯一標識行。表本身并不要求主鍵的良好習慣級約束定義。如果主鍵由兩個以上的列組成,則該主鍵約束必須用表級約束定義。8.3使用約束實施數據完整

主鍵約定義主鍵約束的語法格式如下[CONSTRAINT約束名PRIMARYKEY{(<列名ASC|DESCn*有綠色部分表示表級約束格式,缺省綠色部分表示列級約束格式。主鍵約束默認為CLUSTERED8.3使用約束實施數據完整

主鍵約【例8-17】在Sales數據庫中創(chuàng)建customer表,(customer_idbigintNOTNULLIDENTITY(0,1)PRIMARYKEY,customer_namevarchar(50)NOTNULL,linkman_namechar(8),addressvarchar(50),telephonechar(12)NOTNULL)8.3使用約束實施數據完整

主鍵約【例8-18】創(chuàng)建一個產品信息表goods1,將產(goods_idchar(6)NOTNULL,goods_namevarchar(50)NOTNULL,classification_idchar(6)NOTNULL,unit_pricemoneyNOTNULL,stock_quantityfloatNOTNULL,order_quantityfloatNULLCONSTRAINTpk_p_idPRIMARYKEY)ON8.3使用約束實施數據完整

主鍵約【例8-19】根據商品銷售的時間和商品類別來(good_typeint,order_timedatetime,order_numint,CONSTRAINTg_o_keyPRIMARY)本例由兩列組合成主鍵g_o_key,使用表約束來定義8.3使用約束實施數據完整

外鍵約ForeignKey,FK),通過它可以實施參照完整性。當一個表中的一列或多列的組合和其他表為外鍵,并設定與它關聯的表或列。這樣,當向具插入數據。8.3使用約束實施數據完整

外鍵約定義外鍵約束的語法格式如下[CONSTRAINT約束FOREIGNKEY(<列名>[,…n])REFERENCES主表名n[ONDELETE{CASCADE|NOACTION}][ONUPDATE{CASCADE|NOACTION}][NOTFORREPLICATION*有綠色部分表示表級約束格式,缺省綠色部分表示列級約束格式。8.3使用約束實施數據完整

外鍵約【例8-20】創(chuàng)建一個訂貨表sell_order1,與例8-18創(chuàng)建的產品表相關聯(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使用約束實施數據完整

唯一性約唯一性約束定義格式如下:(有綠色部分表示表級約束格式,缺省綠色部分表示列級約束格式。)[CONSTRIT<約束名>]UNIQUE[CLUSTERED|NONCLUSTERED](<列名ASC|DESCn唯一性約束與主鍵約束的區(qū)別如下唯一性約束用于非主鍵的一列或列組合約束。不能用于定義允許空值的列。唯一性約束默認為NONCLUSTERED非聚合的

8.3使用約束實施數據完整唯一性約【例8-22】創(chuàng)建goods2表,使(goods_idchar(6)NOTNULLPRIMARYKEY,goods_namevarchar(50)NOTNULLCONSTRAINTu_goods_nameUNIQUEclassification_idchar(6)NOTNULL,unit_pricemoneyNOTNULL,stock_quantityfloatNOTNULL,order_quantityfloat)

8.3使用約束實施數據完整唯一性約【例8-23】定義一個員工信息表employees,其CREATETABLEemployees(emp_idchar(8),emp_namechar(10),emp_cardidchar(18),CONSTRAINTpk_emp_idPRIMARYKEYCONSTRAINTuk_emp_cardidUNIQUE)束pk_emp_id和唯一性約束uk_emp_cardid8.3使用約束實施數據完整檢查約

時,SQLServer將用該檢查約束的邏輯表達式對8.3使用約束實施數據完整

檢查約定義檢查約束的語法格式如下[CONSTRAINT<約束名>]CHECK[NOTFORREPLICATION](各選項的含義如NOTFORREPLICATION:指定檢查約束在把從在<條件>中一般必須有一個或多個列名8.3使用約束實施數據完整

檢查約【例8-24】更改表employee2以添加未驗證檢WITHADDCONSTRAINTCHECK(DATEDIFF(year,Birth_Date,empee2年齡必須大于18WTHNOCHEC加該約束。8.3使用約束實施數據完整

檢查約【例8-25】創(chuàng)建一個訂貨表orders,保證各訂(order_idchar(8),p_idchar(8),p_namechar(10),quantitysmallintCONSTRAINTchk_quantityCHECK(quantity>=10),CONSTRAINTpk_orders_idPRIMARYKEY(order_id))等于108.3使用約束實施數據完整

檢查約【例8-26】創(chuàng)建transporters(transporter_idchar(4)NOTNULL,transport_namevarchar(50),linkman_namechar(8),addressvarchar(50),telephonechar(12)NOTNUL

溫馨提示

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

評論

0/150

提交評論