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 隔離級別 隔離級別 髒讀 不可重複讀取 幻像 說...