MySQL事務隔離級別

2021-10-14 15:25:20 字數 994 閱讀 5372

mysql資料庫innodb儲存引擎的事務完全符合事務acid的特性。

當 多個事務同時訪問同一快取頁中的的同一批資料時,會出現一系列問題

髒讀:事務a讀取到了事務b未提交的資料,事務b回滾,事務a讀取到的資料就是髒資料

不可重複讀:事務a多次讀取同一資料,期間事務b對資料進行了修改,事務a再次讀取時,發現讀取到的資料與一開始不一致

幻讀:事務a查詢id>1的資料,只查到了1條,期間事務b向表中插入了一條id=2的資料,事務a再次以相同條件查詢時,發現有2條資料,多了一行,多的一行官網稱為「幻行」,這種現象稱為幻讀

sql標準中定義了如下事務隔離級別

隔離級別

髒讀不可重複讀

幻讀讀未提交(read uncommitted)√√

√讀已提交 ( read committed )x√

√可重複讀 ( repeatable read)xx

√序列化 ( serialiable)xx

x在 mysql 中同樣實現了上述的4個隔離級別,但是在 可重複讀級別不會發生幻讀的情況。

啟用兩個客戶端a,b

設定兩個客戶端的事務隔離級別為 read uncommited

看如下1-5順序執行,事務a讀取到了事務b未提交的資料。導致髒讀

設定兩個客戶端的事務隔離級別為 read uncommited

下圖按1-7步驟執行,事務a讀取到了事務b已提交的資料。導致兩次讀取id=1的資料不一致,造成不可重複讀

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