理解MySQL事務隔離級別
導讀 | 在MySQL裡面,InnoDB引擎預設的隔離級別是RR(可重複讀),因為它需要保證事務ACID特性中的隔離性特徵。 |
一位5年工作經驗的粉絲,去阿里面試被問到一個關於資料庫事務隔離級別的問題,當時,沒有問答上來,希望給他一個參考答案。那麼,今天我給大家談談我的理解。
另外,我花了1個多星期把往期的面試題解析配套文件準備好了,一共有10W字,想獲取的小夥伴可以從我的個人煮葉簡介中找到。
在SQL操作中,多個事務競爭可能會產生三種不同的現象,分別是髒讀、幻讀、不可重複讀。
首先來看髒讀,如圖所示,
假設有兩個事務T1/T2同時在執行,T1事務有可能會讀取到T2事務未提交的資料,但是未提交的事務T2可能會回滾,也就導致了T1事務讀取到最終不一定存在的資料產生髒讀的現象。
然後來看幻讀,如圖所示:
假設有兩個事務T1/T2同時執行,事務T1執行範圍查詢或者範圍修改的過程中,事務T2插入了一條屬於事務T1範圍內的資料並且提交了,這時候在事務T1查詢發現多出來了一條資料,或者在T1事務發現這條資料沒有被修改,看起來像是產生了幻覺,這種現象稱為幻讀。
最後來看,不可重複讀,如圖所示:
假設有兩個事務T1/T2同時執行,事務T1在不同的時刻讀取同一行資料的時候結果可能不一樣,從而導致不可重複讀的問題。
那麼事務隔離級別,就是是為了解決多個並行事務競爭, 。而這髒讀、幻讀、不可重複讀這三種現象在實際應用中,有些業務場景是不能接受這些現象存在的,所以在SQL標準中定義了四種隔離級別,分別是:
讀未提交,在這種隔離級別下,可能會產生髒讀、不可重複讀、幻讀。
讀已提交(RC),在這種隔離級別下,可能會產生不可重複讀和幻讀。
可重複讀(RR),在這種隔離級別下,可能會產生幻讀
序列化,在這種隔離級別下,多個並行事務序列化執行,不會產生安全性問題。
這四種隔離級別裡面,只有序列化解決了全部的問題,但這種隔離級別的效能是最低的。
在MySQL裡面,InnoDB引擎預設的隔離級別是RR(可重複讀),因為它需要保證事務ACID特性中的隔離性特徵。
以上就是我對 MySQL事務隔離級別的理解。我是被程式設計耽誤的文藝Tom,如果我的分享對你有幫助,請動動手指一鍵三連分享給更多的人。關注我,面試不再難!
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2902845/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 理解mysql的事務隔離級別MySql
- MySQL 事務隔離級別MySql
- MySQL事務隔離級別MySql
- [Mysql]事務/隔離級別MySql
- MySQL事務的隔離級別MySql
- MySQL的事務隔離級別MySql
- mysql修改事務隔離級別MySql
- 如何理解mysql 的事務隔離級別 repeatable readMySql
- MySQL事務隔離級別和MVCCMySqlMVC
- mysql如何修改事務隔離級別MySql
- mysql事務隔離級別和鎖MySql
- 啥是 MySQL 事務隔離級別?MySql
- Mysql 四種事務隔離級別MySql
- Mysql鎖與事務隔離級別MySql
- MySQL事務隔離級別詳解MySql
- 【MySQL】MySQL的四種事務隔離級別MySql
- MySQL 的四種事務隔離級別MySql
- MySQL 事務的隔離級別初窺MySql
- MySQL的四種事務隔離級別MySql
- MySQL 事務隔離級別實現原理MySql
- PostgreSQL事務隔離級別SQL
- 事務、特性、隔離級別
- 深入理解MySQL中事務隔離級別的實現原理MySql
- 徹底搞懂 MySQL 事務的隔離級別MySql
- MySQL的事務隔離級別是什麼?MySql
- MySQL 事務隔離級別解析和實戰MySql
- 四個案例看懂 MySQL 事務隔離級別MySql
- Mysql事務隔離級別與鎖機制MySql
- MySQL的事務處理及隔離級別MySql
- MySQL事務隔離級別的實現原理MySql
- 【mysql】官方的SQL事務隔離級別文件MySql
- Oracle-事務隔離級別Oracle
- JDBC 事務(一) 隔離級別JDBC
- MySQL 的隔離級別 自理解MySql
- MySQL資料庫引擎、事務隔離級別、鎖MySql資料庫
- mysql 5.5 innodb事務隔離級別之開篇MySql
- 怎麼理解SQL的四個事務隔離級別?SQL
- SqlServer事務詳解(事務隔離性和隔離級別詳解)SQLServer