資料庫的事務到鎖

2021-09-29 08:45:50 字數 2189 閱讀 4580

最近複習到了資料庫的內容,查了好多資料,覺得都特別抽象,下面內容除了做一些總結,盡可能舉一些自己嘗試的例子。

是使用者定義的乙個資料庫操作序列,這些操作要麼全做,要麼不做,是乙個不可分割的單位。

例如:在關聯式資料庫中,乙個事務可以是一條sql語句,一組sql語句,或者整個程式。

事務和程式是兩個概念,一般地講,乙個程式中包含若干個事務。

事務是恢復和併發控制的基本單位。

(1)原子性(atomicity)

原子性是指事務包含的所有操作要麼都做,要麼都不做。

(2)一致性(consistency)

乙個事務執行之前和執行之後資料庫都必須處於一致性狀態。一致性和原子性是密切相關的。或者說資料庫從乙個正確的狀態遷移到另乙個正確的狀態。

(3)隔離性(isolation)

乙個事務的執行不能被其他事務干擾。即乙個事務的內部操作及使用的資料對其他併發事務來說是隔離的,併發執行的各個事務      之間不能相互干擾。

(4)永續性(dependency)

乙個事務一旦提交,它對資料庫中資料的改變就應該是永久性的。乙個事務要麼提交,要麼回滾,一旦提交了資料就被改變  了,無法再回滾。

為什麼要併發操作呢?乙個個來不行嗎?

併發是為了提高對資料庫中資料的利用效率。

最簡單地說就像火車購票系統,如果真的每次只能有乙個人對購票系統資料庫進     行訪問等第乙個人操作完之後,第二個才進行,那麼全國所有人買票就是一場噩夢。真實情況是,你剛剛開啟購票系統,顯示     還有一百張票,再點進去可能發現已經沒有票了,這一秒鐘的猶豫裡面,已經有其他使用者對購票系統進行了購票操作,這就是併發。

然而併發操作如果不加以控制就會造成一些意想不到的後果,比如說考慮到下面的例子:

1.(事務t1)阿牛讀出火車票餘額a,設a=10;

2.(事務t2)阿斌讀出火車票餘額a,也為10;

3.阿牛購買一張火車票,修改餘額a--->a-1,所以a=9,把a寫回資料庫。

4.阿斌購買一張火車票,修改餘額a--->a-1,所以a=9,把a寫回資料庫。

結果就是明明賣出了兩張票,資料庫中火車票餘額卻只減少了1.

併發操作會帶來丟失修改、不可重複讀、讀「髒」資料等問題,所以我們需要對併發控制進行管理,即併發控制技術。

鎖就是實現資料庫併發控制的技術

鎖是為了解決併發控制的一系列問題而引入的。

從程式設計師角度來說鎖,可以分為兩類:樂觀鎖和悲觀鎖。

樂觀鎖是一種思想,它其實並不是一種真正的『鎖』。它會先嘗試對資源進行修改,在寫回時根據版本號是否改變來判斷資源是否進行了改變,如果沒有發生改變就會寫回,否則就會進行重試,在整個的執行過程中其實都沒有對資料庫進行加鎖。

悲觀鎖又具體可以分為x鎖(獨佔鎖)、s鎖(讀鎖)。

在介紹各種鎖之前,我先提乙個問題,就是獨佔鎖、讀鎖、表鎖、頁鎖、行鎖到底是什麼關係?

查閱各種資料的時候,初學者很容易被弄懵圈,我先直接放出結論。

答:悲觀鎖(真正的鎖)從型別上可以分為兩種,共享鎖和獨佔鎖,其實就是對應著讀寫兩個操作。

從粒度上可以分為:表鎖(一次鎖定整個表)、頁鎖、行鎖(一次鎖定一行資料)。

所以,表鎖有兩種:共享表鎖、獨佔表鎖。

頁索有兩種:共享頁索、獨佔頁鎖。

行鎖有兩種:共享行鎖、獨佔行鎖。

看起來有點簡單,剛剛開始接觸這些知識的時候還是被弄矇圈了,一堆的鎖,到底什麼關係。

事務的(acid)特性是由關聯式資料庫管理系統(rdbms,資料庫系統)來實現的。資料庫管理系統採用日誌來保證事務的原子性、一致性和永續性。日誌記錄了事務對資料庫所做的更新,如果某個事務在執行過程中發生錯誤,就可以根據日誌,撤銷事務對資料庫已做的更新,使資料庫退回到執行事務前的初始狀態。

資料庫管理系統採用鎖機制來實現事務的隔離性。當多個事務同時更新資料庫中相同的資料時,只允許持有鎖的事務能更新該資料,其他事務必須等待,直到前乙個事務釋放了鎖,其他事務才有機會更新該資料。

待續......

聚簇索引和非聚簇索引的區別?

附上幾篇寫的比較好的部落格:

鎖和隔離級別的關係)

資料庫事務和鎖

事務是作為單個邏輯工作單元執行的一系列操作,乙個邏輯工作單元必須有四個屬性 原子性,一致性,隔離性和永續性 acid 屬性。事務的回滾 將顯式事務或者隱式事務回滾到事務的起始點或者是事務內的儲存點。關於鎖的引入 併發導致的幾種問題 引入鎖既可以在一段時間內禁止使用者做某些操作以免導致產生資料不一致。...

資料庫事務和鎖

鎖 回滾 作為工作單元執行的一系列操作。顯式事務和隱式事務 排它鎖exclusive lock 共享鎖shared lock 更新鎖 相容共享鎖,不相容更新鎖 排它鎖 意向鎖目的 在較高粒度級別有效監測不相容的鎖定請求,防止授予不相容的鎖。架構鎖其他更高階鎖事務之間相互制約的關係就是鎖的相容性。可鎖...

資料庫的事務和鎖

事務 是作為乙個邏輯單元執行的一系列操作,乙個邏輯工作單元必須有四個屬性,稱為 acid 原子性 一致性 隔離性和永續性 屬性.1 a atomicity 原子性 事務必須是原子工作單元 對於其資料修改,要麼全都執行,要麼全都不執行。2 c consistency 一致性 事務在完成時,必須使所有的...