資料庫事務及實現

2021-09-14 01:52:23 字數 4201 閱讀 5243

一、事務

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

mysql 預設採用自動提交模式。也就是說,如果不顯式使用start transaction語句來開始乙個事務,那麼每個查詢都會被當做乙個事務自動提交。

acid

1. 原子性(atomicity)

事務被視為不可分割的最小單元,事務的所有操作要麼全部提交成功,要麼全部失敗回滾。

回滾可以用回滾日誌來實現,回滾日誌記錄著事務所執行的修改操作,在回滾時反向執行這些修改操作即可。

2. 一致性(consistency)

在事務執行前後資料庫的完整性約束沒有被破壞。

應用系統從乙個正確的狀態到另乙個正確的狀態,滿足某種約束條件。例如銀行轉賬系統,每次轉賬結束後,總錢數是一致的。

3. 隔離性(isolation)

乙個事務所做的修改在最終提交以前,對其它事務是不可見的。

4. 永續性(durability)

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

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

二、併發一致性問題(四種)

丟失修改

t1 和 t2 兩個事務都對乙個資料進行修改,t1先修改,t2 隨後修改t2 的修改覆蓋了 t1 的修改

讀髒資料

t1 修改乙個資料,t2 隨後讀取這個資料。如果 t1撤銷了這次修改,那麼 t2 讀取的資料是髒資料

不可重複讀

t2 讀取乙個資料,t1 對該資料做了修改。如果 t2再次讀取這個資料,此時讀取的結果和第一次讀取的結果不同。(避免不可重複讀需要鎖行就行)

幻影讀t1 讀取某個範圍的資料,t2在這個範圍內插入新的資料,t1再次讀取這個範圍的資料,此時讀取的結果和第一次讀取的結果不同。(避免幻影讀則需要鎖表

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

三、事務的隔離級別

未提交讀(read uncommitted)

事務中的修改,即使沒有提交,對其它事務也是可見的。

處理了丟失修改

提交讀(read committed)

乙個事務只能讀取已經提交的事務所做的修改。換句話說,乙個事務所做的修改在提交之前對其它事務是不可見的。

處理了丟失修改髒讀

可重複讀(repeatable read)

保證在同乙個事務中多次讀取同樣資料的結果是一樣的。

處理了丟失修改髒讀不可重複讀

可序列化(serializable)

強制事務序列執行。

處理了丟失修改髒讀不可重複讀幻影讀

四、封鎖

mysql 中提供了兩種封鎖粒度:行級鎖以及表級鎖行級鎖只在儲存引擎層實現。

每種mysql儲存引擎都可以實現自己的鎖策略和鎖粒度。

應該盡量只鎖定需要修改的那部分資料,而不是所有的資源。鎖定的資料量越少,發生鎖爭用的可能就越小,系統的併發程度就越高。

但是加鎖需要消耗資源,鎖的各種操作(包括獲取鎖、釋放鎖、以及檢查鎖狀態)都會增加系統開銷。因此封鎖粒度越小,系統開銷就越大。

在選擇封鎖粒度時,需要在鎖開銷和併發程度之間做乙個權衡。

4.1 封鎖型別

讀寫鎖

意向鎖

注意:ix/is 都是表鎖,用來表示乙個事務想要在表中的某個資料行上加 x 鎖或 s 鎖。

4.2 封鎖協議

4.2.1 **封鎖協議

一級封鎖協議

事務 t 要修改資料a 時必須加 x 鎖直到 t 結束才釋放鎖

可以解決丟失修改問題,因為不能同時有兩個事務對同乙個資料進行修改,那麼事務的修改就不會被覆蓋。

二級封鎖協議

一級的基礎上,要求讀取資料a 時必須加 s 鎖讀取完馬上釋放 s 鎖

可以解決讀髒資料問題,因為如果乙個事務在對資料 a 進行修改,根據 1 級封鎖協議,會加 x 鎖,那麼就不能再加 s 鎖了,也就是不會讀入資料。

**封鎖協議

二級的基礎上,要求讀取資料a 時必須加 s 鎖直到事務結束了才能釋放 s 鎖

可以解決不可重複讀的問題,因為讀 a 時,其它事務不能對 a 加 x 鎖,從而避免了在讀的期間資料發生改變。

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

高階別正規化的依賴於低階別的正規化。

1. 第一正規化 (1nf)

屬性不可分。

2. 第二正規化 (2nf)

在一正規化的基礎上,每個非主屬性完全函式依賴於鍵碼。

部分函式依賴是屬性只依賴於鍵碼中的一部分。

3. 第三正規化 (3nf)

在二正規化的基礎上,非主屬性不傳遞函式依賴於鍵碼。

參考自cs-notes

資料庫事務及隔離級別

1資料庫四大特性 資料庫具有事務安全性,同時也具有acid四大特性 原子性 一致性 隔離性 永續性 原子性 atomicity 原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,這和前面兩篇部落格介紹事務的功能是一樣的概念,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能...

資料庫事務及隔離級別

1 原子性 atomicity 事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程 錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。2 一致性 consistency 事務開始前和...

資料庫事務及隔離級別

a.概念 b.操作 c.測試 建立賬戶表 create table account id int primary keyauto increment name varchar 10 money double 新增資料 insert into account name,money values zha...