MySQL面试题 | 附答案解析(九)
鎖
-
對MySQL的鎖了解嗎當(dāng)數(shù)據(jù)庫有并發(fā)事務(wù)的時候,可能會產(chǎn)生數(shù)據(jù)的不一致,這時候需要一些機制來保證訪問的次序,鎖機制就是這樣的一個機制。就像酒店的房間,如果大家隨意進出,就會出現(xiàn)多人搶奪同一個房間的情況,而在房間上裝上鎖,申請到鑰匙的人才可以入住并且將房間鎖起來,其他人只有等他使用完畢才可以再次使用。
-
隔離級別與鎖的關(guān)系在Read Uncommitted級別下,讀取數(shù)據(jù)不需要加共享鎖,這樣就不會跟被修改的數(shù)據(jù)上的排他鎖沖突在Read Committed級別下,讀操作需要加共享鎖,但是在語句執(zhí)行完以后釋放共享鎖;在Repeatable Read級別下,讀操作需要加共享鎖,但是在事務(wù)提交之前并不釋放共享鎖,也就是必須等待事務(wù)執(zhí)行完畢以后才釋放共享鎖。SERIALIZABLE 是限制性最強的隔離級別,因為該級別鎖定整個范圍的鍵,并一直持有鎖,直到事務(wù)完成。
-
按照鎖的粒度分數(shù)據(jù)庫鎖有哪些?鎖機制與InnoDB鎖算法在關(guān)系型數(shù)據(jù)庫中,可以按照鎖的粒度把數(shù)據(jù)庫鎖分為行級鎖(INNODB引擎)、表級鎖(MYISAM引擎)和頁級鎖(BDB引擎 )。MyISAM和InnoDB存儲引擎使用的鎖:MyISAM采用表級鎖(table-level locking)。InnoDB支持行級鎖(row-level locking)和表級鎖,默認為行級鎖行級鎖,表級鎖和頁級鎖對比行級鎖 行級鎖是Mysql中鎖定粒度最細的一種鎖,表示只針對當(dāng)前操作的行進行加鎖。行級鎖能大大減少數(shù)據(jù)庫操作的沖突。其加鎖粒度最小,但加鎖的開銷也最大。行級鎖分為共享鎖 和 排他鎖。特點:開銷大,加鎖慢;會出現(xiàn)死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高。表級鎖 表級鎖是MySQL中鎖定粒度最大的一種鎖,表示對當(dāng)前操作的整張表加鎖,它實現(xiàn)簡單,資源消耗較少,被大部分MySQL引擎支持。最常使用的MYISAM與INNODB都支持表級鎖定。表級鎖定分為表共享讀鎖(共享鎖)與表獨占寫鎖(排他鎖)。特點:開銷小,加鎖快;不會出現(xiàn)死鎖;鎖定粒度大,發(fā)出鎖沖突的概率最高,并發(fā)度最低。頁級鎖 頁級鎖是MySQL中鎖定粒度介于行級鎖和表級鎖中間的一種鎖。表級鎖速度快,但沖突多,行級沖突少,但速度慢。所以取了折衷的頁級,一次鎖定相鄰的一組記錄。特點:開銷和加鎖時間界于表鎖和行鎖之間;會出現(xiàn)死鎖;鎖定粒度界于表鎖和行鎖之間,并發(fā)度一般。
-
從鎖的類別上分MySQL都有哪些鎖呢?像上面那樣子進行鎖定豈不是有點阻礙并發(fā)效率了從鎖的類別上來講,有共享鎖和排他鎖。共享鎖: 又叫做讀鎖。當(dāng)用戶要進行數(shù)據(jù)的讀取時,對數(shù)據(jù)加上共享鎖。共享鎖可以同時加上多個。排他鎖: 又叫做寫鎖。當(dāng)用戶要進行數(shù)據(jù)的寫入時,對數(shù)據(jù)加上排他鎖。排他鎖只可以加一個,他和其他的排他鎖,共享鎖都相斥。用上面的例子來說就是用戶的行為有兩種,一種是來看房,多個用戶一起看房是可以接受的。一種是真正的入住一晚,在這期間,無論是想入住的還是想看房的都不可以。鎖的粒度取決于具體的存儲引擎,InnoDB實現(xiàn)了行級鎖,頁級鎖,表級鎖。他們的加鎖開銷從大到小,并發(fā)能力也是從大到小。
最后,小編分類整理了許多java進階學(xué)習(xí)材料和BAT面試給熱愛IT行業(yè)的你,如果需要資料的請轉(zhuǎn)發(fā)此文章后再私聊小編回復(fù)【java】就能領(lǐng)取2019年java進階學(xué)習(xí)資料和BAT面試題以及《Effective Java》(第3版)電子版書籍。也可以加群:712263501領(lǐng)取海量學(xué)習(xí)資料進行學(xué)習(xí)。
總結(jié)
以上是生活随笔為你收集整理的MySQL面试题 | 附答案解析(九)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL面试题 | 附答案解析(八)
- 下一篇: MySQL面试题 | 附答案解析(十)