中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL的高頻面試題有哪些

發布時間:2021-10-22 09:45:23 來源:億速云 閱讀:126 作者:iii 欄目:數據庫

本篇內容介紹了“MySQL的高頻面試題有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1.什么是關系型數據庫?談談你對 MySQL 的認識。

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

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

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

這個問題也經常被問到,和『InnoDB 與 MyISAM 引擎的區別』問題相似。

常見的幾種存儲引擎:

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

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

  • Memory: 數據都在內存中,數據的處理速度快,但是安全性不高。

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

InnoDB 與 MyISAM 引擎的幾點區別:

  • InnoDB 支持事務,MyISAM 不支持事務。

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

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

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

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

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

  • 存儲結構不同,MyISAM 表分為 frm MYD MYI 三個,InnoDB 一般分為 frm ibd 兩個。

3.描述下 MySQL 基礎架構。

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

MySQL的高頻面試題有哪些

MySQL的邏輯架構圖

MySQL的邏輯架構主要分為3層:

  1. 鴻蒙官方戰略合作共建——HarmonyOS技術社區

  2. 第一層:對客戶端的連接處理、安全認證、授權等,每個客戶端連接都會在服務端擁有一個線程,每個連接發起的查詢都會在對應的單獨線程中執行。

  3. 第二層:MySQL的核心服務功能層,包括查詢解析、分析、查詢緩存、內置函數、存儲過程、觸發器、視圖等,select操作會先檢查是否命中查詢緩存,命中則直接返回緩存數據,否則解析查詢并創建對應的解析樹。

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

一條 select 語句執行流程:

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

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

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

  • 若語句合法,會來到優化器,優化器會為 SQL 語句選擇最優的執行計劃。

  • 最后來到執行器,如果用戶對表有操作權限,執行器會調用存儲引擎提供的接口來執行 SQL 語句,然后將查詢結果返回給客戶端,查詢到此結束。

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

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

常用的字段類型分類:

數值型:

MySQL的高頻面試題有哪些

字符串類型:

MySQL的高頻面試題有哪些

日期和時間類型:

MySQL的高頻面試題有哪些

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

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

5.講講索引的作用及結構及使用規范。

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

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

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

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

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

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

MySQL 事務相關問題也經常被問到,一些原理性的東西還是需要深入去學習的。

ACID 四個特性:

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

  • C(Consistency,一致性):數據庫總是從一個一致性狀態轉換到另一個一致性狀態,若破壞約束,則不滿足一致性條件。

  • I(Isolation,隔離性):一個事務的執行不能其它事務干擾。即一個事務內部的操作及使用的數據對其它并發事務是隔離的,并發執行的各個事務之間不能互相干擾。

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

事務隔離級別:

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

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

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

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

并發事務帶來的問題:

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

  • 不可重復讀(Non-Repeatable Reads):事務 A  多次讀取同一數據,事務B在事務A多次讀取的過程中,對數據作了更新并提交,導致事務A多次讀取同一數據時,結果不一致。

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

“MySQL的高頻面試題有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泰兴市| 武宣县| 和龙市| 漠河县| 晴隆县| 林芝县| 白玉县| 本溪市| 镇原县| 南昌市| 武城县| 若羌县| 临沭县| 平昌县| 固安县| 铁岭市| 西乡县| 天台县| 新绛县| 博兴县| 松原市| 惠州市| 镇安县| 凤翔县| 临武县| 安吉县| 宝山区| 汾阳市| 阿克苏市| 阿勒泰市| 米泉市| 墨脱县| 星子县| 长丰县| 兴海县| 海安县| 元江| 昭平县| 安岳县| 莒南县| 噶尔县|