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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

或者

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

例如:將學生表的性別列設置默認值'女'

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

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

select*from課程表begintransaction

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

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

溫馨提示

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

評論

0/150

提交評論