MySQL的四種事務隔離級別

MySQL的四種事務隔離級別

注:http://www.cnblogs.com/huanongying/p/7021555.html

事務名稱 A事務 B事務
讀未提交 修改未提交事務 生效
不可重複讀 修改提交事務 生效
可重複讀 修改提交事務 未生效
串行化 B有查詢則A不能修改 ------
  1. 事務的基本要素(ACID)----- 原子性、一致性、隔離性、持久性
  2. 事務的併發問題 ----- 髒讀、不可重複讀、幻讀
  3. 事務隔離級別 -----讀未提交(read-uncommitted)、不可重複讀(read-committed)、可重複讀(repeatable-read)、串行化(serializable)
	--查看當前回話事務級別
	select @@tx_isolation
	--設置當前回話事務級別 
	set session transaction isolation level serializable
	--開始事務
	start transaction
	--提交事務
	COMMIT
	--回滾事務
	ROLLBACK

注意:

  1. 不可重複讀的和幻讀很容易混淆,不可重複讀側重於修改,幻讀側重於新增或刪除。解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表

  2. 可重複讀的隔離級別下使用了MVCC機制,select操作不會更新版本號,是快照讀(歷史版本);insert、update和delete會更新版本號,是當前讀(當前版本)。

  3. 不同事務對錶和行的影響

  • 事務隔離級別爲讀提交時,寫數據只會鎖住相應的行
  • 事務隔離級別爲可重複讀時,如果檢索條件有索引(包括主鍵索引) 的時候,默認加鎖方式是next-key 鎖;如果檢索條件沒有索引,更新數據時會鎖住整張表。一個間隙被事務加了鎖,其他事務是不能在這個間隙插入記錄的,這樣可以防止幻讀。
  • 事務隔離級別爲串行化時,讀寫數據都會鎖住整張表
  1. 隔離級別越高,越能保證數據的完整性和一致性,但是對併發性能的影響也越大
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章