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