資料庫事務和事務隔離級別

2021-07-31 23:06:34 字數 2052 閱讀 4340

事務的定義很簡單,就是一組操作,這些操作要麼都執行,要麼都不執行,這一組操作是不可分割的.在資料庫中,事務具有acid特性.也就是原子性(atomicity)一致性(consistency)隔離性(isolation)永續性(durability).

原子性是指事務是乙個不可分割的一組操作,要麼都發生,要麼都不發生.這裡常見的例子就是銀行轉賬的例子:

若a賬戶需要給b賬戶轉100元錢,那麼分別有兩個操作,a賬戶扣除100元錢,b賬戶增加100元錢,這兩個操作就不可分割.

一致性是指在事務開始之前和事務結束之後,資料庫的完整性約束沒有被破壞.

還是用轉賬的例子,比如a賬戶和b賬戶加起來總共有1000元錢,那麼a和b之前不管怎麼轉賬,最終a和b兩個賬戶加起來的錢還是1000.

多個事務併發執行的時候,事務之間是隔離的,乙個事務不應該影響其它事務執行的結果.

然而隔離是有級別的,不同的隔離等級造成的情況也不相同.下面將會介紹到.

永續性意味著在事務完成後,該事務對資料庫做的更改便會存於資料庫中,即使出現斷電等事故,事務一旦提交,資料就持久化在資料庫中.

事務的隔離級別分為四個等級,不同等級會出現的問題也不一樣,如下表:

種類髒讀

不可重複讀

幻讀read uncommitted√√

√read committed×√

√repeatable read××

√serializable××

× 我們來看一下這幾種事務隔離級別:

read uncommitted(讀未提交):處在這種事務隔離等級時,當乙個事務去讀取資料時,可以讀取其他事務還未提交的資料.舉個例子:

事務a去讀取一行資料,這時事務b將這行資料進行了更改(但是事務b沒有提交),事務a將資料讀出展示,事務b回滾了,這時,事務a讀取出來的資料其實是不對的,這也就是我們所謂的髒讀.

read committed(讀提交):這種事務隔離等級也是資料庫預設的事務隔離等級(mysql不是,mysql的事務隔離等級預設是repeatable read).這種事務等級就是會讀取其他事務已經提交的資料,舉個例子:

事務a去讀取一行資料(讀兩遍),第一遍讀取的時候,事務b將這行資料進行了更改(但是事務b沒有提交),因為事務隔離等級處在read cmooitted,所以事務a讀取的資料不會受事務b的影響,然後事務第二遍去讀這個資料,這個時候,事務b已經提交了,所以第二遍事務a讀取的資料是事務b已經更改了的資料,所以造成的結果是事務a第一遍讀的資料和第二遍讀的資料不一樣,這就是我們所謂的不可重複讀.

repeatable read(重複讀):這種等級是可以避免不可重複讀的,但是無法避免幻讀,舉個例子:

事務a去修改所有資料的乙個字段,這時,事務b向表中插入了一條新的記錄,事務a提交之後會發現,明明更新了所有資料,但是有一條記錄就沒有更新,這就是所謂的幻讀.

serializable(序列):這種等級可以避免上述所有的情況.

我們來簡單的思考一下,資料庫是如何實現這些事務隔離級別的,為了避免多個事務對同一條記錄的操作,一般我們首先想到的就是可能是通過鎖實現的.

read uncommited:這種方式應該不會加任何鎖.

read commited:這種方式可以避免髒讀,那應該是對所讀的資料加鎖了,但是又會出現不可重複讀,所以應該是在事務中,讀資料時會加鎖,而讀完鎖就釋放.

repeatable read:這種方式不僅避免髒讀,還避免了不可重複讀,所以應該是讀資料時加鎖,並且這個鎖是到事務結束時才會釋放.

serializable:這種方法避免了幻讀,所以猜測可能不僅僅是對自己所操作的資料都加鎖,可能還會鎖定乙個範圍,比如將整個表鎖住.

資料庫事務和隔離級別

1 事務是乙個邏輯單元內的一系列操作。2 事務分兩種 讀取事務 select 修改事務 insert update 原子性 atomicity 事務內的所有操作,要麼全部成功,要麼全部失敗回滾 不能對資料庫有任何影響 一致性 consistency 事務前後,資料的完整性必須保持一致 隔離性 iso...

資料庫事務和隔離級別

事務的四大特性包括原子性 一致性 隔離性 永續性。事務的併發問題 sql標準定義了四種隔離級別,由低到高,分別是 讀未提交 read uncommitted 讀提交 read committed 可重複讀 repeatable read 序列化 serializable 事務隔離級別是為了解決事務併...

資料庫事務和隔離級別

事務的四大特性包括原子性 一致性 隔離性 永續性。事務的併發問題 sql標準定義了四種隔離級別,由低到高,分別是 讀未提交 read uncommitted 讀提交 read committed 可重複讀 repeatable read 序列化 serializable 事務隔離級別是為了解決事務併...