1. 程式人生 > >極客mysql筆記(3)

極客mysql筆記(3)

簡介: 事務隔離知多少
內容
  一 基礎知識
  1 事務特性 ACID
  A 原子性 C 一致性 I 隔離性 D 永續性
  2 並行事務出現的問題
    1 髒讀 讀取了其他事務未提交的資料
     2 不可重複性讀 1 事務內多次查詢的結果不一致 2 可以通過for update or RR模式的MVCC避免這種現象 3 針對的是update/delete操作
     3 幻讀 1 事務內進行了條件資料修改,二次檢視時,發現還有未修改行 2 可以通過gap lock模式避免這種現象 3 針對的是insert操作
  3 mysql隔離級別
   RU 讀未提交 -> 其他事務可以讀取未提交的事務
   RC 讀已提交 -> 其他事務只能讀取已提交的事務 可以避免(髒讀) 不可避免(不可重複性讀和幻讀) 鎖(record lock)
   RR 可重複性讀-> 本事務在事務內多次讀取的事務是一致的,不會產生變化,直到本事務提交 可以避免(髒讀,不可復重複性讀和幻讀) 鎖(record lock+gap lock)
   SE 序列化->事務之前是序列化執行的,包括select
 4 預設隔離級別
  mysql rr級別 oracle rc級別
  oracle應用遷移到mysql的時候要注意
  金融級別的建議使用RR
5 多版本事務控制(MVCC)與undo
  1 利用undo實現,事務在每一次修改資料時,會把修改的資料存入undo表空間裡,同一條記錄在系統中可以存在多個版本,稱為多版本事務控制.undo清理會在事務不在需要的時候清理掉這些原始資料,這樣就實現了可重複性讀
  2 大事務如果不提交釋放,會長期佔據undo空間,由於undo儲存在ibdata裡,會無限導致ibdata增大
  3 mysql5.7會進行undo表空間的獨立,避免ibdata的增大情況