數據庫 事務級別介紹

數據庫 事務級別介紹
2個概念:事務,鎖。

事務:邏輯單元內的一系列操作,要麼全部完成執行,要麼全部不執行。

鎖:將某數據的操作加鎖,則其他人無法獲取當前數據的當前操作。避免單位時間內的數據覆蓋,影響數據的一致性。

事務是多個操作的執行邏輯與的集合。事務內控制加鎖,實現不同的級別。事務內的鎖,需等事務結束才能釋放鎖。不加事務的鎖,操作完即釋放鎖。

三操作:
讀,rade -R
寫,write -W
增,add -A

鎖分類:鎖住操作,避免其他人獲取。
寫操作枷鎖 排它鎖 X 鎖
讀操作加鎖 共享鎖 S 鎖。
(X鎖與S鎖無法共存,一個數據即只能取一種鎖)

事務級別:
Read Uncommitted –1個事務,1個X鎖,即對寫數據枷鎖。讀無鎖。
對寫枷鎖,避免了數據的覆蓋,丟失。但是事務內可讀,存在讀取未提交或回滾的數據,出現髒數據。 該級別是數據庫最低級別。

Read Committed –1個事務,2個鎖。事務內X鎖。
讀寫的枷鎖,避免了數據丟失與髒數據。若是在多數據單元處理時,一條記錄加事務,未加事務的記錄,因可做寫操作,不能重複讀。否則數據前後讀取不一致。

Repeatable read —2個事務,2個鎖。
避免了數據的丟失,髒,以及不可重複讀情況。但是在事務內操作的情況下,數據庫增加記錄不可控,即會出現符合是事務內搜索條件的記錄,但是不添加進事務。事務執行完,即有滿足條件爲修改的數據,爲幻讀。

Serializable 串行化。即不可並行操作數據庫。
避免上述問題,但是影響數據庫的效率。

延伸:MVCC 多版本控制—multi-Version current control
MySql數據庫中實現

讀操作不加鎖情況下實現可重複讀。

對數據庫記錄增加 事務ID 與回滾指正字段
這裏寫圖片描述
事務ID 遞增。
每次讀取操作是,增加一個 read view 的數據結構,控制數據的版本信息。
read view 中包含 當前事務列表,Tmin Tmax .

通過事務ID 來實現數據的可見性。只有在上次提交後 本次事務前的數據記錄可見。即事務內的一次讀取的數據在被修改後,二次讀取的還是事務前的記錄數據。
這裏寫圖片描述 詳情見 劉欣 碼農翻身公衆號 數據庫旺財與小強。