併發之事務隔離

2021-07-08 13:47:55 字數 1944 閱讀 8349

資料庫帶來的併發問題包括:

(1)丟失更新

(2)髒讀

(3)非重複讀

(4)覆蓋更新

(5)幻象讀

撤銷乙個事務時,把其他事務已提交的更新資料覆蓋(a和

b事務併發執行,

a事務執行更新後,提交;

b事務在

a事務更新後,

b事務結束前也做了對該行資料的更新操作,然後回滾,則兩次更新操作都丟失了)。

乙個事務讀到另乙個事務未提交的更新資料(a和b事務併發執行,b事務執行更新後,a事務查詢b事務沒有提交的資料,b事務回滾,則a事務得到的資料不是資料庫中的真實資料。也就是髒資料,即和資料庫中不一致的資料)

。乙個事務讀到另乙個事務已提交的更新資料(a和b事務併發執行,a事務查詢資料,然後b事務更新該資料,a再次查詢該資料時,發現該資料變化了)。

這是不可重複讀中的特例,乙個事務覆蓋另乙個事務已提交的更新資料(即a事務更新資料,然後b事務更新該資料,a事務查詢發現自己更新的資料變了)。

乙個事務讀到另乙個事務已提交的新插入的資料(a和b事務併發執行,a事務查詢資料,b事務插入或者刪除資料,a事務再次查詢發現結果集中有以前沒有的資料或者以前有的資料消失了)。

(1)serializable

(序列化):乙個事務在執行過程中完全看不到其他事務對資料庫所做的更新(事務執行的時候不允許別的事務併發執行。事務序列化執行,事務只能乙個接著乙個地執行,而不能併發執行。)。

(2)repeatable read

(可重複讀):乙個事務在執行過程中可以看到其他事務已經提交的新插入的記錄,但是不能看到其他其他事務對已有記錄的更新。

(3)read commited

(讀已提交資料):乙個事務在執行過程中可以看到其他事務已經提交的新插入的記錄,而且能看到其他事務已經提交的對已有記錄的更新。

(4)read uncommitted

(讀未提交資料):乙個事務在執行過程中可以看到其他事務沒有提交的新插入的記錄,而且能看到其他事務沒有提交的對已有記錄的更新。

資料庫系統有四個隔離級別(大多數資料庫預設級別為read commited)。對資料庫使用何種隔離級別要審慎分析,因為

(1)維護乙個最高的隔離級別雖然會防止資料的出錯,但是卻導致了並行度的損失,以及導致死鎖出現的可能性增加。

(2)降低隔離級別,卻會引起一些難以發現的bug。

新增範圍鎖(比如表鎖,頁鎖等,關於range lock,我也沒有很深入的研究),直到transaction a結束。以此阻止其它transaction b對此範圍內的insert,update等操作。

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

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

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

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

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

不新增共享鎖。所以其它transaction b可以在transaction a對記錄的讀取過程中修改同一記錄,可能會導致a讀取的資料是乙個被破壞的或者說不完整不正確的資料。

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

可能發生的問題:髒讀。

丟失更新

髒讀非重複讀

覆蓋更新

幻象讀未提交讀ny

yyy已提交讀nn

yyy可重複讀nn

nny序列化nn

nnn

事務那點事之事務隔離

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

事務併發 事務隔離級別

併發問題可歸納為以下幾類 a.丟失更新 撤銷乙個事務時,把其他事務已提交的更新資料覆蓋 a和b事務併發執行,a事務執行更新後,提交 b事務在a事務更新後,b事務結束前也做了對該行資料的更新操作,然後回滾,則兩次更新操作都丟失了 b.髒讀 乙個事務讀到另乙個事務未提交的更新資料 a和b事務併發執行,b...

事務併發 事務隔離級別

併發問題可歸納為以下幾類 a.丟失更新 撤銷乙個事務時,把其他事務已提交的更新資料覆蓋 a和 b事務併發執行,a事務執行更新後,提交 b事務在 a事務更新後,b事務結束前也做了對該行資料的更新操作,然後回滾,則兩次更新操作都丟失了 b.髒讀 乙個事務讀到另乙個事務未提交的更新資料 a和 b事務併發執...