資料庫事務級別

2021-09-24 19:55:18 字數 1350 閱讀 2046

1. 地球人都知道的,但往往你就不能說出口,所以事務的相關概念還是有必要提一下

事務特性(acid特性)

事務隔離級別

由弱到強分別是:read_uncommitted、read_committed、repeatable_read和serializable

ps:mysql的預設事務隔離級別是repeatable_read,oracle、sql server、db2和postgresql的預設事務隔離級別是read_commited。

2. 事務到底是做什麼的呢?下表是這四種事務隔離級別對髒讀、不可重複讀和幻讀的支援情況:

隔離級別

丟失更新

髒讀(dirty read)

不可重複讀

(non-repeatable read)

覆蓋更新

幻讀(phantom read)

read_uncommited

允許允許

允許允許

允許read_commited

不允許不允許

允許允許

允許repeatable_read

不允許不允許

不允許不允許

允許serializble

不允許不允許

不允許不允許

不允許 資料庫併發問題可以歸結為下面幾類:

3.這幾種事務級別到底是怎麼工作的呢?

1)serializable:

新增範圍鎖(比如表鎖,頁鎖等),直到transaction a結束。以此阻止其它transaction b對此範圍內的insert,update等操作。

幻讀,髒讀,不可重複讀等問題都不會發生。

2)repeatable read(可重複讀)

對於讀出的記錄,新增共享鎖直到transaction a結束。其它transaction b對這個記錄的試圖修改會一直等待直到transaction a結束。

可能發生的問題:當執行乙個範圍查詢時,可能會發生幻讀。

3)read committed(提交讀)

在transaction a中讀取資料時對記錄新增共享鎖,但讀取結束立即釋放。其它transaction b對這個記錄的試圖修改會一直等待直到a中的讀取過程結束,而不需要整個transaction a的結束。所以,在transaction a的不同階段對同一記錄的讀取結果可能是不同的。

可能發生的問題:不可重複讀。

4)read uncommitted(未提交讀)

不新增共享鎖。在transaction a中可以讀取到transaction b(未提交)中修改的資料。比如transaction b對r記錄修改了,但未提交。此時,在transaction a中讀取r記錄,讀出的是被b修改過的資料。

可能發生的問題:髒讀。

資料庫事務級別

併發導致資料出現的問題 1.髒讀 drity read 釋義 已知有兩個事務a和b,a讀取了已經被b更新但還沒有被提交的資料,之後,b回滾事務,a讀取的資料就是髒資料。注 即事務b讀取了事務a在記憶體中修改的資料 未提交寫入資料庫的磁碟 即read uncommitted 讀未提交隔離機制 即可發生...

資料庫事務隔離級別

資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable,這四個級別可以逐個解決髒讀 不可重複讀 幻讀這幾類問題。可能出現 不會出現 髒讀不可重複讀 幻讀read uncommitted rea...

資料庫事務的級別

1.read uncommitted 髒讀 讀取正在提交的資料 read uncommitted 又稱讀取未提交內容 允許任務讀取資料庫中未提交的資料更改。測試指令碼 建立表 create table dbo testtb id int null,name char 20 null 2.建立 事務a...