mysql事務隔離級別以及會出現的問題

2021-10-01 12:49:36 字數 2034 閱讀 8037

1.髒讀:

髒讀就是指當乙個事務正在訪問資料並且對資料進行了修改,但是還沒有提交時,另乙個事務讀取到了修改之後的資料,但是前面的事務進行回滾了,此時就出現了髒讀。

2.不可重複讀:

乙個事務在查詢資料時另乙個修改資料的事務剛好提交,再次查詢時,兩次查詢結果不一樣。(即不能讀到相同的資料內容)

例如,乙個編輯人員兩次讀取同一文件,但在兩次讀取之間,作者重寫了該文件。當編輯人員第二次讀取文件時,文件已更改。原始讀取不可重複。如果只有在作者全部完成編寫後編輯人員才可以讀取文件,則可以避免該問題。

3.幻讀:

在乙個事務的兩次查詢中資料筆數不一致,例如:乙個事務查詢一次資料,在此時另乙個事務插入了幾條資料,當再次查詢時出現了幾條之前沒有的資料,產生幻讀;

例如,乙個編輯人員更改作者提交的文件,但當生產部門將其更改內容合併到該文件的主複本時,發現作者已將未編輯的新材料新增到該文件中。如果在編輯人員和生產部門完成對原始文件的處理之前,任何人都不能將新材料新增到文件中,則可以避免該問題。

4. serializable 序列化:

serializable 是最高的事務隔離級別,同時代價也花費最高,效能很低,一般很少使用,在該級別下,事務順序執行,不僅可以避免髒讀、不可重複讀,還避免了幻像讀。

1、原子性(atomicity):事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程**錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。

2、一致性(consistency):事務開始前和結束後,資料庫的完整性約束沒有被破壞 。比如a向b轉賬,不可能a扣了錢,b卻沒收到。

3、隔離性(isolation):同一時間,只允許乙個事務請求同一資料,不同的事務之間彼此沒有任何干擾。比如a正在從一張銀行卡中取錢,在a取錢的過程結束前,b不能向這張卡轉賬。

4、永續性(durability):事務完成後,事務對資料庫的所有更新將被儲存到資料庫,不能回滾。

資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 、read committed 、repeatable read 、serializable ,這四個級別可以逐個解決髒讀 、不可重複讀 、幻讀 這幾類問題。

√: 可能出現 ×: 不會出現

事務隔離級別

髒讀不可重複讀

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

√讀已提交(read-committed)×√

√可重複讀(repeatable-read)××

√序列化(serializable)××

×mysql預設的事務隔離級別為repeatable-read

mysql [mytest]

>

select @@tx_isolation;

+-----------------+

| @@tx_isolation |

+-----------------+

| repeatable-read |

+-----------------+

1 row in

set(0.00 sec)

1、事務隔離級別為讀提交時,寫資料只會鎖住相應的行

2、事務隔離級別為可重複讀時,如果檢索條件有索引(包括主鍵索引)的時候,預設加鎖方式是next-key 鎖;如果檢索條件沒有索引,更新資料時會鎖住整張表。乙個間隙被事務加了鎖,其他事務是不能在這個間隙插入記錄的,這樣可以防止幻讀。

3、事務隔離級別為序列化時,讀寫資料都會鎖住整張表

4、隔離級別越高,越能保證資料的完整性和一致性,但是對併發效能的影響也越大。

mysql的事務以及隔離級別

實際專案中的事務 題外話事務是最小的不可分割的工作單元,事務能保證乙個業務的完整性 執行乙個事務時,事務中只要有乙個操作失敗,整個事務就會失敗 銀行轉賬系統,先扣費再轉賬,如果扣費成功了,但是轉賬失敗了,假如扣費是乙個事務,轉賬為乙個事務,就會導致程式扣費成功了,但是沒有轉賬成功,這樣會造成要取錢的...

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 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...