當前位置:
首頁 >
MySQL高级 - 锁 - InnoDB行锁 - 介绍及背景知识
發布時間:2024/4/14
83
豆豆
生活随笔
收集整理的這篇文章主要介紹了
MySQL高级 - 锁 - InnoDB行锁 - 介绍及背景知识
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
行鎖介紹
?
行鎖特點 :偏向InnoDB 存儲引擎,開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖沖突的概率最低,并發度也最高。
InnoDB 與 MyISAM 的最大不同有兩點:一是支持事務;二是 采用了行級鎖。
背景知識
事務及其ACID屬性
事務是由一組SQL語句組成的邏輯處理單元。
事務具有以下4個特性,簡稱為事務ACID屬性。
| 原子性(Atomicity) | 事務是一個原子操作單元,其對數據的修改,要么全部成功,要么全部失敗。 |
| 一致性(Consistent) | 在事務開始和完成時,數據都必須保持一致狀態。 |
| 隔離性(Isolation) | 數據庫系統提供一定的隔離機制,保證事務在不受外部并發操作影響的 “獨立” 環境下運行。 |
| 持久性(Durable) | 事務完成之后,對于數據的修改是永久的。 |
并發事務處理帶來的問題
| 丟失更新(Lost Update) | 當兩個或多個事務選擇同一行,最初的事務修改的值,會被后面的事務修改的值覆蓋。 |
| 臟讀(Dirty Reads) | 當一個事務正在訪問數據,并且對數據進行了修改,而這種修改還沒有提交到數據庫中,這時,另外一個事務也訪問這個數據,然后使用了這個數據。 |
| 不可重復讀(Non-Repeatable Reads) | 一個事務在讀取某些數據后的某個時間,再次讀取以前讀過的數據,卻發現和以前讀出的數據不一致。 |
| 幻讀(Phantom Reads) | 一個事務按照相同的查詢條件重新讀取以前查詢過的數據,卻發現其他事務插入了滿足其查詢條件的新數據。 |
事務隔離級別
為了解決上述提到的事務并發問題,數據庫提供一定的事務隔離機制來解決這個問題。數據庫的事務隔離越嚴格,并發副作用越小,但付出的代價也就越大,因為事務隔離實質上就是使用事務在一定程度上“串行化” 進行,這顯然與“并發” 是矛盾的。
數據庫的隔離級別有4個,由低到高依次為Read uncommitted、Read committed、Repeatable read、Serializable,這四個級別可以逐個解決臟寫、臟讀、不可重復讀、幻讀這幾類問題。
| Read uncommitted | × | √ | √ | √ |
| Read committed | × | × | √ | √ |
| Repeatable read(默認) | × | × | × | √ |
| Serializable | × | × | × | × |
備注 : √ 代表可能出現 , × 代表不會出現 。
Mysql 的數據庫的默認隔離級別為 Repeatable read , 查看方式:
show variables like 'tx_isolation'; 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的MySQL高级 - 锁 - InnoDB行锁 - 介绍及背景知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL高级 - 锁 - MyISAM
- 下一篇: MySQL高级 - 锁 - InnoDB