MySQLInnoDB引擎事物隔離級別RC和RR

說到mysql的事物就會想到事物的特性ACID:mysql

  1. 原子性
  2. 一致性
  3. 隔離新
  4. 持久性

我這裏針對mysqlinnodb存儲引擎來講算法

mysql的隔離性其實是經過lock來實現的,其餘三條是經過redo,undo機制來實現sql

mysql中lock的類型併發

  1. 共享鎖(容許事物讀取一行數據)
  2. 排他鎖(容許事物讀取或更新一行數據)
  3. 意向鎖 (表級別的鎖定)

RC和RR的區別code

在默認狀況下mysql存儲引擎默認使用的是一致性非鎖定讀操做innodb

若是讀取的行正在執行DELETE、UPDATE操做,這時讀取操做不會所以等待行上鎖的釋放,而是會讀取當前行的快照版本。可是讀取快照的方式在不一樣隔離級別下方式是不同的。***RC下讀取的是行最新快照版本,RR模式下讀取的是事物開始時候的行數據版本。***所以在RC模式下會產生不可重複讀和幻讀。所以RR支持MVVC(多版本併發控制)而RC不支持MVVC。技術

鎖算法的實現數據

  1. Recort Lock (單個行記錄上的鎖)
  2. Gap Lock (間隙所,鎖定一個範圍,單不包含記錄自己)
  3. Netx-Key Lock (鎖定一個範圍,並鎖定記錄自己)

InnoDB對於行的查詢都是採用這種Netx-Key Lock算法。對於不一樣的SQL查詢,可能設置爲分爲共享Netx-Key Lock和排他Netx-Key Lock。查詢

參考db

  • MySQL技術內幕
相關文章
相關標籤/搜索