數(shù)據(jù)庫完整性控制_第1頁
數(shù)據(jù)庫完整性控制_第2頁
數(shù)據(jù)庫完整性控制_第3頁
數(shù)據(jù)庫完整性控制_第4頁
數(shù)據(jù)庫完整性控制_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第十二章數(shù)據(jù)庫完整性控制計算機基礎(chǔ)教學(xué)部本章內(nèi)容12.1約束12.2默認值12.3規(guī)則12.4事務(wù)處理12.5數(shù)據(jù)的鎖定數(shù)據(jù)完整性數(shù)據(jù)完整性問題的提出數(shù)據(jù)庫中的數(shù)據(jù)是從外界輸入的,由于種種原因,會發(fā)生輸入數(shù)據(jù)無效或錯誤。為了保證輸入的數(shù)據(jù)正確、符合規(guī)定,提出數(shù)據(jù)完整性問題。數(shù)據(jù)完整性問題的解決SQLServer2000中可以通過各種約束、默認值、規(guī)則等數(shù)據(jù)庫對象來保證數(shù)據(jù)的完整性。數(shù)據(jù)完整性包括實體完整性、域完整性、參照完整性和用戶自定義完整性。12.1約束約束(Constraint)是SQLServer提供的自動保持數(shù)據(jù)庫完整性的一種機制,它定義了可輸入表或表的單個列中的數(shù)據(jù)的限制條件。使用約束優(yōu)先于使用觸發(fā)器、規(guī)則和默認值。約束獨立于表結(jié)構(gòu),可以在不改變表結(jié)構(gòu)的基礎(chǔ)上,添加或刪除約束。當表被刪除時,表所帶的所有約束定義也隨之被刪除。12.1約束(1)主鍵約束(PrimaryKey,PK)表的一列或幾列的組合的值在表中唯一地指定一行記錄,這樣的一列或多列稱為表的主鍵,通過它可強制表的實體完整性。主鍵不能為空,且不同兩行的鍵值不能相同。表本身并不要求一定要有主鍵,但最好給表定義主鍵。在規(guī)范化的表中,每行中的所有數(shù)據(jù)值都完全依賴于主鍵。

例如:學(xué)生表中的學(xué)號。12.1約束創(chuàng)建主鍵約束的方法在企業(yè)管理器中,打開表設(shè)計器。選擇創(chuàng)建主鍵的列。單擊工具欄設(shè)置主鍵按鈕。12.1約束(2)外鍵約束(ForeignKey,F(xiàn)K)外鍵約束定義了表與表之間的關(guān)系。通過將一個表中一列或多列添加到另一個表中,創(chuàng)建兩個表之間的連接,這個列就成為第二個表的外鍵,即外鍵是用于建立和加強兩個表數(shù)據(jù)之間的連接的一列或多列,通過它可以強制參照完整性。外鍵約束的主要目的是控制存儲在外鍵表中的數(shù)據(jù)。12.1約束創(chuàng)建外鍵約束的方法打開企業(yè)管理器,展開數(shù)據(jù)庫,右鍵單擊關(guān)系圖,選擇【新建數(shù)據(jù)庫關(guān)系圖】菜單項。根據(jù)向?qū)崾?,選擇欲創(chuàng)建外鍵約束的表。出現(xiàn)如下界面,拖動關(guān)聯(lián)列。12.1約束級聯(lián)操作根據(jù)主鍵表中數(shù)據(jù)的修改而對外鍵表中數(shù)據(jù)相應(yīng)地做相同的修改。SQLServer提供了兩種級聯(lián)操作:級聯(lián)刪除和級聯(lián)修改級聯(lián)刪除:當主鍵表中某行被刪除時,外鍵表中所有相關(guān)行將被刪除。

例如:課程表中的c01課程被刪除,選課表選了c01課程的記錄都被刪除。級聯(lián)修改:當主鍵表中某行的鍵值被修改時,外鍵表中所有相關(guān)行的該外鍵值也將被自動修改為新值。

例如:將課程表中c02改為c30,選課表中c02的值也被自動更改為c30。12.1約束(3)唯一性約束(Unique)唯一性約束指定一個或多個列的組合的值具有唯一性,以防止在列中輸入重復(fù)的值,為表中的一列或者多列提供實體完整性。

例如:身份證號碼通常被設(shè)定唯一性約束。唯一性約束指定的列可以有NULL屬性。主鍵也強制執(zhí)行唯一性,但主鍵不允許空值,故主鍵約束強度大于唯一約束。因此主鍵列不能再設(shè)定唯一性約束。一個表可以定義多個唯一性約束。12.1約束創(chuàng)建唯一性約束在企業(yè)管理器中,打開表設(shè)計器。單擊工具欄管理索引/鍵按鈕。12.1約束(4)檢查約束(Check)檢查約束對輸入列或整個表中的值設(shè)置檢查條件,以限制輸入值,保證數(shù)據(jù)庫的數(shù)據(jù)完整性。當對具有檢查約束列進行插入或修改時,SQLServer將用該檢查約束的邏輯表達式對新值進行檢查,只有滿足條件(邏輯表達式返回TRUE)的值才能填入該列,否則報錯??梢詾槊苛兄付ǘ鄠€CHECK約束。

例如:為學(xué)生表的性別列定義檢查約束:

性別in('男','女')

或者

性別='男'or性別='女'12.1約束創(chuàng)建檢查約束在企業(yè)管理器中,打開表設(shè)計器。單擊工具欄管理索引/鍵按鈕,選擇【CHECK約束】。輸入約束表達式12.2默認值默認值(Default)通過定義列的默認值或使用數(shù)據(jù)庫的默認值對象綁定表的列,以確保在沒有為某列指定數(shù)據(jù)時,來指定列的值。默認值可以是常量,也可以是表達式,還可以為NULL值。

例如:將學(xué)生表的性別列設(shè)置默認值'女'

。12.2默認值創(chuàng)建默認約束在企業(yè)管理器中,打開表設(shè)計器。選擇設(shè)定默認值的列,輸入默認值。12.2默認值使用默認對象默認對象是單獨存儲的,可以綁定到某列。刪除表時,默認值會自動刪除,但默認對象不會被刪除。默認對象的操作(1)創(chuàng)建默認對象注意定界符12.2默認值(2)綁定默認對象將左側(cè)列添加至右側(cè),即綁定將右側(cè)綁定列刪除至左側(cè),解除綁定修改默認對象12.2默認值(3)重命名默認對象(4)刪除默認對象12.3規(guī)則規(guī)則是數(shù)據(jù)庫中對存儲在表的列或用戶定義數(shù)據(jù)類型中的值的規(guī)定和限制。規(guī)則是單獨存儲的獨立的數(shù)據(jù)庫對象。規(guī)則與其作用的表或用戶定義數(shù)據(jù)類型是相互獨立的。規(guī)則和約束可以同時使用,表的列可以有一個規(guī)則及多個約束。規(guī)則與檢查約束在功能上相似,但在使用上有所區(qū)別。規(guī)則的操作包括創(chuàng)建、查看、綁定、松綁和刪除等。12.3規(guī)則創(chuàng)建規(guī)則在企業(yè)管理器中選擇數(shù)據(jù)庫對象“規(guī)則”,單擊右鍵從快捷菜單中選擇“新建規(guī)則”選項,即會彈出如圖所示的“規(guī)則屬性”對話框。輸入規(guī)則名稱和表達式之后,單擊“確定”按鈕,即完成規(guī)則的創(chuàng)建。12.3規(guī)則查看規(guī)則在企業(yè)管理器的數(shù)據(jù)庫對象中選擇“規(guī)則”對象,即可從右邊的任務(wù)板中看到規(guī)則的大部分信息,包括規(guī)則的名稱、所有者、創(chuàng)建時間等。規(guī)則列表12.3規(guī)則修改規(guī)則在企業(yè)管理器中,選中欲修改的規(guī)則,右鍵單擊,選擇【屬性】菜單項。打開【規(guī)則屬性】對話框。12.3規(guī)則規(guī)則的綁定與松綁綁定:指定規(guī)則作用于哪個表的那一列或哪個用戶定義數(shù)據(jù)類型。表的一列或一個用戶定義數(shù)據(jù)類型只能與一個規(guī)則綁定,而一個規(guī)則可以綁定多個對象。松綁:解除規(guī)則與對象的綁定。規(guī)則綁定到列規(guī)則綁定到用戶定義數(shù)據(jù)類型將左側(cè)列添加至右側(cè),即綁定將右側(cè)綁定列刪除至左側(cè),即松綁12.3規(guī)則刪除規(guī)則在查看數(shù)據(jù)庫規(guī)則窗口,右鍵單擊欲刪除的規(guī)則,選擇【刪除】菜單項。12.4事務(wù)處理事務(wù)(Transaction)是SQLServer中的一個邏輯工作單元,該單元將被作為一個整體進行處理。要么全部執(zhí)行,要么都不執(zhí)行。一個事務(wù)中的所有操作全部成功,事務(wù)才算完成,否則,操作全部撤銷。事務(wù)的作用解決數(shù)據(jù)庫中的數(shù)據(jù)不一致的問題。12.4事務(wù)處理張偉同學(xué)退學(xué),需刪除其學(xué)生表及選課表中的記錄:deletefrom學(xué)生表where學(xué)號='s2008005'deletefrom選課表where學(xué)號='s2008005'學(xué)生表選課表學(xué)生表的數(shù)據(jù)刪除后,掉電,引起數(shù)據(jù)不一致問題。12.4事務(wù)處理事務(wù)的屬性(ACID)原子性(atomicity):事務(wù)必須是工作的最小單元,即原子單元,對于其數(shù)據(jù)的修改,要么全部執(zhí)行,要么全都不執(zhí)行。一致性(consistency):事務(wù)在完成后,必須使所有的數(shù)據(jù)都保持一致性狀態(tài)。隔離性(isolation):一個事務(wù)所作的修改必須與任何其他并發(fā)事務(wù)所作的修改隔離。持久性(durability):事務(wù)完成后,它對于系統(tǒng)的影響是永久性的。12.4事務(wù)處理3種事務(wù)模式自動提交事務(wù):每條單獨的語句都是一個事務(wù),為系統(tǒng)默認的事務(wù)管理模式。顯式事務(wù):用戶定義事務(wù)的啟動和結(jié)束。BEGINTRANSACTION:事務(wù)開始。COMMIT:事務(wù)完成。ROLLBACK:事務(wù)回滾。隱性事務(wù):在當前事務(wù)完成提交或回滾后,新事務(wù)自動啟動。即用戶不需要指定事務(wù)的開始,但需要指定事務(wù)的提交和回滾。12.4事務(wù)處理事務(wù)的啟動、提交和回滾在應(yīng)用程序中,通常用BEGINTANSACTION語句來標識一個事務(wù)的開始,用COMMIT語句標識事務(wù)結(jié)束,用ROLLBACK語句標識事務(wù)回滾。12.4事務(wù)處理舉例:分析以下T-SQL語句的執(zhí)行結(jié)果。begintransaction

insertinto課程表(課程號,課程名,學(xué)時)values('c06','管理學(xué)',60)rollback

select*from課程表begintransaction

insertinto課程表(課程號,課程名,學(xué)時)values('c06','管理學(xué)',60)commit

select*from課程表12.5數(shù)據(jù)的鎖定并發(fā)問題多個用戶同時訪問一個數(shù)據(jù)庫,則當他們的事務(wù)同時使用相同的數(shù)據(jù)時可能會發(fā)生數(shù)據(jù)不一致的問題。并發(fā)問題包括:丟失或覆蓋更新(LostUpdate)未確認的相關(guān)性(臟讀,DirtyRead)不一致的分析(非重復(fù)讀,Non-RepeatableRead)幻想讀12.5數(shù)據(jù)的鎖定SQLServer的鎖模式鎖(lock):是一種安全機制,用于控制多個用戶的并發(fā)操作,以防止用戶讀取正在由其他用戶更改的數(shù)據(jù)或者多個用戶同時修改同一數(shù)據(jù)。鎖模式:確定并發(fā)事務(wù)訪問資源的方式。共享鎖(sharelock):鎖定的資源可以被其他用戶讀取,但其他用戶不能修改它(只讀操作)。排他鎖(exclusivelock):鎖定的資源只允許進行鎖定操作的程序使用,其他任何對它的操作均不會被接受。更新鎖(updatelock):用于可更新的資源中,是為了防止死鎖而設(shè)立的。12.5數(shù)據(jù)的鎖定通過企業(yè)管理器查看和終止鎖在企業(yè)管理器中選擇目錄樹窗口中“管理”文件夾下“當前活動”項中的“鎖/進程ID”選項,可以查看當前鎖定的進程。選擇同級的“鎖/對象”選項下的相應(yīng)選項,則可以查看當前鎖定的對象。12.5數(shù)據(jù)的鎖定右鍵單擊任務(wù)板窗口中的對象,從快捷菜單中選擇【屬性】項,則會出現(xiàn)如下圖所示的鎖的進程細節(jié)對話框。在此,可以刷新或終止鎖的進程。12.5數(shù)據(jù)的鎖定死鎖及其防止死鎖(deadlocking)是在多用戶或多進程狀況下,為使用同一資源而產(chǎn)生的無法解決的爭用狀態(tài)。死鎖會造成資源的大量浪費,甚至?xí)瓜到y(tǒng)崩潰。在SQLServer2000中,通常由鎖監(jiān)視器線程自動定期對死鎖進行檢測。當識別死鎖后,SQLServer自動設(shè)置一個事務(wù)結(jié)束死鎖進程。12.5數(shù)

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論