一分钟理清Mysql的锁类型——《深究Mysql锁》
延伸閱讀:
三分鐘了解Mysql的表級鎖
五分鐘了解Mysql的行級鎖
一分鐘深入Mysql的意向鎖
我們常用的存儲引擎就MyISAM和InnoDB。MyISAM存儲主要就簡單的表級別鎖,下面只說InnoDB的各種鎖類型。
InnoDB不僅支持行級別的鎖,也支持表級別的鎖。平常我們會聽到各種鎖,你是不是不僅迷茫它們怎么用的,還會迷茫它們 各自之間都是什么關系?
什么是樂觀鎖和悲觀鎖?
樂觀鎖和悲觀鎖是泛指,不是具體的鎖。
樂悲鎖:也叫樂觀并發控制,它總是樂觀的認為用戶在并發事務處理時不會影響彼此的數據。
多版本并發控制個人認為就是一種樂觀鎖,具體參考:《Mysql概要》 里的MVCC。所以樂觀鎖我們自己也可以很輕松的實現,主要是在有中加一個version字段作為版本號。
?悲鎖觀鎖:悲觀鎖會悲觀的認為每次去拿的數據都會被別人修改。所以每次在拿數據的時候都會上鎖,從而屏蔽可能違反數據完整性的操作。間隙鎖、臨鍵鎖都屬于悲觀鎖。
什是表鎖和行鎖?
?表鎖和行鎖也是泛指,不是具體的鎖。
表級鎖有:意向共享鎖、意向排他鎖、自增鎖等。InnoDB的行鎖都是實現在索引上的。
行級鎖有:共享鎖、排他鎖、記錄鎖
什么是共享鎖(S鎖)和排他鎖(X鎖)?
InnoDB引擎實現了標準的行級別鎖,分別是共享鎖和排他鎖。
- 拿共享鎖是為了讓當前事務去讀一行數據。
- 拿排他鎖是為了讓當前事務去修改或刪除某一行數據。
一個事務拿到了當前數據行的共享鎖,另一個事務也能馬上拿到當前數據行的共享鎖。
一個事務拿到了當前數據行的排他鎖,則另一個事務不能立馬拿到當前數據行的排他鎖,因為它會被阻塞直到前一個事務釋放。
設置共享鎖:select * from user where id = 1?LOCK IN SHARE MODE;
設置排他鎖:select * from user where id = 1 FOR UPDATE;
InnoDB到底有幾種鎖?
(1) 共享/排它鎖(Shared and Exclusive Locks)
(2) 意向鎖(Intention Locks)
(3) 記錄鎖(Record Locks)
(4) 間隙鎖(Gap Locks)
(5) 臨鍵鎖(Next-key Locks)
(6) 插入意向鎖(Insert Intention Locks)
(7) 自增鎖(Auto-inc Locks)
臨鍵鎖是記錄鎖和間隙鎖的組合。
?
?
總結
以上是生活随笔為你收集整理的一分钟理清Mysql的锁类型——《深究Mysql锁》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一分钟深入Mysql的意向锁——《深究M
- 下一篇: 一分钟明白各种SQL语句加的什么锁——《