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

下載本文檔

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

文檔簡(jiǎn)介

第9章數(shù)據(jù)庫(kù)完整性約束PRIMARYKEY

約束例如,下面的

SQL

語(yǔ)句創(chuàng)建一個(gè)名為

student的表,其中指定

student_number為主鍵:USEtestGOCREATETABLEstudent(sutdent_numberstudent_name

int PRIMARYKEY,char(30))GOFOREIGNKEY

約束例如,下面確實(shí)是一個(gè)利用

FOREIGNKEY

約束的例子:CREATETABLEproduct(product_number int,student_number intFOREIGNKEYREFERENCESstudent(student_number)ONDELETENOACTION)GOUNIQUE約束例如,下面的 SQL語(yǔ)句創(chuàng)建了一個(gè) test2表,其中指定了 c1字段不能包括重復(fù)的值:USEtestGOCREATETABLEtest2(c1 intUNIQUE,c2 int)GOINSERTtest2VALUES(1,100)GO若是再插入一行:INSERTtest2VALUES(1,200)CHECK約束例如,下面的SQL語(yǔ)句創(chuàng)建一個(gè)成績(jī)(score)表,其中利用CHECK約束來(lái)限定成績(jī)只能在0~100分之間:CREATETABLEscore(sutdent_numberint,scoreintNOTNULLCHECK(score>=0ANDscore<=100))默許值在創(chuàng)建表時(shí)指定默許值例如,下面在 test數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè) datetest表,其中 c2指定默許值未當(dāng)前日期:USEtestGOCREATETABLEdatetest(c1int,c2datetime DEFAULT(getdate()))然后插入一行數(shù)據(jù):INSERTdatetest(c1)VALUES(1)SELECT*FROMdatetest一樣,能夠給 bookdb數(shù)據(jù)庫(kù)中的 orderform表中的order_date字段加上默許值:USEbookdbGOALTERTABLEorderformADDCONSTRAINTDateDfltDEFAULTgetdate()FORorder_date利用默許對(duì)象創(chuàng)建默許對(duì)象2.利用CREATEDEFAULT 語(yǔ)句例如,利用下面的 SQL語(yǔ)句也能夠創(chuàng)建USEbookdbGOCREATEDEFAULTaddress_defaultAS'GO

address_default默許對(duì)象:無(wú)'綁定默許對(duì)象2.利用sp_bindefault存儲(chǔ)進(jìn)程例如,上面將address_default默許對(duì)象綁定到authors表的address列上的操作進(jìn)程能夠利用下面的SQL語(yǔ)句來(lái)完成:USEbookdbEXECsp_bindefault'address_default',''解除默許對(duì)象的綁定例如,下面的 SQL語(yǔ)句解除 authors表address列上的默許值綁定:USEbookdbEXECsp_unbindefault''刪除默許對(duì)象例如,下面的

SQL語(yǔ)句判定是不是存在

address_default默許對(duì)象,若是存在那么刪除該默許對(duì)象:USEbookdbIFEXISTS(SELECTnameFROMsysobjectsWHEREname='address_default'ANDtype='D')DROPDEFAULTaddress_defaultGO規(guī) 那么創(chuàng)建規(guī)那么例如,下面的SQL語(yǔ)句創(chuàng)建一個(gè)名為score_rule的規(guī)那么,限定輸入的值必需在0到之間:USEtestGOCREATERULEscore_ruleAS@scoreBETWEEN0and100而下面創(chuàng)建的規(guī)那么將輸入到該規(guī)那么所綁定的列中的實(shí)際值限制為只能是該規(guī)那么中列出的值:USEtestGOCREATERULElist_ruleAS@listIN('1997','1997','1996')也能夠利用LIKE來(lái)創(chuàng)建一個(gè)模式規(guī)那么,即遵循某種格式的規(guī)那么。例如,要使得該規(guī)那么指定任意兩個(gè)字符的后面跟一個(gè)連字符和任意多個(gè)字符(或沒有字符),并以1到6之間的整數(shù)結(jié)尾,那么能夠利用下面的SQL語(yǔ)句:USEtestGOCREATERULEpattern_ruleAS@valueLIKE'__-%[1-6]'綁定規(guī)那么例如,下面的 SQL語(yǔ)句能夠?qū)?score_rule規(guī)那么綁定到 score表的score列上:USEtestEXECsp_bindrule'score_rule',''刪除規(guī)那么例如,要解除綁定到 score表的score列上的規(guī)那么,能夠利用下面 SQL語(yǔ)句:USEtestEXECsp_unbindrule''例如,要?jiǎng)h除規(guī)那么 score_rule,能夠利用下面的 SQL語(yǔ)句:DROPRULEscore_rule存儲(chǔ)進(jìn)程創(chuàng)建存儲(chǔ)進(jìn)程利用CREATEPROCEDURE 語(yǔ)句創(chuàng)建例如,下面創(chuàng)建一個(gè)簡(jiǎn)單的存儲(chǔ)進(jìn)程 bookinfopro,用于檢索書籍的名稱、價(jià)錢和出版社:USEbookdb--判定bookinfopro存儲(chǔ)進(jìn)程是不是存在,假設(shè)存在,那么刪除IFEXISTS(SELECTnameFROMsysobjectsWHEREname='bookinfopro'ANDtype='P')DROPPROCEDUREbookinfoproGOUSEbookdbGO創(chuàng)建存儲(chǔ)進(jìn)程bookinfoproCREATEPROCEDUREbookinfoproASSELECTbook_name,price,publisherFROMbookGO通過下述 SQL語(yǔ)句執(zhí)行該存儲(chǔ)進(jìn)程:EXECUTEbookinfopro執(zhí)行存儲(chǔ)進(jìn)程例如,下面確實(shí)是執(zhí)行簡(jiǎn)單存儲(chǔ)進(jìn)程的例子:EXECUTEbookinfopro存儲(chǔ)進(jìn)程的參數(shù)利用參數(shù)例如,下面的

SQL

語(yǔ)句創(chuàng)建了一個(gè)用于向

orderform

表中插入記錄的存儲(chǔ)進(jìn)程Add_Order:USEbookdbGOCREATEPROCAdd_Order(@order_idint,@book_idint,@book_numberint,@order_datedatetime,@client_idint)ASINSERTINTOorderformVALUES(@order_id,@book_id,@book_number,@order_date,@client_id)那么能夠利用下面的 SQL語(yǔ)句挪用該存儲(chǔ)進(jìn)程:EXECAdd_Order7,2,10,'99-05-06',2另外一種傳遞參數(shù)的方式是采納“@order_id=7”的形式,現(xiàn)在,各個(gè)參數(shù)的順序能夠任意排列。例如,上面的例子能夠如此執(zhí)行:EXECAdd_Order@order_id=7,@book_id=2,@book_number=10,@order_date='99-05-06',@client_id=2利用默許參數(shù)例如,下面的存儲(chǔ)進(jìn)程就指定了默許值:USEbookdbGOCREATEPROCAdd_Author(@author_idint,@author_namechar(8),@addresschar(50)='無(wú)',@telphonechar(15)='無(wú)'

--默許值為--默許值為

'無(wú)''無(wú)')ASINSERTINTOauthorsVALUES(@author_id,@author_name,@address,@telphone)在上面創(chuàng)建的存儲(chǔ)進(jìn)程中, 包括4各參數(shù),其中@address和@telphone具有默許值“無(wú)”。若是挪用該存儲(chǔ)進(jìn)程:EXECAdd_Author4,'張三'GOSELECT*FROMauthorsGO利用返回參數(shù)例如,下面的存儲(chǔ)進(jìn)程Query_book返回兩個(gè)參數(shù)@book_name和@price,別離代表了書名和價(jià)錢:CREATEPROCQuery_book(@book_idint,@book_namechar(50)OUTPUT,@pricefloatOUTPUT)ASSELECT@price=price,@book_name=book_nameFROMbookWHEREbook_id=@book_id執(zhí)行該存儲(chǔ)進(jìn)程,來(lái)查詢 book_id為2的書籍的名稱和價(jià)錢:DECLARE@pricefloatDECLARE@book_namechar(50)EXECQuery_book2,@book_nameOUTPUT,@priceOUTPUTSELECT'書名'=@book_name,'價(jià)錢'=@priceGO存儲(chǔ)進(jìn)程的返回值例如,下面的存儲(chǔ)進(jìn)程依照輸入的參數(shù)來(lái)判定返回值:USEtestGOCREATEPROCtest_ret(@input_intint=0)ASIF@input_int=0RETURN0 --若是輸入的參數(shù)等于 0,那么返回 0IF@input_int>0RETURN1000 --若是輸入的參數(shù)大于 0,那么返回IF@input_int<0RETURN-1000 --若是輸入的參數(shù)等于 0,那么返回

1000-1000執(zhí)行該存儲(chǔ)進(jìn)程:DECLARE@Ret_intintEXEC@Ret_int=test_ret-50SELECT'返回值'=@Ret_int存儲(chǔ)進(jìn)程的查看、修改和刪除能夠利用sp_helptext存儲(chǔ)進(jìn)程來(lái)查看存儲(chǔ)進(jìn)程的概念信息,進(jìn)程的概念信息,能夠執(zhí)行下面的SQL語(yǔ)句:

例如,要查看

test_ret存儲(chǔ)EXECsp_helptexttest_ret例如,要?jiǎng)h除 test_ret存儲(chǔ)進(jìn)程,可執(zhí)行下面的

SQL

語(yǔ)句:DROPPROCEDUREtest_ret觸發(fā)器創(chuàng)建觸發(fā)器利用Transact-SQL語(yǔ)句創(chuàng)建例如,下面是創(chuàng)建一個(gè)觸發(fā)器,在插入記錄時(shí),自動(dòng)顯示表中的內(nèi)容:USEtestGO/*若是表T1存在,那么刪除 */IFEXISTS(SELECTnameFROMsysobjectsWHEREname='T1')DROPTABLET1GO/*創(chuàng)建表T1*/CREATETABLET1(student_numberint,student_namechar(30))GO/*若是觸發(fā)器 Query_T1存在,那么刪除 */IFEXISTS(SELECTnameFROMsysobjectsWHEREname='Query_T1'ANDtype='TR')DROPTRIGGERQuery_T1GO/*創(chuàng)建觸發(fā)器 Query_T1*/CREATETRIGGERQuery_T1ONT1FORINSERT,UPDATE,DELETEASSELECT*FROMT1GO那么在執(zhí)行下面的語(yǔ)句時(shí):INSERTT1VALUES(985240,'llyyrr')inserted表和deleted表例如,下面的例子說明了 inserted表和deleted表的作用:/*若是觸發(fā)器 Query_T1存在,那么刪除 */IFEXISTS(SELECTnameFROMsysobjectsWHEREname='Query_T1'ANDtype='TR')DROPTRIGGERQuery_T1GO/*創(chuàng)建觸發(fā)器 Query_T1*/CREATETRIGGERQuery_T1ONT1FORINSERT,UPDATE,DELETEASSELECT*FROMinsertedSELECT*FROMdeletedGO若是現(xiàn)在執(zhí)行下面的 UPDATE語(yǔ)句:UPDATET1SETstudent_name='lyr'WHEREstudent_number=985240利用觸發(fā)器INSERT

UPDATE

觸發(fā)器例如,下面創(chuàng)建的

check_score觸發(fā)器可用來(lái)檢查插入的成績(jī)是不是在

0到

100之間:USEtestGO/*檢查是不是存在 score表,假設(shè)存在,那么刪除

*/IFEXISTS(SELECTnameFROMsysobjectsWHEREname='score')DROPTABLEscoreGO/*創(chuàng)建score表*/CREATETABLEscore(student_noint,scoreint)/*檢查是不是存在check_score觸發(fā)器,假設(shè)存在,那么刪除*/IFEXISTS(SELECTnameFROMsysobjectsWHEREname='check_score'ANDtype='TR')DROPTRIGGERcheck_scoreGO/*在score表上創(chuàng)建 check_score觸發(fā)器*/CREATETRIGGERcheck_scoreONscoreFORINS

溫馨提示

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

評(píng)論

0/150

提交評(píng)論