RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

常見的MySQL高頻面試題

如意 ? 來源:MySQL技術(shù) ? 作者:MySQL技術(shù) ? 2021-02-08 16:05 ? 次閱讀

前言:

在各類技術(shù)崗位面試中,似乎 MySQL 相關(guān)問題經(jīng)常被問到。無論你面試開發(fā)崗位或運維崗位,總會問幾道數(shù)據(jù)庫問題。經(jīng)常有小伙伴私信我,詢問如何應(yīng)對 MySQL 面試題。其實很多面試題都是大同小異的,提前做準備還是很有必要的。本篇文章簡單說下幾個常見的面試題,一起來學(xué)習(xí)下吧。

1.什么是關(guān)系型數(shù)據(jù)庫?談?wù)勀銓?MySQL 的認識。

這是一道基礎(chǔ)題,考察面試者對數(shù)據(jù)庫的了解程度,一般可以簡單講下自己的認知,有條理即可。比如:

關(guān)系型數(shù)據(jù)庫是指采用了關(guān)系模型來組織數(shù)據(jù)的數(shù)據(jù)庫,其以行和列的形式存儲數(shù)據(jù)。關(guān)系型數(shù)據(jù)庫最大的特點是支持事務(wù)。常見的關(guān)系型數(shù)據(jù)庫有 MySQL、Oracle、SQLServer 等。MySQL 是當(dāng)下最流行的開源數(shù)據(jù)庫。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,使得很多公司都采用 MySQL 數(shù)據(jù)庫以降低成本,目前被廣泛地應(yīng)用在 Internet 上的中小型網(wǎng)站中,尤其適用于 OLTP 領(lǐng)域。

2.MySQL 常見的存儲引擎有哪些,有什么區(qū)別?

這個問題也經(jīng)常被問到,和『InnoDB 與 MyISAM 引擎的區(qū)別』問題相似。

常見的幾種存儲引擎:

InnoDB: MySQL 默認的存儲引擎,支持事務(wù)、MVCC、外鍵、行級鎖和自增列。

MyISAM: 支持全文索引、壓縮、空間函數(shù)、表級鎖,不支持事務(wù),插入速度快。

Memory: 數(shù)據(jù)都在內(nèi)存中,數(shù)據(jù)的處理速度快,但是安全性不高。

ARCHIVE: 常用于歷史歸檔表,占用空間小,數(shù)據(jù)不能更新刪除。

InnoDB 與 MyISAM 引擎的幾點區(qū)別:

InnoDB 支持事務(wù),MyISAM 不支持事務(wù)。

InnoDB 支持外鍵,而 MyISAM 不支持。

InnoDB 不支持全文索引,而 MyISAM 支持。

InnoDB 是聚簇索引,MyISAM 是非聚簇索引。

InnoDB 不保存表的具體行數(shù),而 MyISAM 用一個變量保存了整個表的行數(shù)。

InnoDB 最小的鎖粒度是行鎖,MyISAM 最小的鎖粒度是表鎖。

存儲結(jié)構(gòu)不同,MyISAM 表分為 frm MYD MYI 三個,InnoDB 一般分為 frm ibd 兩個。

3.描述下 MySQL 基礎(chǔ)架構(gòu)。

這個問題考察面試者對 MySQL 架構(gòu)的了解,和『一條 select 語句執(zhí)行流程』問題相似。

MySQL的邏輯架構(gòu)圖

MySQL的邏輯架構(gòu)主要分為3層:

第一層:對客戶端的連接處理、安全認證、授權(quán)等,每個客戶端連接都會在服務(wù)端擁有一個線程,每個連接發(fā)起的查詢都會在對應(yīng)的單獨線程中執(zhí)行。

第二層:MySQL的核心服務(wù)功能層,包括查詢解析、分析、查詢緩存、內(nèi)置函數(shù)、存儲過程、觸發(fā)器、視圖等,select操作會先檢查是否命中查詢緩存,命中則直接返回緩存數(shù)據(jù),否則解析查詢并創(chuàng)建對應(yīng)的解析樹。

第三層:存儲引擎,負責(zé)數(shù)據(jù)的存儲和提取,MySQL服務(wù)器通過API與存儲引擎通信,屏蔽了各種引擎之間的差異,常見的存儲引擎有:InnoDB、MyISAM。

一條 select 語句執(zhí)行流程:

客戶端通過連接器與 MySQL 服務(wù)器建立連接,并獲取了用戶的讀寫權(quán)限,然后提交查詢語句。

首先 MySQL 會在查詢緩存中對提交的語句進行查詢,如果命中且用戶對表有操作權(quán)限,會直接返回查詢緩存中查詢結(jié)果作為本次查詢的結(jié)果,查詢到此結(jié)束。

如果查詢緩存未命中,會來到分析器,分析器會解析語句并檢查其合法性。如果語句不符合 MySQL 的語法規(guī)范,執(zhí)行器會報錯,查詢到此結(jié)束。

若語句合法,會來到優(yōu)化器,優(yōu)化器會為 SQL 語句選擇最優(yōu)的執(zhí)行計劃。

最后來到執(zhí)行器,如果用戶對表有操作權(quán)限,執(zhí)行器會調(diào)用存儲引擎提供的接口來執(zhí)行 SQL 語句,然后將查詢結(jié)果返回給客戶端,查詢到此結(jié)束。

4.說說常用的幾種字段類型。

這個問題考察面試者對 MySQL 字段類型的了解程度,可以延伸出很多小問題,例如 char 與 varchar 的區(qū)別。

常用的字段類型分類:

數(shù)值型:

字符串類型:

日期和時間類型:

int(M)中的 M 代表最大顯示寬度,“最大顯示寬度”我們第一反應(yīng)是該字段的值最大能允許存放的值的寬度,以為我們建了int(1),就不能存放數(shù)據(jù)10了, 其實不是這個意思,int(5)和int(10)可存儲的范圍一樣。

CHAR類型是定長的,MySQL總是根據(jù)定義的字符串長度分配足夠的空間。當(dāng)保存CHAR值時,在它們的右邊填充空格以達到指定的長度,當(dāng)檢索到CHAR值時,尾部的空格被刪除掉。VARCHAR類型用于存儲可變長字符串,存儲時,如果字符沒有達到定義的位數(shù),也不會在后面補空格。char(M) 與 varchar(M)中的的 M 都表示保存的最大字符數(shù),單個字母、數(shù)字、中文等都是占用一個字符。

5.講講索引的作用及結(jié)構(gòu)及使用規(guī)范。

關(guān)于索引,能有好多好多問題,可能幾篇文章也寫不明白。簡單分享下這類問題的回答:

索引的目的在于提高查詢效率。可以類比字典中的目錄,查找字典內(nèi)容時可以根據(jù)目錄查找到數(shù)據(jù)的存放位置,然后直接獲取即可。索引是表的目錄,在查找內(nèi)容之前可以先在目錄中查找索引位置,以此快速定位查詢數(shù)據(jù)。

InnoDB 引擎下,主要使用的是 B+Tree 索引,每個索引其實都是一顆B+樹,B+樹是為了磁盤及其他存儲輔助設(shè)備而設(shè)計的一種平衡查找樹(不是二叉樹),在B+樹中,所有的數(shù)據(jù)都在葉子節(jié)點,且每一個葉子節(jié)點都帶有指向下一個節(jié)點的指針,形成了一個有序的鏈表。

從物理存儲角度來看,InnoDB 索引可分為聚簇索引(clustered index)和二級索引(secondary index)或輔助索引。聚簇索引的葉子節(jié)點存的是整行數(shù)據(jù),當(dāng)某條查詢使用的是聚簇索引時,只需要掃描聚簇索引一顆B+樹即可得到所需記錄,如果想通過二級索引來查找完整的記錄的話,需要通過回表操作,也就是在通過二級索引找到主鍵值之后再到聚簇索引中查找完整的記錄。

索引的優(yōu)點顯而易見是可以加速查詢,但創(chuàng)建索引也是有代價的。首先每建立一個索引都要為它建立一棵B+樹,會占用額外的存儲空間;其次當(dāng)對表中的數(shù)據(jù)進行增加、刪除、修改時,索引也需要動態(tài)的維護,降低了數(shù)據(jù)的維護速度。所以,索引的創(chuàng)建及使用時有原則的,一般只為用于搜索、排序、分組、連接的列創(chuàng)建索引,選擇性差的列盡量不創(chuàng)建索引。

6.講下 MySQL 事務(wù)的特性及隔離級別。

MySQL 事務(wù)相關(guān)問題也經(jīng)常被問到,一些原理性的東西還是需要深入去學(xué)習(xí)的。

ACID 四個特性:

A(Atomicity,原子性):一個事務(wù)中的操作要么都成功,要么都失敗。

C(Consistency,一致性):數(shù)據(jù)庫總是從一個一致性狀態(tài)轉(zhuǎn)換到另一個一致性狀態(tài),若破壞約束,則不滿足一致性條件。

I(Isolation,隔離性):一個事務(wù)的執(zhí)行不能其它事務(wù)干擾。即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對其它并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個事務(wù)之間不能互相干擾。

D(Durability,持久性):事務(wù)在提交以后,它所做的修改就會被永久保存到數(shù)據(jù)庫。

事務(wù)隔離級別:

讀未提交(Read Uncommitted):事務(wù)中的修改,即便沒有提交,對其他事務(wù)也都是可見的。

讀已提交(Read Committed):事務(wù)中的修改只有在提交之后,才會對其他事務(wù)可見。

可重復(fù)讀(Repeatable Read):一個事務(wù)中多次查詢相同的記錄,結(jié)果總是一致的(默認的隔離級別)。

可串行化(Serializable):事務(wù)都是串行執(zhí)行的,讀會加讀鎖,寫會加寫鎖。

并發(fā)事務(wù)帶來的問題:

臟讀(Dirty Reads):事務(wù)A讀取了事務(wù)B未提交的數(shù)據(jù),然后B回滾操作,那么A讀取到的數(shù)據(jù)是臟數(shù)據(jù)。

不可重復(fù)讀(Non-Repeatable Reads):事務(wù) A 多次讀取同一數(shù)據(jù),事務(wù)B在事務(wù)A多次讀取的過程中,對數(shù)據(jù)作了更新并提交,導(dǎo)致事務(wù)A多次讀取同一數(shù)據(jù)時,結(jié)果不一致。

幻讀(Phantom Reads):幻讀與不可重復(fù)讀類似。它發(fā)生在一個事務(wù)A讀取了幾行數(shù)據(jù),接著另一個并發(fā)事務(wù)B插入了一些數(shù)據(jù)時。在隨后的查詢中,事務(wù)A就會發(fā)現(xiàn)多了一些原本不存在的記錄,就好像發(fā)生了幻覺一樣,所以稱為幻讀。
責(zé)編AJX

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3794

    瀏覽量

    64358
  • 引擎
    +關(guān)注

    關(guān)注

    1

    文章

    361

    瀏覽量

    22546
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    804

    瀏覽量

    26526
收藏 人收藏

    評論

    相關(guān)推薦

    常見的嵌入式C語言面試題

    數(shù)組是最基本的數(shù)據(jù)結(jié)構(gòu),關(guān)于數(shù)組的面試題也屢見不鮮,本文羅列了一些常見面試題,僅供參考。目前有以下18道題目。
    發(fā)表于 07-18 10:46 ?815次閱讀

    java基礎(chǔ)練習(xí)、面試題

    java基礎(chǔ)練習(xí)、面試題整理了java私塾教材的課后作業(yè),基礎(chǔ)部分,面試中也常常遇到的基礎(chǔ)問題,趕緊下載了。下載: [hide][/hide]
    發(fā)表于 07-16 14:02

    java經(jīng)典面試題深度解析

    免費視頻教程:java經(jīng)典面試題深度解析對于很多初學(xué)者來說,學(xué)好java在后期面試的階段都沒什么經(jīng)驗,為了讓大家更好的了解面試相關(guān)知識,今天在這里給大家分享了一個java經(jīng)典面試題深度
    發(fā)表于 06-20 15:16

    視頻教程:Java常見面試題目深度解析!

    視頻教程:Java常見面試題目深度解析!Java作為目前比較火的計算機語言之一,連續(xù)幾年蟬聯(lián)最受程序員歡迎的計算機語言榜首,因此每年新入職Java程序員也數(shù)不勝數(shù)。很多java程序員在學(xué)成之后,會面
    發(fā)表于 07-11 10:55

    視頻教程:Java常見面試題目深度解析!

    技巧是一項很重要的能力。今天要給大家介紹的是一個Java常見面試題目深度解析視頻教程,需要的朋友可以看看,希望能幫助到大家!課程目錄:第一節(jié)、 String Stringbuffer
    發(fā)表于 07-29 10:20

    嵌入式工程師常見面試題匯總

    嵌入式工程師常見面試題,看看都會不!
    發(fā)表于 01-12 07:35

    嵌入式工程師常見面試題

    嵌入式工程師常見面試題,看看都會不!
    發(fā)表于 02-02 07:42

    c語言面試題,c++面試題下載

    c語言面試題,c++面試題1. static有什么用途?(請至少說明兩種) 1) 限制變量的作用域 2) 設(shè)置變量的存儲域 2. 引用與指針有什么區(qū)別?  1) 引用必須被初
    發(fā)表于 10-22 11:19 ?5次下載

    c語言面試題

    c語言面試題集(單片機)C language problem(20151125084232)
    發(fā)表于 12-18 14:05 ?9次下載

    c語言面試題

    c語言面試題
    發(fā)表于 11-05 16:48 ?0次下載

    C語言經(jīng)典面試題

    面試題
    發(fā)表于 12-20 22:41 ?0次下載

    C語言經(jīng)典面試題

    C語言 經(jīng)典面試題
    發(fā)表于 01-05 11:27 ?0次下載

    經(jīng)典硬件面試題精選及解答

    經(jīng)典硬件面試題精選及解答
    發(fā)表于 11-29 18:02 ?0次下載

    Java的經(jīng)典面試題和答案詳細說明

    發(fā)現(xiàn)網(wǎng)上很多Java面試題都沒有答案,所以花了很長時間搜集整理出來了這套Java面試題大全,希望對大家有幫助哈~ 博主已將以下這些面試題整理成了一個Java面試手冊,題型非常全面附帶答
    發(fā)表于 09-07 08:00 ?0次下載
    Java的經(jīng)典<b class='flag-5'>面試題</b>和答案詳細說明

    關(guān)于數(shù)組常見面試題

    數(shù)組是最基本的數(shù)據(jù)結(jié)構(gòu),關(guān)于數(shù)組的面試題也屢見不鮮,本文羅列了一些常見面試題,僅供參考。目前有以下18道題目。
    的頭像 發(fā)表于 08-17 09:25 ?1645次閱讀
    RM新时代网站-首页