MySql的事務隔離級別

2021-09-12 01:54:16 字數 786 閱讀 8030

了解事務隔離級別之前先要了解高併發環境下的幾個概念:

1.髒讀:事務a讀取了事務b更新的資料,然後b執行回滾操作,那麼a讀到的就是髒資料。

2.不可重複讀:事務a多次讀取同乙個資料,事務b在事務a多次讀取的過程中,對資料做了更新並提交,導致事務a多次讀取同乙個資料時,結果不一致。

3.幻讀:比如事務a將所有成績從具體分數改為了abcde等級,但是事務b在這個時候插入了一條具體的分數,最後事務a結束後發現還有一條記錄沒改過來,好像發生了幻覺。抽象來說是事務a在操作的過程中插入了事務b的操作。

不可重複讀側重於修改,幻讀側重於新增或者刪除。解決不可重複讀只需要鎖住滿足條件的行,解決幻讀需要鎖表。

mysql的事務隔離級別就是來解決這個問題的

髒讀 不可重複讀 幻讀

讀未提交 是 是 是

讀已提交 否 是 是

可重複讀 否 否 是

序列化 否 否 否

讀未提交,連髒讀也避免不了,事務a可以讀到事務b更新但還未提交的資料。

讀已提交,可以解決髒讀的問題,但是如果此時另乙個事務修改了資料,就會造成不可重複讀的問題。

可重複讀,解決了髒讀和不可重複讀的問題,用的比較多。

序列化,解決了所有問題,但是是表鎖,高併發下效能非常差,在實際開發中很少用到。

讀提交時寫操作會鎖住行

可重複讀時,當檢索條件有索引時,包括主鍵索引,預設加鎖方式是next-key,如果沒有索引,更新資料時會鎖住整張表。、

乙個間隙被事務加了鎖,其他事務是不能在這個間隙插入記錄的,這樣可以防止幻讀。

序列化時讀寫資料都會鎖住整張表

mysql隔離級別 MySQL 事務隔離級別

mysql innodb所提供的事務滿足acid的要求,事務是通過事務日誌中的redo log和undo log來實現原子性 undo log 一致性 undo log 永續性 redo log 事務通過鎖機制實現隔離性。1 事務隔離級別與實現read uncommitted 讀未提交 read c...

mysql事務隔離級別詳解 事務的隔離級別詳解

事務的隔離級別 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。問題的提出 資料庫是要被廣大客戶所共享訪問的,那麼在資料庫操作過程中很可能出現以下幾種不確定情況。更新丟失 兩個事務都同時更新一行資料,乙個事務對資料的更新把另乙個事務對資料的更新覆蓋了。這是因為系統沒有執行任何的...

MySQL事務隔離級別

sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的 併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...