MySQL一直是面試中的熱點問題,也難道了很多的面試者。其實MySQL沒那么難,只是大家沒有系統化、實戰性的過去學習、總結。同時很多開發者在實際的開發過程中也很少去接觸一些偏向底層的知識。
本手冊,已總結成完整的PDF文檔。想獲取該文檔,請到文章末尾領取。
今天這篇文章,將為大家總結MySQL中場景的面試題。圍繞索引、事務、鎖等幾個方面的熱點問題,系統化的總結。大致分為如下大綱:



需要完整資料的看這里
根據提示 添加小助理領取:160道MySQL面試題

什么是MySQL?
MySQL是?個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,屬于 Oracle 旗下產品。MySQL 是最流?的關系型數據庫管理系統之?,在 WEB 應???,MySQL是最好的RDBMS (Relational Database Management System,關系數據庫管理系統) 應?軟件之?。在Java企業級開發中?常常?,因為 MySQL 是開源免費的,并且?便擴展。
MySql, Oracle,Sql Service的區別?
1. Sql Service只能在Windows上使?,?MySql和Oracle可以在其他系統上使?, ?且可以?持數據庫不同系統之間的移植
2. MySql開源免費的,Sql Service和Oracle要錢。
3. 我從?到?排序哈,MySql很?,Sql Service居中,Oracle最?
4. Oracle?持?并發量,?訪問量,Sql Service還?,?MySql的話壓?沒這么?,因此現在的MySql的話最好是要使?集群或者緩存來搭配使?
5. Oracle?持多?戶不同權限來進?操作,?MySql只要有登錄權限就可操作全部數據庫
6. 安裝所?的空間差別也是很?的,Mysql安裝完后才?百M?Oracle有?G左右,且使?的時候Oracle占?特別?的內存空間和其他機器性能。
7. 做分?的話,MySql使?Limit,Sql Service使?top,Oracle使?row
8. Oracle沒有?動增?類型,Mysql和Sql Service?般使??動增?類型
什么是索引?
索引是一種特殊的文件(innoDB數據表上的索引是表空間的一個組成部分),它們包含著對數據表里所有記錄的引用指針
索引是一種數據結構。數據庫索引,是數據庫管理系統中一個排序的數據結構,以協助快速查詢、更新數據庫表中數據。索引的實現通常使用B樹及其變種B+樹。
更通俗的說,索引就相當于目錄。為了方便查找書中的內容,通過對內容建立索引形成目錄索引是一個文件,它是要占據物理空間的。
索引的使用場景?
1.當數據多且字段值有相同的值得時候用普通索引。
2.當字段多且字段值沒有重復的時候用唯一索引。
3.當有多個字段名都經常被查詢的話用復合索引。
4.普通索引不支持空值,唯一索引支持空值。
5.但是,若是這張表增刪改多而查詢較少的話,就不要創建索引了,因為如果你給一列創建了索引,那么對該列進行增刪改的時候,都會先訪問這一列的索引,
6.若是增,則在這一列的索引內以新填入的這個字段名的值為名創建索引的子集
7.若是改,則會把原來的刪掉,再添入一個以這個字段名的新值為名創建索引的子集,
8.若是刪,則會把索引中以這個字段為名的索引的子集刪掉。
9.所以,會對增刪改的執行減緩速度,
10.所以,若是這張表增刪改多而查詢較少的話,就不要創建索引了,
11.更新太頻繁地字段不適合創建索引。
12.不會出現在where條件中的字段不該建立索引。
B樹和B+樹的區別?
在B樹中,你可以將鍵和值存放在內部節點和葉子節點;但在B+樹中,內部節點都是鍵,沒有值,葉子節點同時存放鍵和值。
B+樹的葉子節點有一條鏈相連,而B樹的葉子節點各自獨立。

非聚簇索引一定會回表查詢嗎?
當數據庫有并發事務的時候,可能會產生數據的不一致,這時候需要一些機制來保證訪問的次序,鎖機制就是這樣的一個機制。就像酒店的房間,如果大家隨意進出,就會出現多人搶奪同一個房間的情況,而在房間上裝上鎖,申請到鑰匙的人才可以入住并且將房間鎖起來,其他人只有等他使用完畢才可以再次使用。
什么是死鎖?怎么解決?
死鎖是指兩個或多個事務在同一資源上相互占用,并請求鎖定對方的資源,從而導致惡性循環的現象。
常見的解決死鎖的方法:
- 如果不同程序會并發存取多個表,盡量約定以相同的順序訪問表,可以大大降低死鎖機會。
- 在同一個事務中,盡可能做到一次鎖定所需要的所有資源,減少死鎖產生概率
- 對于非常容易產生死鎖的業務部分,可以嘗試使用升級鎖定顆粒度,通過表級鎖定來減少死鎖產生的概率
為什么要使用視圖?什么是視圖?
為了提高復雜SQL語句的復用性和表操作的安全性,MySQL數據庫管理系統提供了視圖特性。所謂視圖,本質上是一種虛擬表,在物理上是不存在的,其內容與真實的表相似,包含一系列帶有名稱的列和行數據。但是,視圖并不在數據庫中以儲存的數據值形式存在。行和列數據來自定義視圖的查詢所引用基本表,并且在具體引用視圖時動態生成。
視圖使開發者只關心感興趣的某些特定數據和所負責的特定任務,只能看到視圖中所定義的數據,而不是視圖所引用表中的數據,從而提高了數據庫中數據的安全性。
SQL語句主要分為哪幾類?
- 數據定義語言DDL(Data Ddefinition Language)CREATE,DROP,ALTER主要為以上操作 即對邏輯結構等有操作的,其中包括表結構,視圖和索引。
- 數據查詢語言DQL(Data Query Language)SELECT這個較為好理解 即查詢操作,以select關鍵字。各種簡單查詢,連接查詢等 都屬于DQL。
- 數據操縱語言DML(Data Manipulation Language)INSERT,UPDATE,DELETE主要為以上操作 即對數據進行操作的,對應上面所說的查詢操作 DQL與DML共同構建了多數初級程序員常用的增刪改查操作。而查詢是較為特殊的一種 被劃分到DQL中。
- 數據控制功能DCL(DataControlLanguage)GRANT,REVOKE,COMMIT,ROLLBACK主要為以上操作 即對數據庫安全性完整性等有操作的,可以簡單的理解為權限控制等。
資料整理自網絡,僅作免費交流分享,侵權刪!
需要完整資料的看這里
根據提示 添加小助理領取:160道MySQL面試題

本文鏈接:http://www.royaladd.com/45246.html
網友評論comments