mysql資料庫事務隔離級別分為四個不同層次:
1.讀未提交:乙個事務能夠讀取其他事務未提交的修改資料,這是最低的隔離水平,允許出現髒讀;
髒讀:讀到了別的事務回滾前的髒資料;
髒讀場景:
2.讀已提交:乙個事務能夠讀取其他事務已經提交的修改的資料,髒讀不會出現;但是隔離級別比較低,允許出現不可重複讀和幻讀;
不可重複讀:事務a首先讀取了一條資料,然後執行邏輯的時候,事務b將這條資料改變了,然後事務a再次讀取的時候,發現資料不匹配了,就是所謂的不可重複讀了(針對的是修改操作)。
不可重複讀的場景:
3.可重複讀:除了保證已提交讀級別外,它還保證任何讀取的資料都不能更改,如果事務再次讀取相同的資料,它將找到原先讀取的資料,並且保持不變,可供閱讀。可重複讀隔離級別比較高,允許出現幻讀;這也是mysql innodb引擎的預設隔離級別,但是和一些其他的資料庫不同,可以簡單的認為mysql在可重複讀級別不會出現幻讀;
幻讀:事務a首先根據條件索引得到n條資料,然後事務b改變了這n條資料之外的m條或者增添了m條符合事務a搜尋條件的資料,導致事務a再次搜尋發現有n+m條資料了,就產生了幻讀;
幻讀的場景:
4.序列化:併發事務之間是序列化的,通常意味著讀取需要共享讀鎖,更新需要獲取排他寫鎖,這是最高的隔離級別;
不可重複讀和幻讀有什麼區別?
1.不可重複讀是讀取了其他事務更改的資料,針對update或delete操作,解決辦法:使用行級鎖,鎖定改行,事務a多次讀取操作完成後才釋放該鎖,這個時候才允許其他事務更改剛才的資料;
2.幻讀是讀取了其他事務新增的資料,針對insert操作,解決辦法:使用表級鎖,鎖定整張表,事務a多次讀取資料總量之後才釋放該鎖,這個時候才允許其他事務新增資料;
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 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...