Mysql事務以及加鎖機制

2022-04-08 18:52:59 字數 1362 閱讀 4004

事務的特徵acid,即原子性、一致性、隔離性、永續性。

原子性保證乙個事務為乙個最小的單元,內部不可分割;

一致性保證事務中的每個操作執行緒不可單獨提交,成功則一起提交,不成功則事務回滾;

隔離性保證不同事務間看到的資料檢視相互獨立,相互隔離(隔離級別可設定);

永續性保證事務提交後資料會持久的儲存下來;

sql規範定義的事務的隔離級別:

1.read uncommitted(讀取未提交內容)

所有事務可以看到未提交事務的執行結果,本隔離級別很少用到實際應用中,讀取未提交的資料,又稱為「髒讀」。

2.read committed(讀取提交內容)

大多數資料庫的預設隔離級別是此級別,但不是mysql預設的。乙個事務在開始的時候只能看見已提交事務所做的改變。乙個事務從開始到提交前所做的任何改變都是不可見的,除非提交。這種隔離級別也稱為不可重複讀。

3.repeatable read(可重複讀)

此隔離級別是為了解決可重複讀隔離級別導致的問題即乙個事務多個例項併發讀取資料時會看到不同的結果。此隔離級別不會看到其他事務提交後的結果,即事務即使提交了我也看不到。此級別也稱為「幻讀」。

4.serializable(可序列化)

可序列化是最高的隔離級別,它通過強制事務排序,使之不可重讀,解決了幻讀的問題。此隔離級別會在每個讀的資料行上加共享鎖,使用這種隔離級別會產生大量的超時現象,一般實際開發中不會用到。

mysql加鎖機制 :

根據型別可分為共享鎖(shared lock)和排他鎖(exclusive lock)或者叫讀鎖(read lock)和寫鎖(write lock)。

根據粒度劃分又分表鎖和行鎖。表鎖由資料庫伺服器實現,行鎖由儲存引擎實現。

mysql提供了3種事務型儲存引擎,inndb、ndb cluster和falcon。

乙個事務執行的任何過程中都可以獲得鎖,但是只有事務提交或回滾的時候才釋放這些鎖。這些都是隱式鎖定,也可以顯式鎖定,innodb支援顯式鎖定,例如:

select .... lock in share mode (加共享鎖)

select .....for update(加排他鎖)

多版本併發控制(重要):

mysql的事務儲存引擎不是簡單實用行加鎖機制,而是叫多版本併發控制(mvcc)技術,和行加鎖機制關聯實用。以便應對更高的併發,當然是以消耗效能作為代價。

每種儲存引擎對mvcc的實現方式不同,innodb引擎的簡單實現方式如下:

innodb通過為每個資料航增加兩個隱含值的方式來實現。這兩個隱含值記錄了行的建立時間,以及過期時間。每一行儲存事件發生時的系統版本號。每一次開始乙個新事務時版本號會自動加1,每個事務都會儲存開始時的版本號,每個查詢根據事務的版本號來查詢結果。  

作者 lhc1986

原子操作以及加鎖機制

一 原子操作 不可被中斷的乙個或一系列操作。二 處理器如何實現原子操作 32位處理器使用基於對快取加鎖或匯流排加鎖的方式來實現多處理器之間的原子操作 1 匯流排鎖 使用處理器提供乙個lock 訊號,當乙個處理器在匯流排上輸出此訊號的時候,其他處理器的請求將被阻塞,那麼該處理器可以獨佔使用共享記憶體。...

mysql事務機制 Mysql事務機制

mysql事務是指將資料庫從一種一致性狀態轉到另一種一致性狀態 mysql事務具有acid特性 原子性 atomicity 事務中的所有操作,要麼全部執行,要麼都不執行 一致性 consistency 事務開始和結束後,資料庫的完整性不會被破壞 隔離性 isolation 事務之間互不影響。事務的隔...

Mysql事務隔離級別加鎖

rc 快照讀 不加鎖,可以讀到所有已經提交的記錄,不管事務序號 當前讀select 不加鎖 當前讀update delete insert 加x鎖 rr快照讀 不加鎖 只能讀到在開啟事務前已經提交的記錄 當前讀select 加s鎖 當前讀update delete insert 加x鎖 範圍索引的話...