考研複試 資料庫(一)

2021-10-16 09:57:49 字數 4245 閱讀 9776

1、事務

概念:事務指的是滿足acid特性的一組操作,可以通過commit提交乙個事務,也可以使用rollback進行回滾。

acid特性:

(1)原子性:事務被視為不可分割的最小單元,事務的所有操作要麼全部提交成功,要麼全部失敗回滾。回滾可以用回滾日誌來實現,回滾日誌記錄著事務所執行的修改操作,在回滾時反向執行這些修改操作即可。

(2)一致性:資料庫在事務執行前後都保持一致性狀態。在一致性狀態下,所有事務對乙個資料的讀取結果都是相同的。

(3)隔離性:乙個事務所做的修改在最終提交以前,對其它事務是不可見的。

(4)永續性:一旦事務提交,則其所做的修改將會永遠儲存到資料庫中。即使系統發生崩潰,事務執行的結果也不能丟失。

使用重做日誌來保證永續性。

事務的acid特性概念簡單,但不是很好理解,主要是因為這幾個特性不是一種平級關係:

只有滿足一致性,事務的執行結果才是正確的。

在無併發的情況下,事務序列執行,隔離性一定能夠滿足。此時只要滿足原子性,就一定能滿足一致性。

在併發的情況下,多個事務並行執行,事務不僅要滿足原子性,還需要滿足隔離性,才能滿足一致性。事務滿足永續性是為了能應對資料庫崩潰的情況。

2、併發一致性問題

丟失資料

丟失資料:t1和t2兩個事務都對乙個資料進行修改,t1先修改,t2隨後修改,t2的修改覆蓋了t1的修改。簡記為同時修改

讀髒資料

讀髒資料:t1對乙個資料做了修改,t2讀取這乙個資料。若t1執行rollback操作,則t2讀取的結果和第一次的結果不一樣。簡記為讀取失敗的修改。最簡答的場景是修改完成後,緊接著查詢檢驗結果。

不可重複讀

不可重複讀:t2讀取乙個資料,t1對該資料做了修改。如果t2再次讀取這個資料,此時讀取的結果和第一次讀取的結果不同。簡記為讀時修改,重複讀取的結果不一樣。

幻影讀

幻影讀:t1讀取某個範圍的資料,t2在這個範圍內插入新的資料,t1再次讀取這個範圍的資料,此時讀取的結果和第一次讀取的結果不同。簡記為讀時插入,重複讀取的結果不一樣。

解決方案

在併發環境下,事務的隔離性很難保證,因此會出現很多併發一致性問題。產生併發不一致問題的主要原因是破壞了事務的隔離性。解決方法是通過併發控制來保證隔離性。併發控制可以通過封鎖來實現,但是封鎖操作需要使用者自己控制,相當複雜。資料庫管理系統提供了事務的隔離級別,讓使用者以一種更輕鬆的方式處理併發一致性問題。

3、封鎖

封鎖粒度

mysql中提供了兩種封鎖粒度:行級鎖以及標級鎖。

應盡量只鎖定需要修改的那部分資料,而不是所有的資源。鎖定的資料量越少,發生鎖爭的可能就越小,系統的併發程度就越高。但是加鎖主要消耗資源,鎖的各種操作都會增加系統開銷。因此封鎖粒度越小,系統開銷就越大。為此,我們在選擇封鎖粒度時,需在鎖開銷和併發程度之間做乙個權衡。

封鎖型別

(1)讀寫鎖

排它鎖,簡寫為x鎖,又稱寫鎖。

共享鎖,間寫為s鎖,又稱讀鎖。

有以下兩個規定:

乙個事務對資料物件a加了x鎖,就可以對a進行讀取和更新。加鎖期間其它事務不能對a加任何鎖。

乙個事務對資料物件a加了s鎖,可以對a進行讀取操作,但是不能進行更新操作。加鎖期間其它事務能對a加s鎖,但是不能加x鎖。

(2)意向鎖

使用意向鎖,可以更容易地支援多粒度封鎖,使得行鎖和表鎖能夠共存。

在存在行級鎖和表級鎖的情況下,事務t想要對錶a加x鎖,就需要先檢測是否有其它事務對錶a或者表a中的任意一行加了鎖,那麼就需要對錶a的每一行都檢測一次,這是非常耗時的。

意向鎖在原來的x/s鎖之上引入了ix/is,ix/is都是表級別的鎖,用來表示乙個事務稍後會對錶中的某個資料行上加x鎖或s鎖。整理可得以下兩個規定:

乙個事務在獲得某個資料行物件的s鎖之前,必須先獲得表的is鎖或者更強的鎖;

乙個事務在獲得某個資料行物件的x鎖之前,必須先獲得表的ix鎖。

封鎖協議

**封鎖協議

一級封鎖協議:事務t要修改資料a時必須加x鎖,直到t結束才釋放鎖。防止同時修改,可解決丟失修改問題,因不能同時有兩個事務對同乙個資料進行修改,那麼事務的修改就不會被覆蓋。

二級封鎖協議:在一級的基礎上,要求讀取資料a時必須加s鎖,讀取完馬上釋放,讀取完馬上釋放s鎖。防止修改時讀取,可解決丟失修改和讀髒資料問題,因為乙個事務在對資料a進行修改,根據1級封鎖協議,會加x鎖,那麼就不能再加s鎖了,也就是不會讀入資料。

**封鎖協議:在二級的基礎上,要求讀取資料a時必須加s鎖,直到事務結束了才能釋放s鎖。防止讀取時修改,可解決丟失修改和讀髒資料問題,還進一步防止了不可重複的問題,因為讀a時,其它事務不能對a加x鎖,從而避免了在讀的期間資料發生改變。

兩段鎖協議

兩段鎖協議是指每個事務的執行可以分為兩個階段:生長階段和衰退階段。

兩段封鎖法可以這樣來實現:

事務開始後就處於加鎖階段,一直到執行rollback和commit之前都是加鎖階段。

rollback和commit使事務進入解鎖階段,即在rollback和commit模組中dbms釋放所有封鎖。

4、關聯式資料庫設計理論

函式依賴

記a—>b表示a函式決定b,也可以說b函式依賴於a。

若是關係的乙個或多個屬性的集合,該集合函式決定了關係的其它所有屬性並且是最小的,那麼該集合就稱為鍵碼。

對於a—>b,如果能找到a的真子集a『,使得a『—>b,那麼a—>b就是部分函式依賴,否則就是完全函式依賴。

對於a—>b,b—>c,則a—>c是乙個傳遞函式依賴。

異常

不符合正規化的關係,會產生很多異常,主要有以下四種異常:

冗餘資料:例如學生-2出現了兩次。

修改異常:修改了乙個記錄中的資訊,但是另乙個記錄中相同的資訊卻沒有被修改。

刪除異常:刪除乙個資訊,那麼也會丟失其他資訊。例如刪除了課程-1需要刪除第一行和第三行,那麼學生-1的資訊就會丟失。

插入異常:例如想要插入乙個學生的資訊,如果這個學生還沒選課,那麼就無法插入。

正規化

正規化理論是為了解決以上提到四種異常。高階別正規化的依賴於低階別的正規化,1nf是最低級別的正規化。

第一正規化(1nf)

屬性不可分。即資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。

第二正規化(2nf)

每個非主屬性完全函式依賴於鍵碼。可以通過分解來滿足2nf。

分解前:

以下學生課程關係中,為鍵碼,有如下函式依賴:

sno->sname,sdept

sdept->mname

sno,cname->grade

函式依賴狀況分析:

grade完全函式依賴於鍵碼,它沒有任何冗餘資料,每個學生的每門課都有特定的成績。

sname,sdept和mname都部分依賴於鍵碼,當乙個學生選修了多門課時,這些資料就會出現多次,造成大量冗餘資料。

分解後:

關係-1:

巴斯-科德正規化(bcnf)

在3nf基礎上,任何非主屬性不能對主鍵子集依賴。

巴斯-科德正規化是第三正規化的乙個子集,即滿足巴斯-科德正規化必須滿足第三正規化。通常情況下,巴斯-科德正規化被認為沒有新的設計規範加入,只是對第二正規化與第三正規化中設計規範要求更強,因而被認為是修正第三正規化,也就是說,它事實上是對第三正規化的修正,使資料冗餘度更小。這也是bcnf不被稱為第四正規化的原因。某些書上,根據正規化要求的遞增性將其稱之為第四正規化是不規範,也是更讓人不容易理解的地方。而真生的第四正規化,則是在設計規範中新增了對多值及依賴的要求。

複試 資料庫

1 觸發器的作用?答 觸發器是一種特殊的儲存過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護資料的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某錶上的觸發器上包含對另乙個表的資料操作,而該操作又會導致該錶觸發器被觸發。2 什麼是儲存過程?用什麼...

資料庫複試

dba職責 決定資料庫中的資訊內容和結構 決定資料庫的訪問結構和訪問策略 定義資料庫的安全性要求和完整性約束條件 監控資料庫的使用和執行 資料庫的改進和重組重構。sql語言特點 綜合統一,高度非過程化,面向集合的操作方式,以同一種語法結構提供多種使用方式,語言簡潔 易學易用。sql語言資料定義功能 ...

東北大學 考研複試 資料庫 2023年

為了提高資料庫的安全性,資料庫管理系統提供了 等安全描施。至少寫三種。查詢優化的優化原則有 資料庫系統的 模式結構指的是 在進行事務併發操作的時候,有可能會產生的三類資料不一致情況是 如果乙個關係模式r滿足1nf,並且關係的每個決定因子都是候選碼,那麼r至少是 正規化。1 資料庫如何保證安全性。2 ...