有關(guān)Mysql面試題有哪些

本篇內(nèi)容主要講解“有關(guān)MySQL面試題有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“有關(guān)Mysql面試題有哪些”吧!

讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)絡(luò)空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、泉港網(wǎng)站維護(hù)、網(wǎng)站推廣。

1. 數(shù)據(jù)庫(kù)的三范式是什么?

  • 第一范式:強(qiáng)調(diào)的是列的原子性,即數(shù)據(jù)庫(kù)表的每一列都是不可分割的原子數(shù)據(jù)項(xiàng)。

  • 第二范式:要求實(shí)體的屬性完全依賴(lài)于主關(guān)鍵字。所謂完全依賴(lài)是指不能存在僅依賴(lài)主關(guān)鍵字一部分的屬性。

  • 第三范式:任何非主屬性不依賴(lài)于其它非主屬性。

2. 一張自增表里面總共有 7 條數(shù)據(jù),刪除了最后 2 條數(shù)據(jù),重啟 MySQL 數(shù)據(jù)庫(kù),又插入了一條數(shù)據(jù),此時(shí) id 是幾?

  • 表類(lèi)型如果是 MyISAM ,那 id 就是 8。

  • 表類(lèi)型如果是 InnoDB,那 id 就是 6。

InnoDB 表只會(huì)把自增主鍵的最大 id 記錄在內(nèi)存中,所以重啟之后會(huì)導(dǎo)致最大 id 丟失。

3. 如何獲取當(dāng)前數(shù)據(jù)庫(kù)版本?

使用 select version() 獲取當(dāng)前 MySQL 數(shù)據(jù)庫(kù)版本。

4. 說(shuō)一下 ACID 是什么?

  • Atomicity(原子性):一個(gè)事務(wù)(transaction)中的所有操作,或者全部完成,或者全部不完成,不會(huì)結(jié)束在中間某個(gè)環(huán)節(jié)。事務(wù)在執(zhí)行過(guò)程中發(fā)生錯(cuò)誤,會(huì)被恢復(fù)(Rollback)到事務(wù)開(kāi)始前的狀態(tài),就像這個(gè)事務(wù)從來(lái)沒(méi)有執(zhí)行過(guò)一樣。即,事務(wù)不可分割、不可約簡(jiǎn)。

  • Consistency(一致性):在事務(wù)開(kāi)始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫(kù)的完整性沒(méi)有被破壞。這表示寫(xiě)入的資料必須完全符合所有的預(yù)設(shè)約束、觸發(fā)器、級(jí)聯(lián)回滾等。

  • Isolation(隔離性):數(shù)據(jù)庫(kù)允許多個(gè)并發(fā)事務(wù)同時(shí)對(duì)其數(shù)據(jù)進(jìn)行讀寫(xiě)和修改的能力,隔離性可以防止多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離分為不同級(jí)別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復(fù)讀(repeatable read)和串行化(Serializable)。

  • Durability(持久性):事務(wù)處理結(jié)束后,對(duì)數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會(huì)丟失。

5. char 和 varchar 的區(qū)別是什么?

  • char(n) :固定長(zhǎng)度類(lèi)型,比如訂閱 char(10),當(dāng)你輸入”abc”三個(gè)字符的時(shí)候,它們占的空間還是 10 個(gè)字節(jié),其他 7 個(gè)是空字節(jié)。

chat 優(yōu)點(diǎn):效率高;缺點(diǎn):占用空間;適用場(chǎng)景:存儲(chǔ)密碼的 md5 值,固定長(zhǎng)度的,使用 char 非常合適。

  • varchar(n) :可變長(zhǎng)度,存儲(chǔ)的值是每個(gè)值占用的字節(jié)再加上一個(gè)用來(lái)記錄其長(zhǎng)度的字節(jié)的長(zhǎng)度。

所以,從空間上考慮 varcahr 比較合適;從效率上考慮 char 比較合適,二者使用需要權(quán)衡。

6. float 和 double 的區(qū)別是什么?

  • float 最多可以存儲(chǔ) 8 位的十進(jìn)制數(shù),并在內(nèi)存中占 4 字節(jié)。

  • double 最可可以存儲(chǔ) 16 位的十進(jìn)制數(shù),并在內(nèi)存中占 8 字節(jié)。

7. MySQL 的內(nèi)連接、左連接、右連接有什么區(qū)別?

內(nèi)連接關(guān)鍵字:inner join;左連接:left join;右連接:right join。

內(nèi)連接是把匹配的關(guān)聯(lián)數(shù)據(jù)顯示出來(lái);左連接是左邊的表全部顯示出來(lái),右邊的表顯示出符合條件的數(shù)據(jù);右連接正好相反。

8. MySQL 索引是怎么實(shí)現(xiàn)的?

索引是滿(mǎn)足某種特定查找算法的數(shù)據(jù)結(jié)構(gòu),而這些數(shù)據(jù)結(jié)構(gòu)會(huì)以某種方式指向數(shù)據(jù),從而實(shí)現(xiàn)高效查找數(shù)據(jù)。

具體來(lái)說(shuō) MySQL 中的索引,不同的數(shù)據(jù)引擎實(shí)現(xiàn)有所不同,但目前主流的數(shù)據(jù)庫(kù)引擎的索引都是 B+ 樹(shù)實(shí)現(xiàn)的,B+ 樹(shù)的搜索效率,可以到達(dá)二分法的性能,找到數(shù)據(jù)區(qū)域之后就找到了完整的數(shù)據(jù)結(jié)構(gòu)了,所有索引的性能也是更好的。

9. 怎么驗(yàn)證 MySQL 的索引是否滿(mǎn)足需求?

使用 explain 查看 SQL 是如何執(zhí)行查詢(xún)語(yǔ)句的,從而分析你的索引是否滿(mǎn)足需求。

explain 語(yǔ)法:explain select * from table where type=1。

10. 說(shuō)一下數(shù)據(jù)庫(kù)的事務(wù)隔離?

MySQL 的事務(wù)隔離是在 MySQL. ini 配置文件里添加的,在文件的最后添加:

transaction-isolation = REPEATABLE-READ

可用的配置值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE。

  • READ-UNCOMMITTED:未提交讀,最低隔離級(jí)別、事務(wù)未提交前,就可被其他事務(wù)讀?。〞?huì)出現(xiàn)幻讀、臟讀、不可重復(fù)讀)。

  • READ-COMMITTED:提交讀,一個(gè)事務(wù)提交后才能被其他事務(wù)讀取到(會(huì)造成幻讀、不可重復(fù)讀)。

  • REPEATABLE-READ:可重復(fù)讀,默認(rèn)級(jí)別,保證多次讀取同一個(gè)數(shù)據(jù)時(shí),其值都和事務(wù)開(kāi)始時(shí)候的內(nèi)容是一致,禁止讀取到別的事務(wù)未提交的數(shù)據(jù)(會(huì)造成幻讀)。

  • SERIALIZABLE:序列化,代價(jià)最高最可靠的隔離級(jí)別,該隔離級(jí)別能防止臟讀、不可重復(fù)讀、幻讀。

臟讀 :表示一個(gè)事務(wù)能夠讀取另一個(gè)事務(wù)中還未提交的數(shù)據(jù)。比如,某個(gè)事務(wù)嘗試插入記錄 A,此時(shí)該事務(wù)還未提交,然后另一個(gè)事務(wù)嘗試讀取到了記錄 A。

不可重復(fù)讀 :是指在一個(gè)事務(wù)內(nèi),多次讀同一數(shù)據(jù)。

幻讀 :指同一個(gè)事務(wù)內(nèi)多次查詢(xún)返回的結(jié)果集不一樣。比如同一個(gè)事務(wù) A 第一次查詢(xún)時(shí)候有 n 條記錄,但是第二次同等條件下查詢(xún)卻有 n+1 條記錄,這就好像產(chǎn)生了幻覺(jué)。發(fā)生幻讀的原因也是另外一個(gè)事務(wù)新增或者刪除或者修改了第一個(gè)事務(wù)結(jié)果集里面的數(shù)據(jù),同一個(gè)記錄的數(shù)據(jù)內(nèi)容被修改了,所有數(shù)據(jù)行的記錄就變多或者變少了。

11. 說(shuō)一下 MySQL 常用的引擎?

  • InnoDB 引擎:InnoDB 引擎提供了對(duì)數(shù)據(jù)庫(kù) acid 事務(wù)的支持,并且還提供了行級(jí)鎖和外鍵的約束,它的設(shè)計(jì)的目標(biāo)就是處理大數(shù)據(jù)容量的數(shù)據(jù)庫(kù)系統(tǒng)。MySQL 運(yùn)行的時(shí)候,InnoDB 會(huì)在內(nèi)存中建立緩沖池,用于緩沖數(shù)據(jù)和索引。但是該引擎是不支持全文搜索,同時(shí)啟動(dòng)也比較的慢,它是不會(huì)保存表的行數(shù)的,所以當(dāng)進(jìn)行 select count(*) from table 指令的時(shí)候,需要進(jìn)行掃描全表。由于鎖的粒度小,寫(xiě)操作是不會(huì)鎖定全表的,所以在并發(fā)度較高的場(chǎng)景下使用會(huì)提升效率的。

  • MyIASM 引擎:MySQL 的默認(rèn)引擎,但不提供事務(wù)的支持,也不支持行級(jí)鎖和外鍵。因此當(dāng)執(zhí)行插入和更新語(yǔ)句時(shí),即執(zhí)行寫(xiě)操作的時(shí)候需要鎖定這個(gè)表,所以會(huì)導(dǎo)致效率會(huì)降低。不過(guò)和 InnoDB 不同的是,MyIASM 引擎是保存了表的行數(shù),于是當(dāng)進(jìn)行 select count(*) from table 語(yǔ)句時(shí),可以直接的讀取已經(jīng)保存的值而不需要進(jìn)行掃描全表。所以,如果表的讀操作遠(yuǎn)遠(yuǎn)多于寫(xiě)操作時(shí),并且不需要事務(wù)的支持的,可以將 MyIASM 作為數(shù)據(jù)庫(kù)引擎的首選。

12. 說(shuō)一下 MySQL 的行鎖和表鎖?

MyISAM 只支持表鎖,InnoDB 支持表鎖和行鎖,默認(rèn)為行鎖。

  • 表級(jí)鎖:開(kāi)銷(xiāo)小,加鎖快,不會(huì)出現(xiàn)死鎖。鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)量最低。

  • 行級(jí)鎖:開(kāi)銷(xiāo)大,加鎖慢,會(huì)出現(xiàn)死鎖。鎖力度小,發(fā)生鎖沖突的概率小,并發(fā)度最高。

13. 說(shuō)一下樂(lè)觀鎖和悲觀鎖?

  • 樂(lè)觀鎖:每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在提交更新的時(shí)候會(huì)判斷一下在此期間別人有沒(méi)有去更新這個(gè)數(shù)據(jù)。

  • 悲觀鎖:每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人會(huì)修改,所以每次在拿數(shù)據(jù)的時(shí)候都會(huì)上鎖,這樣別人想拿這個(gè)數(shù)據(jù)就會(huì)阻止,直到這個(gè)鎖被釋放。

數(shù)據(jù)庫(kù)的樂(lè)觀鎖需要自己實(shí)現(xiàn),在表里面添加一個(gè) version 字段,每次修改成功值加 1,這樣每次修改的時(shí)候先對(duì)比一下,自己擁有的 version 和數(shù)據(jù)庫(kù)現(xiàn)在的 version 是否一致,如果不一致就不修改,這樣就實(shí)現(xiàn)了樂(lè)觀鎖。

14. MySQL 問(wèn)題排查都有哪些手段?

  • 使用 show processlist 命令查看當(dāng)前所有連接信息。

  • 使用 explain 命令查詢(xún) SQL 語(yǔ)句執(zhí)行計(jì)劃。

  • 開(kāi)啟慢查詢(xún)?nèi)罩荆榭绰樵?xún)的 SQL。

15. 如何做 MySQL 的性能優(yōu)化?

  • 為搜索字段創(chuàng)建索引。

  • 避免使用 select *,列出需要查詢(xún)的字段。

  • 垂直分割分表。

  • 選擇正確的存儲(chǔ)引擎。

到此,相信大家對(duì)“有關(guān)Mysql面試題有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站標(biāo)題:有關(guān)Mysql面試題有哪些
文章位置:http://muchs.cn/article28/iheccp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、外貿(mào)建站微信公眾號(hào)、定制開(kāi)發(fā)、網(wǎng)站策劃、用戶(hù)體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)