mysql的隔离级别_MySQL的四种事务隔离级别
一、事務的基本要素(ACID)
1、原子性(Atomicity):事務開始后所有操作,要么全部做完,要么全部不做,不可能停滯在中間環(huán)節(jié)。事務執(zhí)行過程中出錯,會回滾到事務開始前的狀態(tài),所有的操作就像沒有發(fā)生一樣。也就是說事務是一個不可分割的整體,就像化學中學過的原子,是物質(zhì)構成的基本單位。
2、一致性(Consistency):事務開始前和結束后,數(shù)據(jù)庫的完整性約束沒有被破壞 。比如A向B轉賬,不可能A扣了錢,B卻沒收到。
3、隔離性(Isolation):同一時間,只允許一個事務請求同一數(shù)據(jù),不同的事務之間彼此沒有任何干擾。比如A正在從一張銀行卡中取錢,在A取錢的過程結束前,B不能向這張卡轉賬。
4、持久性(Durability):事務完成后,事務對數(shù)據(jù)庫的所有更新將被保存到數(shù)據(jù)庫,不能回滾。
二、事務并發(fā)時可能遇到的問題
1、臟讀:事務A讀取了事務B更新的數(shù)據(jù),然后B回滾操作,那么A讀取到的數(shù)據(jù)是臟數(shù)據(jù)
2、不可重復讀:事務 A 多次讀取同一數(shù)據(jù),事務 B 在事務A多次讀取的過程中,對數(shù)據(jù)作了更新并提交,導致事務A多次讀取同一數(shù)據(jù)時,結果 不一致。
3、幻讀:系統(tǒng)管理員A將數(shù)據(jù)庫中所有學生的成績從具體分數(shù)改為ABCDE等級,但是系統(tǒng)管理員B就在這個時候插入了一條具體分數(shù)的記錄,當系統(tǒng)管理員A改結束后發(fā)現(xiàn)還有一條記錄沒有改過來,就好像發(fā)生了幻覺一樣,這就叫幻讀。
PS:不可重復讀和幻讀的區(qū)別,不可重復讀側重于修改造成的讀取不一致,幻讀側重于新增或刪除造成的讀取不一致。解決不可重復讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表。
三、MySQL事務隔離級別
1、未提交讀(Read Uncommitted):讀取未提交的內(nèi)容,也被稱為臟讀。事務隔離級別最低的一種,所有事務都可以看到其他未提交事務的執(zhí)行結果。本隔離級別很少用于實際應用,因為它的性能也不比其他級別好多少。
2、已提交讀(Read Committed):這是大多數(shù)數(shù)據(jù)庫系統(tǒng)的默認隔離級別(但不是MySQL默認的)。它滿足了隔離的簡單定義:一個事務只能看見已經(jīng)提交事務所做的改變。這種隔離級別可能出現(xiàn)不可重復讀(Nonrepeatable Read)的問題,因為同一事務的其他實例在該實例處理期間可能會有新的commit,所以同一select可能返回不同結果。
3、可重復讀(Repeatable Read):這是MySQL的默認事務隔離級別,它確保同一事務的多個實例在并發(fā)讀取數(shù)據(jù)時,會看到同樣的數(shù)據(jù)行。不過這依然存在另一個棘手的問題:幻讀 (Phantom Read)。簡單的說,幻讀指當用戶讀取某一范圍的數(shù)據(jù)行時,另一個事務又在該范圍內(nèi)插入了新行,當用戶再讀取該范圍的數(shù)據(jù)行時,會發(fā)現(xiàn)有新的行出現(xiàn),好像出現(xiàn)了幻覺,因此叫“幻讀”。InnoDB和Falcon存儲引擎通過多版本并發(fā)控制(MVCC,Multiversion Concurrency Control)機制解決了該問題。
4、可串行化(Serializable)這是最高的隔離級別,它通過強制事務排序,使之不可能相互沖突,從而解決幻讀問題。簡言之,它是在每個讀的數(shù)據(jù)行上加上共享鎖。在這個級別,可能導致大量的超時現(xiàn)象和鎖競爭。
《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的mysql的隔离级别_MySQL的四种事务隔离级别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql存储过程遍历新增_MySQL存
- 下一篇: php mysql 简单聊天室_聊天室p