MySQL面試題

文章的目的主要是針對(duì)面試官的提問遗菠,做出盡可能精簡(jiǎn)而全面的回答联喘。若讀者對(duì)某塊的知識(shí)不能太理解,還請(qǐng)參閱其他大佬比較詳細(xì)的博客或者專業(yè)書籍辙纬,謝謝大家豁遭。


一.MySQL的存儲(chǔ)引擎

1.InnoDB:

? ? ? ? a.支持事務(wù),支持事務(wù)的四種隔離級(jí)別贺拣;是一種具有提交蓖谢、回滾和崩潰恢復(fù)能力的事務(wù)安全存儲(chǔ)引擎。

? ? ? ? b.支持行鎖和外鍵約束譬涡。

? ? ? ? c.一個(gè)Innodb表存儲(chǔ)在一個(gè)文件內(nèi)(共享表空間闪幽,表大小不受操作系統(tǒng)的限制),也可能為多個(gè)(設(shè)置為獨(dú)立表空間涡匀,表大小受操作系統(tǒng)限制盯腌,大小為2G),受操作系統(tǒng)文件大小的限制陨瘩。

? ? ? ? d.主鍵索引采用聚集索引(索引的數(shù)據(jù)域存儲(chǔ)數(shù)據(jù)文件本身)腕够,輔索引的數(shù)據(jù)域存儲(chǔ)主鍵的值级乍;因此從輔索引查找數(shù)據(jù),需要先通過輔索引找到主鍵值燕少,再訪問主鍵索引卡者;最好使用自增主鍵,防止插入數(shù)據(jù)時(shí)客们,為維持B+樹結(jié)構(gòu)崇决,文件的大調(diào)整。

? ? ? ? e.不存儲(chǔ)總行數(shù)底挫;也就是說恒傻,執(zhí)行select count(*) from table時(shí),InnoDB要掃描一遍整個(gè)表來計(jì)算有多少行建邓。注意的是盈厘,當(dāng)count(*)語句包含 where條件時(shí),兩種表的操作是一樣的官边。

? ? ? ? f.對(duì)于AUTO_INCREMENT類型的字段沸手,InnoDB中必須包含只有該字段的索引。

2.MyISAM:

? ? ? ? a.不支持事務(wù)注簿,但是整個(gè)操作是原子性的契吉。

? ? ? ? b.不支持外鍵,支持表鎖诡渴,每次鎖住的是整張表捐晶。(MyISAM的表鎖有讀鎖和寫鎖(兩個(gè)鎖都是表級(jí)別):表共享讀鎖和表獨(dú)占寫鎖。在對(duì)MyISAM表進(jìn)行讀操作時(shí)妄辩,不會(huì)阻塞其他用戶對(duì)同一張表的讀請(qǐng)求惑灵,但是會(huì)阻塞其他用戶對(duì)表的寫請(qǐng)求;對(duì)其進(jìn)行寫操作時(shí)會(huì)阻塞對(duì)同一表讀操作和寫操作MyISAM存儲(chǔ)引擎的讀鎖和寫鎖是互斥的眼耀,讀寫操作是串行的英支。那么,一個(gè)進(jìn)程請(qǐng)求某個(gè)MyISAM表的讀鎖哮伟,同時(shí)另一個(gè)進(jìn)程也請(qǐng)求同一表的寫鎖潭辈,MySQL如何處理呢?答案是寫進(jìn)程先獲得鎖澈吨。不僅如此把敢,即使讀請(qǐng)求先到鎖等待隊(duì)列,寫請(qǐng)求后到谅辣,寫鎖也會(huì)插到讀鎖請(qǐng)求之前修赞!這是因?yàn)镸ySQL認(rèn)為寫請(qǐng)求一般比讀請(qǐng)求要重要。這也正是MyISAM表不太適合于有大量更新操作和查詢操作應(yīng)用的原因,因?yàn)椋?b>大量的更新操作會(huì)造成查詢操作很難獲得讀鎖柏副,從而可能永遠(yuǎn)阻塞勾邦。這種情況有時(shí)可能會(huì)變得非常糟糕!)

? ? ? ? c.一個(gè)MyISAM表有三個(gè)文件:索引文件割择,表結(jié)構(gòu)文件眷篇,數(shù)據(jù)文件。

? ? ? ? d.采用非聚集索引荔泳,索引文件的數(shù)據(jù)域存儲(chǔ)指向數(shù)據(jù)文件的指針蕉饼。輔索引與主索引基本一致,但是輔索引不用保證唯一性玛歌。

? ? ? ? e.存儲(chǔ)表的總行數(shù)昧港,執(zhí)行select count(*) from table時(shí)只要簡(jiǎn)單的讀出保存好的行數(shù)即可。

? ? ? ? f.對(duì)于AUTO_INCREMENT類型的字段支子,在MyISAM表中创肥,可以和其他字段一起建立聯(lián)合索引。

3.Memory:

? ??????每個(gè)基于MEMORY存儲(chǔ)引擎的表實(shí)際對(duì)應(yīng)一個(gè)磁盤文件值朋。該文件的文件名與表名相同叹侄,類型為frm類型。該文件中只存儲(chǔ)表的結(jié)構(gòu)昨登。而其數(shù)據(jù)文件趾代,都是存儲(chǔ)在內(nèi)存中,這樣有利于數(shù)據(jù)的快速處理篙骡,提高整個(gè)表的效率稽坤。MEMORY默認(rèn)使用哈希索引(唯一支持哈希索引的存儲(chǔ)引擎)丈甸。速度比使用B型樹索引快糯俗。當(dāng)然如果你想用B型樹索引,可以在創(chuàng)建索引時(shí)指定睦擂。

4.Archive:


MySQL中的鎖

表級(jí)鎖:開銷小得湘,加鎖快;不會(huì)出現(xiàn)死鎖顿仇;鎖定粒度大淘正,發(fā)生鎖沖突的概率最高,并發(fā)度最低。

行級(jí)鎖:開銷大臼闻,加鎖慢鸿吆;會(huì)出現(xiàn)死鎖;鎖定粒度最小述呐,發(fā)生鎖沖突的概率最低,并發(fā)度也最高惩淳。

頁面鎖:開銷和加鎖時(shí)間界于表鎖和行鎖之間;會(huì)出現(xiàn)死鎖乓搬;鎖定粒度界于表鎖和行鎖之間思犁,并發(fā)度一般代虾。

二、事務(wù)的ACID

????????1.原子性(atomicity):一個(gè)事務(wù)必須視為一個(gè)不可分割的最小工作單元激蹲,整個(gè)事務(wù)中所有的操作要么全部提交成功棉磨,要么全部失敗回滾,對(duì)一個(gè)事務(wù)來說学辱,不可能只執(zhí)行其中的一部分操作乘瓤,這就是事務(wù)的原子性。

? ? ? ? 2.一致性(consistency):事務(wù)前后數(shù)據(jù)的完整性保持一致项郊。

? ? ? ? 3.隔離性(isolation):一個(gè)事務(wù)所做的修改在最終提交以前馅扣,對(duì)其他事務(wù)通常是不可見的。

? ? ? ? 4.持久性(durability):一旦事務(wù)提交着降,則其所做的修改就會(huì)永久保存到數(shù)據(jù)庫中差油。此時(shí)即使系統(tǒng)崩潰,修改的數(shù)據(jù)也不會(huì)丟失任洞。

三蓄喇、事務(wù)的隔離級(jí)別

? ? ? ? 1.READ UNCOMMITTED (未提交讀):一個(gè)事務(wù)可以讀取另一個(gè)未提交事務(wù)的數(shù)據(jù),這也稱為臟讀交掏。

? ? ? ? 2.READ COMMITTED (提交讀):一個(gè)事務(wù)要等另一個(gè)事務(wù)提交后才能讀取數(shù)據(jù)妆偏。但會(huì)出現(xiàn)一個(gè)事務(wù)范圍內(nèi)兩個(gè)相同的查詢卻返回了不同的數(shù)據(jù),稱為不可重復(fù)讀盅弛。

? ? ? ? 3.REPEATABLE READ (可重復(fù)讀):在開始讀取數(shù)據(jù)(事務(wù)開啟)的時(shí)候钱骂,不允許修改操作∨才簦可重復(fù)讀可以解決不可重復(fù)讀問題见秽。不可重復(fù)讀對(duì)應(yīng)的是修改即update操作,但是可能有幻讀問題讨盒,因?yàn)榛米x問題對(duì)應(yīng)的是插入insert操作解取,而不是update操作。

? ? ? ? 幻讀:當(dāng)某個(gè)事務(wù)在讀取某個(gè)范圍內(nèi)記錄時(shí)返顺,另外一個(gè)事務(wù)又在該范圍內(nèi)插入了新的記錄禀苦,當(dāng)之前的事務(wù)再次讀取該范圍記錄時(shí),會(huì)出現(xiàn)換行遂鹊。

? ? ? ? 4.SERIALIZABLE (可串行化):最高的隔離級(jí)別振乏,該級(jí)別下事務(wù)串行化順序執(zhí)行,可以避免臟讀秉扑、不可重復(fù)讀和幻讀慧邮。但是效率低下,比較耗數(shù)據(jù)庫的性能,會(huì)在讀取的每一個(gè)行都加鎖赋咽,所以會(huì)導(dǎo)致大量的超時(shí)和鎖爭(zhēng)用的問題旧噪。

四、多版本并發(fā)控制(MVCC)解決幻讀問題


持續(xù)更新E洹L灾印!E阏薄米母!覺得如果有幫助到你,麻煩評(píng)論喜歡加關(guān)注喲毡琉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末铁瞒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子桅滋,更是在濱河造成了極大的恐慌慧耍,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丐谋,死亡現(xiàn)場(chǎng)離奇詭異芍碧,居然都是意外死亡抽莱,警方通過查閱死者的電腦和手機(jī)扫外,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門堪澎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來豹储,“玉大人,你說我怎么就攤上這事庇楞”锘睿” “怎么了铝耻?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵猪落,是天一觀的道長(zhǎng)贞远。 經(jīng)常有香客問我,道長(zhǎng)许布,這世上最難降的妖魔是什么兴革? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任绎晃,我火速辦了婚禮蜜唾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庶艾。我一直安慰自己袁余,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布咱揍。 她就那樣靜靜地躺著颖榜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掩完,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天噪漾,我揣著相機(jī)與錄音,去河邊找鬼且蓬。 笑死欣硼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恶阴。 我是一名探鬼主播诈胜,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼冯事!你這毒婦竟也來了焦匈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤昵仅,失蹤者是張志新(化名)和其女友劉穎缓熟,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摔笤,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荚虚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了籍茧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片版述。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖寞冯,靈堂內(nèi)的尸體忽然破棺而出渴析,到底是詐尸還是另有隱情,我是刑警寧澤吮龄,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布俭茧,位于F島的核電站,受9級(jí)特大地震影響漓帚,放射性物質(zhì)發(fā)生泄漏母债。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一尝抖、第九天 我趴在偏房一處隱蔽的房頂上張望毡们。 院中可真熱鬧,春花似錦昧辽、人聲如沸衙熔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽红氯。三九已至框咙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痢甘,已是汗流浹背喇嘱。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留塞栅,地道東北人婉称。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像构蹬,于是被迫代替她去往敵國(guó)和親王暗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容