事務隔離級別
隔離級別 資料一致性 髒讀 不可重複讀 幻讀
read uncommitted 不能 是 是 是
read committed 語句級別一致 否 是 是
repeated read 事務級別一致 否 否 是
serializable 最高端別,事務級 否 否 否
併發事務帶來問題
不可重複讀的重點是:修改: 同樣的條件, 你讀取過的資料, 再次讀取出來發現值不一樣了
幻讀的重點在於:新增或者刪除同樣的條件, 第1次和第2次讀出來的記錄數不一樣
從鎖的角度來看, 兩者的區別就比較大:
對於前者, 只需要鎖住滿足條件的記錄
對於後者, 要鎖住滿足條件及其相近的記錄
innodb 幻讀問題:
innodb事務 預設是repeated read,read是不加任何鎖的,通過多版本控制來保障沒有髒讀, 不可重複讀,資料一致性。 insert,update,modify加記錄排他鎖。
解決幻讀問題需要 使用next-lock。
record-lock:對索引項加鎖
gap-lock:間隙鎖,鎖定範圍
next-lock:前兩種的組合,對記錄和間隙加鎖。
如果不加next-lock會出現的幻讀問題:
乙個事務中有兩條search操作,另乙個事務delete掉第乙個事務search到的記錄項,並commit,則第乙個事務會出現兩次search結果集不一致的情況。
所以需要用:
`(共享鎖):select * from table where … lock in shared mode;
`select * from table where key特例:
乙個事務,select * from table where … for update沒有記錄,另乙個search… for update也沒有時,是不會鎖住的,當時兩個事務insert都會等鎖。
mysql隔離級別 MySQL 事務隔離級別
mysql innodb所提供的事務滿足acid的要求,事務是通過事務日誌中的redo log和undo log來實現原子性 undo log 一致性 undo log 永續性 redo log 事務通過鎖機制實現隔離性。1 事務隔離級別與實現read uncommitted 讀未提交 read c...
MySQL事務隔離級別
sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的 併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...
Mysql 事務隔離級別
mysql 5.5預設儲存引擎 表型別 使用的是innodb,它是支援acid特性的 acid,指資料庫的原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 乙個支援事務 transaction 的資料庫系統,必需要具有這四種特性,否...