Mysql 事務隔離級別

2021-07-09 20:29:19 字數 1155 閱讀 8989

事務隔離級別

隔離級別             資料一致性          髒讀    不可重複讀    幻讀

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 的資料庫系統,必需要具有這四種特性,否...