事務隔離級別導致鎖級別的不同

2021-05-10 14:32:26 字數 1803 閱讀 9017

mysql支援4種事務隔離級別,他們分別是: read-uncommitted, read-committed, repeatable-read, serializable.

如沒有指定,mysql預設採用的是repeatable-read

oracle預設的是read-committed

mysql在repeatable-read和read-committed在某些情況下會表現出不同的鎖級別,下面舉例說明。

首先建立測試表

這時候你會發現,#session2 一直等待,直到#session1 commit之後,#session2才會返回,但是如果f_content存在索引,則會立即返回結果。這些是基於repeatable-read的測試,在read-committed的情況下則表現和oracle一樣,update會立即完成並返回結果。

總結:mysql 在innodb等事務引擎的情況下,如果沒有特殊要求,可以將預設的事務隔離級別設定為 read-committed

或者開啟 innodb_locks_unsafe_for_binlog

transaction_isolation = read-committed

innodb_locks_unsafe_for_binlog=on

另外,涉及到的條件更新盡量建索引,這樣一來對主鍵的選擇就要嚴格控制,以便充分利用好寶貴的記憶體資源,因為innodb採用的是cluster index,其他索引都會帶上它。

tag:mysql

mysql

事務隔離級別的理解

資料庫事務的隔離級別有4種,由低到高分別為read uncommitted read committed repeatable read serializable 而且,在事務的併發操作中可能會出現髒讀,不可重複讀,幻讀。下面通過事例一一闡述它們的概念與聯絡。read uncommitted 讀未提...

SQLserver鎖和事務隔離級別的比較與使用

來自 物件 鎖 每條sql 語句 隔離 事務 鎖 併發問題 丟失更新 未確認的讀取 髒讀 不一致的分析 非重複讀 多次讀取相同的資料 行 不一致 其他使用者更改update 幻像讀 多次讀取有不存在和新增的資料 其他使用者插入insert 或刪除delete 隔離級別 隔離級別 髒讀 不可重複讀取 ...

SQLserver鎖和事務隔離級別的比較與使用

物件 鎖 每條sql 語句 隔離 事務鎖 併發問題 丟失更新 未確認的讀取 髒讀 不一致的分析 非重複讀 多次讀取相同的資料 行 不一致 其他使用者更改update 幻像讀 多次讀取有不存在和新增的資料 其他使用者插入insert 或刪除delete 隔離級別 隔離級別 髒讀 不可重複讀取 幻像 說...