![第6章 數(shù)據(jù)庫保護(hù)_第1頁](http://file4.renrendoc.com/view11/M02/20/14/wKhkGWXf2z6AEcZ5AADv0FwGV54809.jpg)
![第6章 數(shù)據(jù)庫保護(hù)_第2頁](http://file4.renrendoc.com/view11/M02/20/14/wKhkGWXf2z6AEcZ5AADv0FwGV548092.jpg)
![第6章 數(shù)據(jù)庫保護(hù)_第3頁](http://file4.renrendoc.com/view11/M02/20/14/wKhkGWXf2z6AEcZ5AADv0FwGV548093.jpg)
![第6章 數(shù)據(jù)庫保護(hù)_第4頁](http://file4.renrendoc.com/view11/M02/20/14/wKhkGWXf2z6AEcZ5AADv0FwGV548094.jpg)
![第6章 數(shù)據(jù)庫保護(hù)_第5頁](http://file4.renrendoc.com/view11/M02/20/14/wKhkGWXf2z6AEcZ5AADv0FwGV548095.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫系統(tǒng)原理
與應(yīng)用技術(shù)
主講:陳漫紅chmh1@263.net北京聯(lián)合大學(xué)師范學(xué)院電氣信息系第6章
數(shù)據(jù)庫保護(hù)6.1事務(wù)的概念
6.2數(shù)據(jù)庫恢復(fù)概述
6.3并發(fā)控制與封鎖
6.4數(shù)據(jù)庫的安全性
6.5數(shù)據(jù)庫的完整性
6.6數(shù)據(jù)庫的備份與恢復(fù)
6.7本章小結(jié)6.1事務(wù)的概念
6.1.1事務(wù)
6.1.2事務(wù)的特征
6.1.1事務(wù)事務(wù)是用戶定義的數(shù)據(jù)操作系列,這些操作作為一個完整的工作單元,一個事務(wù)內(nèi)的所有語句被作為一個整體,要么全部執(zhí)行,要么全部不執(zhí)行。
例如:對于一個轉(zhuǎn)帳活動:A帳戶轉(zhuǎn)帳給B帳戶n元錢,這個活動包含兩個動作:第一個動作:A帳戶-n第二個動作:B帳戶+n6.1.2事務(wù)的特征原子性(Atomicity)
:指事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中的操作要么都做,要么都不做。
一致性(Consistency)
:指事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)。隔離性(Isolation)
:指數(shù)據(jù)庫中一個事務(wù)的執(zhí)行不能被其它事務(wù)干擾。持久性(Durability)
:也稱為永久性,是指事務(wù)一旦提交,則其對數(shù)據(jù)庫中數(shù)據(jù)的改變就是永久的。
6.1.2事務(wù)的特征保證事務(wù)的ACID特性是事務(wù)處理的重要任務(wù)。事務(wù)的ACID特性可能遭到破壞的因素有:多個事務(wù)并行運(yùn)行時,不同事務(wù)的操作有交叉情況;這種情況DBMS應(yīng)保證事務(wù)的原子性。事務(wù)在運(yùn)行過程中被強(qiáng)迫停止,這種情況DBMS應(yīng)保證被終止的事物對其他的事物沒有影響。6.2數(shù)據(jù)庫恢復(fù)概述
數(shù)據(jù)庫的恢復(fù):數(shù)據(jù)庫管理系統(tǒng)必須具有把數(shù)據(jù)庫從錯誤狀態(tài)恢復(fù)到某一已知的正確狀態(tài)(亦稱為完整狀態(tài)或一致狀態(tài))的功能。數(shù)據(jù)庫系統(tǒng)中可能發(fā)生的故障:(1)事務(wù)內(nèi)部的故障
(2)系統(tǒng)故障
(3)介質(zhì)故障
(4)計算機(jī)病毒
6.2數(shù)據(jù)庫恢復(fù)概述數(shù)據(jù)轉(zhuǎn)儲是數(shù)據(jù)庫恢復(fù)中采用的基本技術(shù)。即DBA定期地將整個數(shù)據(jù)庫復(fù)制到磁帶或另一個磁盤上保存起來的過程。當(dāng)數(shù)據(jù)庫遭到破壞后就可以利用后備副本把數(shù)據(jù)庫恢復(fù)。轉(zhuǎn)儲是十分耗費(fèi)時間和資源的,不能頻繁進(jìn)行。DBA應(yīng)該根據(jù)數(shù)據(jù)庫使用情況確定一個適當(dāng)?shù)霓D(zhuǎn)儲周期,制定合適的轉(zhuǎn)儲策略。日志文件是用來記錄對數(shù)據(jù)庫每一次更新活動的文件。在轉(zhuǎn)儲中必須建立日志文件,后援副本和日志文件綜合起來才能有效地恢復(fù)數(shù)據(jù)庫。
6.3并發(fā)控制與封鎖
6.3.1并發(fā)控制概述6.3.2封鎖6.3.3封鎖協(xié)議6.3.4死鎖6.3.5兩段鎖協(xié)議
6.3.1并發(fā)控制概述
數(shù)據(jù)庫中的數(shù)據(jù)是一個共享的資源,因此會有很多用戶同時使用數(shù)據(jù)庫中的數(shù)據(jù),在多用戶系統(tǒng)中,可能同時運(yùn)行著多個事務(wù),而事務(wù)的運(yùn)行需要時間,并且事務(wù)中的操作是在一定的數(shù)據(jù)上進(jìn)行的。當(dāng)系統(tǒng)中同時有多個事務(wù)在運(yùn)行時,特別是當(dāng)這些事務(wù)是對同一段數(shù)據(jù)進(jìn)行操作時,彼此之間就有可能產(chǎn)生相互干擾的情況。
并發(fā)事務(wù)的相互干擾示例A、B兩個訂票點(diǎn)恰巧同時辦理同一架航班的飛機(jī)訂票業(yè)務(wù)。設(shè)其操作過程及順序如下:
A訂票點(diǎn)(事務(wù)A)讀出航班目前的機(jī)票余額數(shù),假設(shè)為10張;B訂票點(diǎn)(事務(wù)B)讀出航班目前的機(jī)票余額數(shù),也為10張;A訂票點(diǎn)訂出6張機(jī)票,修改機(jī)票余額為10-6=4,并將4寫回到數(shù)據(jù)庫中;B訂票點(diǎn)訂出5張機(jī)票,修改機(jī)票余額為10-5=5,并將5寫回到數(shù)據(jù)庫中;可見這兩個事務(wù)不能反映出飛機(jī)票數(shù)不夠的情況,而且B事務(wù)對數(shù)據(jù)庫的修改,使數(shù)據(jù)庫中的數(shù)據(jù)不可信,這種情況稱為數(shù)據(jù)的不一致。DBMS必須想辦法避免出現(xiàn)這種情況,這就是DBMS在并發(fā)控制中要解決的問題。并發(fā)操作所帶來的數(shù)據(jù)不一致情況大致分為:丟失修改,不可重復(fù)讀,讀“臟”數(shù)據(jù)和產(chǎn)生“幽靈”數(shù)據(jù)。以下分別介紹。丟失數(shù)據(jù)修改是指兩個事務(wù)T1和T2讀入同一數(shù)據(jù)并進(jìn)行修改,T2提交的結(jié)果破壞了T1提交的結(jié)果,導(dǎo)致T1的修改被T2覆蓋掉。例如:讀“臟”數(shù)據(jù)是指一個事務(wù)讀取了某個失敗事務(wù)運(yùn)行過程中的數(shù)據(jù)。不可重復(fù)讀是指事務(wù)T1讀取數(shù)據(jù)后,事務(wù)T2執(zhí)行了更新操作,修改了T1讀取的數(shù)據(jù),T1操作完數(shù)據(jù)后,又重新讀取了同樣的數(shù)據(jù),但此次讀完后,當(dāng)T1再對這些數(shù)據(jù)進(jìn)行相同操作時,所得的結(jié)果與前一次不一樣。產(chǎn)生“幽靈”數(shù)據(jù)屬于不可重復(fù)讀的范疇。指當(dāng)事務(wù)T1按一定條件從數(shù)據(jù)庫中讀取了某些數(shù)據(jù)記錄后,事務(wù)T2刪除了其中的部分記錄,或者在其中添加了部分記錄,則當(dāng)T1再次按相同條件讀取數(shù)據(jù)時,發(fā)現(xiàn)其中莫名其妙地少了(對刪除)或多了(對插入)一些記錄。這樣的數(shù)據(jù)對T1來說就是“幽靈”數(shù)據(jù)或稱“幻影”數(shù)據(jù)。產(chǎn)生這四種數(shù)據(jù)不一致現(xiàn)象的主要原因是并發(fā)操作破壞了事務(wù)的隔離性。并發(fā)控制是要用正確的方法來調(diào)度并發(fā)操作,使一個事務(wù)的執(zhí)行不受其他事務(wù)的干擾,避免造成數(shù)據(jù)的不一致情況。6.3.2封鎖
并發(fā)控制的主要技術(shù)是采用封鎖機(jī)制。封鎖就是事務(wù)T可以向系統(tǒng)發(fā)出請求,對某個數(shù)據(jù)對象(最常用的是記錄)加鎖(Locking)。于是事務(wù)T對這個數(shù)據(jù)對象就有一定的控制權(quán)?;镜姆怄i類型:(1)排它(X)鎖若事務(wù)T對數(shù)據(jù)R加上X鎖,則只允許T讀取和修改R。其他一切事務(wù)對R的任何封鎖請求都不能成功,直至T釋放R上的X鎖。(2)共享鎖(S鎖或讀鎖):指對于讀操作(檢索)來說,可以多個事務(wù)同時獲得共享鎖,但阻止其它事務(wù)對已獲得共享鎖的數(shù)據(jù)進(jìn)行排它封鎖。若事務(wù)T給數(shù)據(jù)對象A加了共享鎖,則事務(wù)T可以讀A,但不能修改A,其它事務(wù)只能再給A加S鎖,而不能加X鎖,直到T釋放了A上的S鎖為止.
封鎖類型(3)更新(U)鎖當(dāng)一個事務(wù)T對數(shù)據(jù)對象A加更新鎖,首先對數(shù)據(jù)對象做更新鎖鎖定,這樣數(shù)據(jù)將不能被修改,但可以讀取,等到執(zhí)行數(shù)據(jù)更新操作時,自動將更新鎖轉(zhuǎn)換為獨(dú)占鎖,但當(dāng)對象上有其他鎖存在時,無法對其作更新鎖鎖定。(4)意向鎖對于數(shù)據(jù)庫中的數(shù)據(jù)對象,可用如圖所示的層次樹表示。意向鎖表示一個事務(wù)為了訪問數(shù)據(jù)庫對象層次結(jié)構(gòu)中的某些底層資源(如表中的元組)而加共享鎖或排他鎖的意向。包括:意向共享(IS)鎖
意向排他(IX)鎖
意向排他共享(SIX)鎖封鎖類型
(IS)鎖:如果對一個數(shù)據(jù)對象加IS鎖,表示擬對它的后裔節(jié)點(diǎn)加S鎖,讀取底層的數(shù)據(jù)。例如,若要對某個元組加S鎖,則首先應(yīng)對元組所在的關(guān)系或數(shù)據(jù)庫加IS鎖。
意向排他(IX)鎖:如果對一個數(shù)據(jù)對象加IX鎖,表示擬對它的后裔節(jié)點(diǎn)加X鎖,更新底層的數(shù)據(jù)。例如,若要對某個關(guān)系加X鎖,以便插入一個元組,則首先應(yīng)對數(shù)據(jù)庫加IX鎖。
意向排他共享(SIX)鎖:如果對一個數(shù)據(jù)對象加SIX鎖,表示對它加S鎖,再加IX鎖,即SIX=S+IX。例如,對某個表加SIX鎖,則表示該事務(wù)要讀整個表(所以要對該表加S鎖),同時會更新個別元組(所以要對該表加IX鎖)。鎖類型及其作用鎖類型及其作用鎖模式描述共享(S)用于只讀操作,如SELECT語句更新(U)用于可更新的資源中,防止當(dāng)多個會話在讀取、鎖定及隨后可能進(jìn)行的資源更新時發(fā)生常見形式的死鎖排他(X)用于數(shù)據(jù)修改操作,如INSERT,UPDATE或DELETE,確保不會同時對同一資源進(jìn)行多重更新意向用于建立鎖的層次結(jié)構(gòu),意向鎖的類型為意向共享(IS)、意向排他(IX)及意向排他共享(SIX)加鎖類型的相容矩陣鎖模式意向共享(IS)共享(S)更新(U)意向排他(IX)意向排他共享(SIX)排他(X)意向共享(IS)相容相容相容相容相容不相容共享(S)相容相容相容不相容不相容不相容更新(U)相容相容不相容不相容不相容不相容意向排他(IX)相容不相容不相容相容不相容不相容意向排他共享(SIX)相容不相容不相容不相容不相容不相容排他(X)不相容不相容不相容不相容不相容不相容封鎖粒度
被鎖定的對象的數(shù)據(jù)量稱為封鎖粒度。封鎖對象可以是邏輯單元,也可以是物理單元。以關(guān)系數(shù)據(jù)庫為例,封鎖對象可以是行、列、索引項、頁、擴(kuò)展盤區(qū)、表和數(shù)據(jù)庫等。
鎖定粒度大,系統(tǒng)開銷小,但并發(fā)度會降低鎖定粒度小,系統(tǒng)開銷大,但可提高并發(fā)度
6.3.3封鎖協(xié)議在運(yùn)用X鎖和S鎖對數(shù)據(jù)對象進(jìn)行加鎖時,還需要約定一些規(guī)則,如何時申請X鎖或S鎖、持鎖時間、何時釋放鎖等。稱這些規(guī)則為封鎖協(xié)議或加鎖協(xié)議(LockingProtocel)。對封鎖方式規(guī)定不同的規(guī)則,就形成了各種不同級別的封鎖協(xié)議。不同級別的封鎖協(xié)議達(dá)到的系統(tǒng)一致性級別不同。一級封鎖協(xié)議對事務(wù)T要修改的數(shù)據(jù)加X鎖,直到事務(wù)結(jié)束(包括正常結(jié)束和非正常結(jié)束)時才釋放。一級封鎖協(xié)議可以防止丟失修改,并保證事務(wù)T是可恢復(fù)的。但不能保證可重復(fù)讀和不讀“臟”數(shù)據(jù)。一級封鎖協(xié)議示例二級封鎖協(xié)議一級封鎖協(xié)議加上對事務(wù)T對要讀取的數(shù)據(jù)加S鎖,讀完后即釋放S鎖。除了可以防止丟失修改外,還可以防止讀“臟”數(shù)據(jù)。但不能保證可重復(fù)讀數(shù)據(jù)。二級封鎖協(xié)議示例三級封鎖協(xié)議一級封鎖協(xié)議加上事務(wù)T對要讀取的數(shù)據(jù)加S鎖,并直到事務(wù)結(jié)束才釋放。除了可以防止丟失修改和不讀“臟”數(shù)據(jù)之外,還進(jìn)一步防止了不可重復(fù)讀。三級封鎖協(xié)議示例不同級別的封鎖協(xié)議總結(jié)
6.3.4死鎖1.死鎖的種類(1)活鎖是指當(dāng)若干事務(wù)要對同一數(shù)據(jù)項加鎖時,造成一些事務(wù)的永遠(yuǎn)等待,得不到控制權(quán)的現(xiàn)象。假設(shè)T1、T2、T3、T4都要讀取R的值,則它們依次對R加鎖,如圖所示,這時T2可能永遠(yuǎn)處于等待狀態(tài)。
(2)死鎖是指兩個以上事務(wù)集合中的每個事務(wù)都在等待加鎖當(dāng)前已被另一事務(wù)加鎖的數(shù)據(jù)項,從而造成相互等待的現(xiàn)象。如圖所示。死鎖的診斷
(1)超時法如果一個事務(wù)的等待時間超過了規(guī)定的時限,就認(rèn)為發(fā)生了死鎖。這種方法實現(xiàn)簡單,但存在兩個問題:一是可能誤判死鎖,如果事務(wù)是由于其他原因而使等待時間長,系統(tǒng)會認(rèn)為是發(fā)生了死鎖;二是時限的設(shè)置問題,若時限設(shè)置得太長,可能導(dǎo)致死鎖發(fā)生后不能及時發(fā)現(xiàn)。(2)等待圖法等待圖法是動態(tài)地根據(jù)并發(fā)事務(wù)之間的資源等待關(guān)系構(gòu)造一個有向圖,并發(fā)控制子系統(tǒng)周期性地檢測該有向圖是否出現(xiàn)環(huán)路,若有,則說明出現(xiàn)了死鎖。數(shù)據(jù)庫中解決死鎖的常用方法
一次封鎖法一次封鎖法是每個事務(wù)一次將所有要使用的數(shù)據(jù)全部加鎖。順序封鎖法順序封鎖法是預(yù)先對數(shù)據(jù)對象規(guī)定一個封鎖順序,所有事務(wù)都按這個順序封鎖。采用診斷的方式
構(gòu)造一些算法,選擇代價小的撤銷讓路6.3.5兩段鎖協(xié)議具體內(nèi)容為:①在對任何數(shù)據(jù)進(jìn)行讀,寫操作之前,首先要封鎖該數(shù)據(jù);②在釋放一個封鎖之后,事務(wù)不再申請和獲得任何其他封鎖.兩段鎖協(xié)議是實現(xiàn)可串行化調(diào)度的充分條件??梢詫⒚總€事務(wù)分成兩個時期:申請封鎖期和釋放封鎖期,申請期申請要進(jìn)行的封鎖,釋放期釋放所占有的封鎖。在申請期不允許釋放任何鎖,在釋放期不允許申請任何鎖,這就是兩段式封鎖。6.4數(shù)據(jù)庫的安全性6.4.1數(shù)據(jù)庫安全性控制概述6.4.2用戶標(biāo)識與鑒別6.4.3用戶身份認(rèn)證6.4.4訪問控制6.4.5視圖機(jī)制6.4.6審計6.4.7數(shù)據(jù)加密6.4.1數(shù)據(jù)庫安全性控制概述用戶DBMSOSDB用戶標(biāo)識和鑒定存取控制操作系統(tǒng)安全保護(hù)數(shù)據(jù)密碼存儲安全保護(hù)在計算機(jī)系統(tǒng)中,安全措施一般是一級一級層層設(shè)置的,如圖所示就是一種很常用的安全模型。
6.4.2用戶標(biāo)識與鑒別用戶標(biāo)識和鑒定是系統(tǒng)提供的最外層安全保護(hù)措施。其方法是由系統(tǒng)提供一定的方式讓用戶標(biāo)識自己的身份。
目前常用的確用戶鑒定方法有:(1)口令(password)是最常用的方法。當(dāng)進(jìn)入系統(tǒng)時,系統(tǒng)常常要求用戶輸入口令,并對輸入的口令進(jìn)行鑒別,核實用戶的身份。(2)利用用戶的物理特征鑒別利用用戶的物理特征,如指紋、聲波、相貌等鑒別用戶的身份。這些鑒別的方法操作簡單,而且技術(shù)日趨成熟。6.4.3用戶身份認(rèn)證系統(tǒng)認(rèn)證模式是指當(dāng)用戶進(jìn)行訪問數(shù)據(jù)庫系統(tǒng)時系統(tǒng)給予的確認(rèn)方式,這是數(shù)據(jù)庫管理系統(tǒng)提供的最外層安全保護(hù)措施,主要體現(xiàn)在當(dāng)用戶登錄時,系統(tǒng)對該用戶的賬號和口令進(jìn)行認(rèn)證。例如,SQLServer2005提供了Windows認(rèn)證模式和SQLServer認(rèn)證模式。在Windows認(rèn)證模式下,用戶的身份驗證由操作系統(tǒng)完成。SQLServer認(rèn)證模式下,由DBMS進(jìn)行用戶認(rèn)證機(jī)制。
6.4.4訪問控制1.存取控制:數(shù)據(jù)庫安全最重要的一點(diǎn)就是確保只授權(quán)給有資格的用戶訪問數(shù)據(jù)庫的權(quán)限。2.自主存取控制方法:是一種基于存取者身份或所屬工作組對數(shù)據(jù)的訪問權(quán)限進(jìn)行控制的手段,大多數(shù)DBMS都支持DAC,其控制機(jī)制主要包括兩部分:①提供定義用戶權(quán)限的功能,并將實際的權(quán)限定義登記到數(shù)據(jù)字典中;②進(jìn)行權(quán)限檢查,當(dāng)用戶發(fā)出數(shù)據(jù)庫存取操作請求時,DBMS根據(jù)數(shù)據(jù)字典中登記的權(quán)限和安全性規(guī)則進(jìn)行訪問的合法性檢查,若用戶的操作請求不合法,則拒絕數(shù)據(jù)訪問。
3.強(qiáng)制存取控制方法相對于DAC,強(qiáng)制訪問控制(MAC)是一種不允許主體干涉的訪問控制,它由系統(tǒng)或數(shù)據(jù)庫管理員決定整個系統(tǒng)的安全策略,MAC的實現(xiàn)機(jī)制主要由兩部分內(nèi)容構(gòu)成:①針對主體的權(quán)限和客體的安全性要求,分別指派相應(yīng)的敏感度標(biāo)記,主體的敏感度標(biāo)記稱為許可證級別,客體的敏感度標(biāo)記稱為密級。②當(dāng)主體對客體進(jìn)行訪問時,依據(jù)“不準(zhǔn)上讀,不準(zhǔn)下寫”的規(guī)則進(jìn)行訪問控制。
6.4.5視圖機(jī)制視圖技術(shù)是保證數(shù)據(jù)庫安全的一個重要手段,它可以把要保密的數(shù)據(jù)對無權(quán)存取的用戶隱藏起來,從而對數(shù)據(jù)提供一定程度的安全保護(hù)。通過視圖可實現(xiàn)如下功能:①可以限制用戶只看到表中的某些行
②可以限制用戶只看到表中的某些列
③將多個表中的列組合起來。使得這些列看起來就像一個簡單的數(shù)據(jù)庫表。
6.4.6審計審計功能就是把用戶對數(shù)據(jù)庫的所有操作自動記錄下來放入審計日志中,一旦發(fā)生數(shù)據(jù)被非法存取,DBA可以利用審計跟蹤的信息,重現(xiàn)導(dǎo)致數(shù)據(jù)庫現(xiàn)有狀況的一系列事件,找出非法存取數(shù)據(jù)的人、時間和內(nèi)容等。
6.4.7數(shù)據(jù)加密加密是根據(jù)一定的算法將原始數(shù)據(jù)(明文,Plaintext)變換為不可直接識別的格式(密文,Ciphertext),從而使得不知道解密算法的人無法獲得數(shù)據(jù)的內(nèi)容。
加密方法主要有兩種:
1)替換方法。使用密鑰將明文中的每一個字符轉(zhuǎn)換為密文中的字符。
2)置換方法。僅將明文的字符按不同的順序重新排列。常用的加密算法有:對稱算法,指加密和解密使用同一個密鑰,主要包括替換密碼、變位密碼、DES算法等方法;非對稱算法,指加密和解密使用兩個不同但是數(shù)學(xué)上相關(guān)的密鑰,最典型的是RSA算法。
6.4.7數(shù)據(jù)加密SQLServer可以加密下列方面:(1)密碼
SQLServer自動將分配給登錄和應(yīng)用角色的密碼加密。(2)存儲過程、視圖、觸發(fā)器、用戶自定義函數(shù)、默認(rèn)值和規(guī)則例如,為了加密一個存儲過程,使用下面形式的CREATEPROCEDURE語句:CREATEPROCEDUREprocedurename[;number][@parameter
datatype[VARYING][=defaultvalue][OUTPUT]][,…][WITHRECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION]其中,人們關(guān)心的僅僅是可選的WITH參數(shù)。ENCRYPTION關(guān)鍵字保護(hù)SQLServer不被公開在進(jìn)程中,在激活的時候系統(tǒng)存儲過程sp_helptext就會被忽視。
(3)在服務(wù)器和用戶之間傳輸?shù)臄?shù)據(jù)6.5數(shù)據(jù)庫的完整性數(shù)據(jù)的完整性是為了防止數(shù)據(jù)庫中存在不符合語義的數(shù)據(jù)。DBMS檢查數(shù)據(jù)是否滿足完整性條件的機(jī)制就稱為完整性檢查。DBMS的完整性控制機(jī)制應(yīng)具有兩方面的功能:(1)定義功能:為數(shù)據(jù)庫用戶提供定義完整性約束條件的機(jī)制。(2)檢查功能:檢查用戶發(fā)出的操作請求是否違背了完整性約束條件,如果發(fā)現(xiàn)用戶的操作請求使數(shù)據(jù)違背了完整性約束條件,則執(zhí)行相應(yīng)的處理,以保證數(shù)據(jù)庫中數(shù)據(jù)的完整性。如下的二元組描述了DBMS實現(xiàn)一個數(shù)據(jù)庫完整性的機(jī)制:數(shù)據(jù)庫完整性機(jī)制=(完整性約束集,完整性約束檢查)6.5.1數(shù)據(jù)完整性約束從不同角度對數(shù)據(jù)庫的完整性進(jìn)行如下分類:1.完整性約束條件作用的對象可以是關(guān)系、元組、列3種,根據(jù)完整性約束條件作用的對象,可分為:①列約束②元組約束③關(guān)系約束
2.按照完整性約束對象的狀態(tài)來分,可將完整性分為靜態(tài)完整性約束和動態(tài)完整性約束。3.根據(jù)完整性的應(yīng)用特征,可將完整性分為:實體完整性、用戶定義完整性與參照完整性。6.5.2SQLServer2005的數(shù)據(jù)完整性控制
實現(xiàn)數(shù)據(jù)的完整性控制一般是在服務(wù)器上完成的。主要有以下兩種方法:一種是在定義表時聲明數(shù)據(jù)完整性,稱為聲明完整性,另一種是在服務(wù)器端編寫觸發(fā)器來實現(xiàn),稱為過程完整性。不管使用哪一種方法,只要用戶定義好數(shù)據(jù)完整性,以后在執(zhí)行對數(shù)據(jù)的增、刪、改操作時,數(shù)據(jù)庫管理系統(tǒng)自動檢查用戶定義的完整性約束條件。
在SQLServer2005中提供多種強(qiáng)制數(shù)據(jù)完整性的機(jī)制。
1.PRIMARYKEY約束標(biāo)識列或列集,這些列或列集的值唯一標(biāo)識表中的行。
?作為表定義的一部分在創(chuàng)建表時創(chuàng)建。
?添加到還沒有PRIMARYKEY約束的表中。?如果已有PRIMARYKEY約束,則可對其進(jìn)行修改或刪除。2.FOREIGNKEY約束
FOREIGNKEY約束(外鍵約束)標(biāo)識表之間的關(guān)系,用于強(qiáng)制參照完整性,為表中一列或者多列數(shù)據(jù)提供參照完整性。?作為表定義的一部分在創(chuàng)建表時創(chuàng)建。?對已有的FOREIGNKEY約束進(jìn)行修改或刪除。注意:外碼所引用的列必須是有PRIMARYKEY約束或UNIQUE約束的列。一個表可以有多個FOREIGNKEY約束。
3.UNIQUE約束
在列集內(nèi)強(qiáng)制執(zhí)行值的唯一性。
唯一約束與主鍵的區(qū)別為:主鍵不但不允許為空值,而且每個表中只能有一個,但UNIQUE約束的列在表中可以有多個。UNIQUE約束優(yōu)先于唯一索引。4.CHECK約束通過限制用戶輸入的值來加強(qiáng)域完整性。用于限制列的取值在指定的范圍內(nèi),使數(shù)據(jù)庫中存放的值都是有意義的。
系統(tǒng)在執(zhí)行INSERT語句和UPDATE語句時自動檢查CHECK約束。5.NOTNULL非空約束
用于指定列的非空性。6.DEFAULT默認(rèn)值約束用于提供列的默認(rèn)值。
7.規(guī)則
規(guī)則作為一個獨(dú)立的數(shù)據(jù)庫對象存在,表中的每列或者每個用戶定義數(shù)據(jù)類型只能和一個規(guī)則綁定。
(1)創(chuàng)建規(guī)則語法格式如下:CREATERULE規(guī)則名AS條件表達(dá)式【例6-9】在test數(shù)據(jù)庫中創(chuàng)建一個名為rule1的規(guī)則,限定輸入的值必須在0~10之間。UsetestGoCREATERULErule1as@c1between0and10(2)綁定規(guī)則要使用規(guī)則,必須首先將其和列或者用戶定義數(shù)據(jù)類型綁定。綁定的方法為使用SQLServer的系統(tǒng)存儲過程sp_bindrule,也可以使用SQLServer的管理控制器。語法格式為:sp_bindrule[@rulename=]'規(guī)則名',[@objname=]'列名或者用戶定義數(shù)據(jù)類型'【例6-10】將【例6-9】建立的rule1規(guī)則1綁定到test數(shù)據(jù)庫的table1表中的c1列上;UsetestGoExecsp_bindrule‘rule1’,’table1.c1’(3)解除和刪除規(guī)則對于不再使用的規(guī)則,可使用droprule刪除。要刪除規(guī)則首先要解除規(guī)則的綁定。解除規(guī)則的綁定可以使用sp_unbindrule存儲過程。sp_unbindrule存儲過程的語法格式如下:sp_unbindrule[@objname=]'列名或者用戶定義數(shù)據(jù)類型
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 團(tuán)知識競賽活動方案8篇
- 2025年醫(yī)療委托服務(wù)協(xié)議樣本
- 上海市松江區(qū)汽車租賃服務(wù)合同模板
- 2025年冬季供暖系統(tǒng)承包協(xié)議
- 2025年經(jīng)營權(quán)讓渡協(xié)議第十七案
- 2025年寫字樓租賃合同續(xù)租協(xié)議書
- 2025年砂洗機(jī)項目申請報告模稿
- 2025年醫(yī)師專業(yè)技能提升合作協(xié)議書范本
- 2025年藥效學(xué)研究服務(wù)項目申請報告
- 2025年鄉(xiāng)村住宅修建工程協(xié)議
- 建筑基坑工程監(jiān)測技術(shù)標(biāo)準(zhǔn)
- 2024年廣東汕尾市“奔向海陸豐”事業(yè)單位(綜合崗類)招聘工作人員176人歷年高頻500題難、易錯點(diǎn)模擬試題附帶答案詳解
- 【2024高考萬能答題模版】數(shù)學(xué)答題模板1
- DG-TJ 08-2242-2023 民用建筑外窗應(yīng)用技術(shù)標(biāo)準(zhǔn)
- 2024-2025上期學(xué)校心理健康教育工作計劃(附每周工作安排)
- 【中考真題】2024年河南省普通高中招生考試歷史試卷(含答案)
- YYT 0653-2017 血液分析儀行業(yè)標(biāo)準(zhǔn)
- JT-T-445-2021汽車底盤測功機(jī)
- 高考英語經(jīng)常用的七百個詞匯
- 不定代詞用法總結(jié)及配套練習(xí)題
- 糖尿病孕婦護(hù)理:案例分析
評論
0/150
提交評論