架構師必備之常見面試題整理——數據庫靈魂十問!

常見的數據庫面試題有哪些

架構師必備之常見面試題整理——數據庫靈魂十問!

(一)什麼是存儲過程?有哪些優缺點?面試

存儲過程是一些預編譯的SQL語句。數據庫

更加直白的理解:存儲過程能夠說是一個記錄集,它是由一些T-SQL語句組成的代碼塊,這些T-SQL語句代碼像一個方法同樣實現一些功能(對單表或多表的增刪改查),而後再給這個代碼塊取一個名字,在用到這個功能的時候調用他就好了。安全

存儲過程是一個預編譯的代碼塊,執行效率比較高網絡

一個存儲過程替代大量T_SQL語句 ,能夠下降網絡通訊量,提升通訊速率數據結構

能夠必定程度上確保數據安全架構

(二)索引是什麼?有什麼做用以及優缺點?併發

索引是對數據庫表中一或多個列的值進行排序的結構,是幫助MySQL高效獲取數據的數據結構ide

你也能夠這樣理解:索引就是加快檢索表中數據的方法。數據庫的索引相似於書籍的索引。在書籍中,索引容許用戶沒必要翻閱完整個書就能迅速地找到所須要的信息。在數據庫中,索引也容許數據庫程序迅速地找到表中的數據,而沒必要掃描整個數據庫。函數

MySQL數據庫幾個基本的索引類型:普通索引、惟一索引、主鍵索引、全文索引性能

索引加快數據庫的檢索速度

索引下降了插入、刪除、修改等維護任務的速度

惟一索引能夠確保每一行數據的惟一性

經過使用索引,能夠在查詢的過程當中使用優化隱藏器,提升系統的性能

索引須要佔物理和數據空間 

(三)什麼是事務?

事務(Transaction)是併發控制的基本單位。所謂的事務,它是一個操做序列,這些操做要麼都執行,要麼都不執行,它是一個不可分割的工做單位。事務是數據庫維護數據一致性的單位,在每一個事務結束時,都能保持數據一致性。

(四)數據庫的樂觀鎖和悲觀鎖是什麼?

數據庫管理系統(DBMS)中的併發控制的任務是確保在多個事務同時存取數據庫中同一數據時不破壞事務的隔離性和統一性以及數據庫的統一性。

樂觀併發控制(樂觀鎖)和悲觀併發控制(悲觀鎖)是併發控制主要採用的技術手段。

  • 悲觀鎖:假定會發生併發衝突,屏蔽一切可能違反數據完整性的操做

  • 樂觀鎖:假設不會發生併發衝突,只在提交操做時檢查是否違反數據完整性。

(五) 使用索引查詢必定能提升查詢的性能嗎?爲何

一般,經過索引查詢數據比全表掃描要快.可是咱們也必須注意到它的代價.

索引須要空間來存儲,也須要按期維護, 每當有記錄在表中增減或索引列被修改時,索引自己也會被修改. 這意味着每條記錄的INSERT,DELETE,UPDATE將爲此多付出4,5 次的磁盤I/O. 由於索引須要額外的存儲空間和處理,那些沒必要要的索引反而會使查詢反應時間變慢.使用索引查詢不必定能提升查詢性能,索引範圍查詢(INDEX RANGE SCAN)適用於兩種狀況:

基於一個範圍的檢索,通常查詢返回結果集小於表中記錄數的30%

基於非惟一性索引的檢索

(六)簡單說一說drop、deletetruncate的區別

SQL中的drop、delete、truncate都表示刪除,可是三者有一些差異

delete和truncate只刪除表的數據不刪除表的結構

速度,通常來講: drop> truncate >delete 

delete語句是dml,這個操做會放到rollback segement中,事務提交以後才生效;

若是有相應的trigger,執行的時候將被觸發. truncate,drop是ddl, 操做當即生效,原數據不放到rollback segment中,不能回滾. 操做不觸發trigger

(七)drop、deletetruncate分別在什麼場景之下使用?

再也不須要一張表的時候,用drop

想刪除部分數據行時候,用delete,而且帶上where子句

保留表而刪除全部數據的時候用truncate

(八) 超鍵、候選鍵、主鍵、外鍵分別是什麼?

  • 超鍵:在關係中能惟一標識元組的屬性集稱爲關係模式的超鍵。一個屬性能夠爲做爲一個超鍵,多個屬性組合在一塊兒也能夠做爲一個超鍵。超鍵包含候選鍵和主鍵。

  • 候選鍵:是最小超鍵,即沒有冗餘元素的超鍵。

  • 主鍵:數據庫表中對儲存數據對象予以惟一和完整標識的數據列或屬性的組合。一個數據列只能有一個主鍵,且主鍵的取值不能缺失,即不能爲空值(Null)。

  • 外鍵:在一個表中存在的另外一個表的主鍵稱此表的外鍵。

(九)什麼是視圖?以及視圖的使用場景有哪些?

視圖是一種虛擬的表,具備和物理表相同的功能。能夠對視圖進行增,改,查,操做,試圖一般是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得咱們獲取數據更容易,相比多表查詢。

只暴露部分字段給訪問者,因此就建一個虛表,就是視圖。

查詢的數據來源於不一樣的表,而查詢者但願以統一的方式查詢,這樣也能夠創建一個視圖,把多個表查詢結果聯合起來,查詢者只須要直接從視圖中獲取數據,沒必要考慮數據來源於不一樣表所帶來的差別

(十)說一說三個範式。

第一範式(1NF):數據庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本類型構成,包括整型、實數、字符型、邏輯型、日期型等。

第二範式(2NF):數據庫表中不存在非關鍵字段對任一候選關鍵字段的部分函數依賴(部分函數依賴指的是存在組合關鍵字中的某些字段決定非關鍵字段的狀況),也即全部非關鍵字段都徹底依賴於任意一組候選關鍵字。 

第三範式(3NF):在第二範式的基礎上,數據表中若是不存在非關鍵字段對任一候選關鍵字段的傳遞函數依賴則符合第三範式。所謂傳遞函數依賴,指的是如 果存在"A → B → C"的決定關係,則C傳遞函數依賴於A。所以,知足第三範式的數據庫表應該不存在以下依賴關係: 關鍵字段 → 非關鍵字段 x → 非關鍵字段y

寫在最後:

歡迎你們關注我新開通的公衆號【風平浪靜如碼】,海量Java相關文章,學習資料都會在裏面更新,整理的資料也會放在裏面。

以爲寫的還不錯的就點個贊,加個關注唄!點關注,不迷路,持續更新!!!

相關文章
相關標籤/搜索