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