最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

幾個(gè)MySQL高頻面試題的解答

 更新時(shí)間:2021年01月25日 12:06:53   作者:MySQL技術(shù)  
這篇文章主要介紹了幾個(gè)MySQL高頻面試題的解答,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下

前言: 

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

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

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

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

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

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

常見的幾種存儲(chǔ)引擎:

  • InnoDB: MySQL 默認(rèn)的存儲(chǔ)引擎,支持事務(wù)、MVCC、外鍵、行級(jí)鎖和自增列。
  • MyISAM: 支持全文索引、壓縮、空間函數(shù)、表級(jí)鎖,不支持事務(wù),插入速度快。
  • Memory: 數(shù)據(jù)都在內(nèi)存中,數(shù)據(jù)的處理速度快,但是安全性不高。
  • ARCHIVE: 常用于歷史歸檔表,占用空間小,數(shù)據(jù)不能更新刪除。

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

  • InnoDB 支持事務(wù),MyISAM 不支持事務(wù)。
  • InnoDB 支持外鍵,而 MyISAM 不支持。
  • InnoDB 不支持全文索引,而 MyISAM 支持。
  • InnoDB 是聚簇索引,MyISAM 是非聚簇索引。
  • InnoDB 不保存表的具體行數(shù),而 MyISAM 用一個(gè)變量保存了整個(gè)表的行數(shù)。
  • InnoDB 最小的鎖粒度是行鎖,MyISAM 最小的鎖粒度是表鎖。
  • 存儲(chǔ)結(jié)構(gòu)不同,MyISAM 表分為 frm MYD MYI 三個(gè),InnoDB 一般分為 frm ibd 兩個(gè)。

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

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

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

  • 第一層:對(duì)客戶端的連接處理、安全認(rèn)證、授權(quán)等,每個(gè)客戶端連接都會(huì)在服務(wù)端擁有一個(gè)線程,每個(gè)連接發(fā)起的查詢都會(huì)在對(duì)應(yīng)的單獨(dú)線程中執(zhí)行。
  • 第二層:MySQL的核心服務(wù)功能層,包括查詢解析、分析、查詢緩存、內(nèi)置函數(shù)、存儲(chǔ)過程、觸發(fā)器、視圖等,select操作會(huì)先檢查是否命中查詢緩存,命中則直接返回緩存數(shù)據(jù),否則解析查詢并創(chuàng)建對(duì)應(yīng)的解析樹。
  • 第三層:存儲(chǔ)引擎,負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和提取,MySQL服務(wù)器通過API與存儲(chǔ)引擎通信,屏蔽了各種引擎之間的差異,常見的存儲(chǔ)引擎有:InnoDB、MyISAM。

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

  • 客戶端通過連接器與 MySQL 服務(wù)器建立連接,并獲取了用戶的讀寫權(quán)限,然后提交查詢語(yǔ)句。
  • 首先 MySQL 會(huì)在查詢緩存中對(duì)提交的語(yǔ)句進(jìn)行查詢,如果命中且用戶對(duì)表有操作權(quán)限,會(huì)直接返回查詢緩存中查詢結(jié)果作為本次查詢的結(jié)果,查詢到此結(jié)束。
  • 如果查詢緩存未命中,會(huì)來(lái)到分析器,分析器會(huì)解析語(yǔ)句并檢查其合法性。如果語(yǔ)句不符合 MySQL 的語(yǔ)法規(guī)范,執(zhí)行器會(huì)報(bào)錯(cuò),查詢到此結(jié)束。
  • 若語(yǔ)句合法,會(huì)來(lái)到優(yōu)化器,優(yōu)化器會(huì)為 SQL 語(yǔ)句選擇最優(yōu)的執(zhí)行計(jì)劃。
  • 最后來(lái)到執(zhí)行器,如果用戶對(duì)表有操作權(quán)限,執(zhí)行器會(huì)調(diào)用存儲(chǔ)引擎提供的接口來(lái)執(zhí)行 SQL 語(yǔ)句,然后將查詢結(jié)果返回給客戶端,查詢到此結(jié)束。

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

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

常用的字段類型分類:

數(shù)值型:

字符串類型:

日期和時(shí)間類型:

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

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

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

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

索引的目的在于提高查詢效率??梢灶惐茸值渲械哪夸洠檎易值鋬?nèi)容時(shí)可以根據(jù)目錄查找到數(shù)據(jù)的存放位置,然后直接獲取即可。索引是表的目錄,在查找內(nèi)容之前可以先在目錄中查找索引位置,以此快速定位查詢數(shù)據(jù)。

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

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

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

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

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

ACID 四個(gè)特性:

  • A(Atomicity,原子性):一個(gè)事務(wù)中的操作要么都成功,要么都失敗。
  • C(Consistency,一致性):數(shù)據(jù)庫(kù)總是從一個(gè)一致性狀態(tài)轉(zhuǎn)換到另一個(gè)一致性狀態(tài),若破壞約束,則不滿足一致性條件。
  • I(Isolation,隔離性):一個(gè)事務(wù)的執(zhí)行不能其它事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)其它并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾。
  • D(Durability,持久性):事務(wù)在提交以后,它所做的修改就會(huì)被永久保存到數(shù)據(jù)庫(kù)。

事務(wù)隔離級(jí)別:

  • 讀未提交(Read Uncommitted):事務(wù)中的修改,即便沒有提交,對(duì)其他事務(wù)也都是可見的。
  • 讀已提交(Read Committed):事務(wù)中的修改只有在提交之后,才會(huì)對(duì)其他事務(wù)可見。
  • 可重復(fù)讀(Repeatable Read):一個(gè)事務(wù)中多次查詢相同的記錄,結(jié)果總是一致的(默認(rèn)的隔離級(jí)別)。
  • 可串行化(Serializable):事務(wù)都是串行執(zhí)行的,讀會(huì)加讀鎖,寫會(huì)加寫鎖。

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

  • 臟讀(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多次讀取的過程中,對(duì)數(shù)據(jù)作了更新并提交,導(dǎo)致事務(wù)A多次讀取同一數(shù)據(jù)時(shí),結(jié)果不一致。
  • 幻讀(Phantom Reads):幻讀與不可重復(fù)讀類似。它發(fā)生在一個(gè)事務(wù)A讀取了幾行數(shù)據(jù),接著另一個(gè)并發(fā)事務(wù)B插入了一些數(shù)據(jù)時(shí)。在隨后的查詢中,事務(wù)A就會(huì)發(fā)現(xiàn)多了一些原本不存在的記錄,就好像發(fā)生了幻覺一樣,所以稱為幻讀。

以上就是幾個(gè)MySQL高頻面試題的解答的詳細(xì)內(nèi)容,更多關(guān)于MySQL高頻面試題的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用distinct在mysql中查詢多條不重復(fù)記錄值的解決辦法

    使用distinct在mysql中查詢多條不重復(fù)記錄值的解決辦法

    使用distinct在mysql中查詢多條不重復(fù)記錄值的解決辦法...
    2006-12-12
  • MYSQL數(shù)據(jù)庫(kù)GTID實(shí)現(xiàn)主從復(fù)制實(shí)現(xiàn)(超級(jí)方便)

    MYSQL數(shù)據(jù)庫(kù)GTID實(shí)現(xiàn)主從復(fù)制實(shí)現(xiàn)(超級(jí)方便)

    這篇文章主要介紹了MYSQL數(shù)據(jù)庫(kù)GTID實(shí)現(xiàn)主從復(fù)制實(shí)現(xiàn)(超級(jí)方便),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • VSCODE連接MySQL數(shù)據(jù)庫(kù)服務(wù)圖文教程

    VSCODE連接MySQL數(shù)據(jù)庫(kù)服務(wù)圖文教程

    最近做網(wǎng)頁(yè)碰到連接數(shù)據(jù)庫(kù)的問題,上網(wǎng)查了挺久終于搞明白了,下面這篇文章主要給大家介紹了關(guān)于VSCODE連接MySQL數(shù)據(jù)庫(kù)服務(wù)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • MySQL v5.7.18 解壓版本安裝詳細(xì)教程

    MySQL v5.7.18 解壓版本安裝詳細(xì)教程

    這篇文章主要介紹了MySQL v5.7.18 解壓版本安裝詳細(xì)教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-04-04
  • mysql分表程序改動(dòng)方法

    mysql分表程序改動(dòng)方法

    在本篇文章里小編給大家分享了關(guān)于mysql分表程序改動(dòng)方法以及相關(guān)知識(shí)點(diǎn),需要的朋友們跟著學(xué)習(xí)下。
    2019-04-04
  • MySQL中預(yù)處理語(yǔ)句prepare、execute與deallocate的使用教程

    MySQL中預(yù)處理語(yǔ)句prepare、execute與deallocate的使用教程

    這篇文章主要介紹了MySQL中預(yù)處理語(yǔ)句prepare、execute與deallocate的使用教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • 簡(jiǎn)單聊一聊SQL中的union和union?all

    簡(jiǎn)單聊一聊SQL中的union和union?all

    在寫SQL的時(shí)候,偶爾會(huì)用到兩個(gè)表的數(shù)據(jù)結(jié)合在一起返回的,就需要用到UNION 和 UNION ALL,這篇文章主要給大家介紹了關(guān)于SQL中union和union?all的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 集群rpm安裝MySQL步驟詳解

    集群rpm安裝MySQL步驟詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于集群rpm安裝MySQL步驟內(nèi)容,需要的朋友們可以參考學(xué)習(xí)下。
    2020-01-01
  • MySQL [Warning] TIMESTAMP with implicit DEFAULT value is deprecated(報(bào)錯(cuò)信息解決)

    MySQL [Warning] TIMESTAMP with implicit&

    本文介紹了MySQL中常見的報(bào)錯(cuò)信息及其解決方法,主要包括TIMESTAMP with implicit DEFAULT value is deprecated、ERROR_FOR_DIVISION_BY_ZERO和NO_ZERO_DATE/NO_ZERO_IN_DATE等報(bào)錯(cuò)信息,以及對(duì)應(yīng)的配置文件設(shè)置和sql_mode修改方法,感興趣的朋友一起看看吧
    2025-02-02
  • Spring jdbc中數(shù)據(jù)庫(kù)操作對(duì)象化模型的實(shí)例詳解

    Spring jdbc中數(shù)據(jù)庫(kù)操作對(duì)象化模型的實(shí)例詳解

    這篇文章主要介紹了Spring jdbc中數(shù)據(jù)庫(kù)操作對(duì)象化模型的實(shí)例詳解的相關(guān)資料,希望通過本文大家能夠了解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09

最新評(píng)論

金平| 河北区| 崇州市| 靖远县| 启东市| 泰来县| 汝阳县| 岳阳市| 临洮县| 繁峙县| 康保县| 瑞丽市| 满城县| 图木舒克市| 金山区| 泗洪县| 固原市| 岐山县| 新干县| 云林县| 牟定县| 南华县| 扎赉特旗| 大安市| 准格尔旗| 南京市| 松原市| 兴宁市| 响水县| 沧源| 堆龙德庆县| 安顺市| 泰安市| 朝阳区| 札达县| 宁都县| 永年县| 太和县| 许昌县| 正蓝旗| 福州市|