1. 程式人生 > >常見資料庫面試題整理

常見資料庫面試題整理



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

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

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

  • 儲存過程是一個預編譯的程式碼塊,執行效率比較高
  • 一個儲存過程替代大量T_SQL語句 ,可以降低網路通訊量,提高通訊速率
  • 可以一定程度上確保資料安全

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

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

你也可以這樣理解:索引就是加快檢索表中資料的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,索引也允許資料庫程式迅速地找到表中的資料,而不必掃描整個資料庫。

MySQL資料庫幾個基本的索引型別:普通索引、唯一索引、主鍵索引、全文索引

  • 索引加快資料庫的檢索速度
  • 索引降低了插入、刪除、修改等維護任務的速度
  • 唯一索引可以確保每一行資料的唯一性
  • 通過使用索引,可以在查詢的過程中使用優化隱藏器,提高系統的效能
  • 索引需要佔物理和資料空間

(三)什麼是事務?

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

事務性質:ACID :原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、永續性(Durability)。

(1) 原子性。即不可分割性,事務要麼全部被執行,要麼就全部不被執行。

(2) 一致性。事務的執行使得資料庫從一種正確狀態轉換成另一種正確狀態。

(3) 隔離性。在事務正確提交之前,不允許把該事務對資料的任何改變提供給任何其他事務。

(4) 永續性。事務正確提交後,其結果將永久儲存在資料庫中,即使在事務提交後有了其他故障,事務的處理結果也會得到儲存。

(四)資料庫的樂觀鎖和悲觀鎖是什麼?

資料庫管理系統(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
  • 保留表而刪除所有資料的時候用truncate
  • 想刪除部分資料行時候,用delete,並且帶上where子句

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

(1) 超鍵:在關係中能唯一標識元組的屬性集稱為關係模式的超鍵。一個屬性可以為作為一個超鍵,多個屬性組合在一起也可以作為一個超鍵。超鍵包含候選鍵和主鍵。

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

(3) 主鍵:資料庫表中對儲存資料物件予以唯一和完整標識的資料列或屬性的組合。一個數據列只能有一個主鍵,且主鍵的取值不能缺失,即不能為空值(Null)。

(4) 外來鍵:在一個表中存在的另一個表的主鍵稱此表的外來鍵。

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

檢視是一種虛擬的表,具有和物理表相同的功能。可以對檢視進行增,改,查,操作,檢視通常是有一個表或者多個表的行或列的子集。對檢視的修改不影響基本表。它使得我們獲取資料更容易,相比多表查詢。

  • 只暴露部分欄位給訪問者,所以就建一個虛表,就是檢視。
  • 查詢的資料來源於不同的表,而查詢者希望以統一的方式查詢,這樣也可以建立一個檢視,把多個表查詢結果聯合起來,查詢者只需要直接從檢視中獲取資料,不必考慮資料來源於不同表所帶來的差異

(十)說一說三個正規化。

第一正規化(1NF):資料庫表中的欄位都是單一屬性的,不可再分。這個單一屬性由基本型別構成,包括整型、實數、字元型、邏輯型、日期型等。

第二正規化(2NF):資料庫表中不存在非關鍵欄位對任一候選關鍵欄位的部分函式依賴(部分函式依賴指的是存在組合關鍵字中的某些欄位決定非關鍵欄位的情況),也即所有非關鍵欄位都完全依賴於任意一組候選關鍵字。 

第三正規化(3NF):在第二正規化的基礎上,資料表中如果不存在非關鍵欄位對任一候選關鍵欄位的傳遞函式依賴則符合第三正規化。所謂傳遞函式依賴,指的是如 果存在"A → B → C"的決定關係,則C傳遞函式依賴於A。因此,滿足第三正規化的資料庫表應該不存在如下依賴關係: 關鍵欄位 → 非關鍵欄位 x → 非關鍵欄位y

深入理解三個正規化:

為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計一個結構合理的關係型資料庫,必須滿足一定的正規化。

1.第一正規化(確保每列保持原子性)

第一正規化是最基本的正規化。如果資料庫表中的所有欄位值都是不可分解的原子值,就說明該資料庫表滿足了第一正規化。

第一正規化的合理遵循需要根據系統的實際需求來定。比如某些資料庫系統中需要用到“地址”這個屬性,本來直接將“地址”屬性設計成一個數據庫表的欄位就行。但是如果系統經常會訪問“地址”屬性中的“城市”部分,那麼就非要將“地址”這個屬性重新拆分為省份、城市、詳細地址等多個部分進行儲存,這樣在對地址中某一部分操作的時候將非常方便。這樣設計才算滿足了資料庫的第一正規化,如下表所示。

上表所示的使用者資訊遵循了第一正規化的要求,這樣在對使用者使用城市進行分類的時候就非常方便,也提高了資料庫的效能。

2.第二正規化(確保表中的每列都和主鍵相關)

第二正規化在第一正規化的基礎之上更進一層。第二正規化需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在一個數據庫表中,一個表中只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中。

比如要設計一個訂單資訊表,因為訂單中可能會有多種商品,所以要將訂單編號和商品編號作為資料庫表的聯合主鍵,如下表所示。

 訂單資訊表

這樣就產生一個問題:這個表中是以訂單編號和商品編號作為聯合主鍵。這樣在該表中商品名稱、單位、商品價格等資訊不與該表的主鍵相關,而僅僅是與商品編號相關。所以在這裡違反了第二正規化的設計原則。

而如果把這個訂單資訊表進行拆分,把商品資訊分離到另一個表中,把訂單專案表也分離到另一個表中,就非常完美了。如下所示。

這樣設計,在很大程度上減小了資料庫的冗餘。如果要獲取訂單的商品資訊,使用商品編號到商品資訊表中查詢即可。            

3.第三正規化(確保每列都和主鍵列直接相關,而不是間接相關)

第三正規化需要確保資料表中的每一列資料都和主鍵直接相關,而不能間接相關

比如在設計一個訂單資料表的時候,可以將客戶編號作為一個外來鍵和訂單表建立相應的關係。而不可以在訂單表中新增關於客戶其它資訊(比如姓名、所屬公司等)的欄位。如下面這兩個表所示的設計就是一個滿足第三正規化的資料庫表。

這樣在查詢訂單資訊的時候,就可以使用客戶編號來引用客戶資訊表中的記錄,也不必在訂單資訊表中多次輸入客戶資訊的內容,減小了資料冗餘。


相關推薦

常見資料庫面試題整理

(一)什麼是儲存過程?有哪些優缺點? 儲存過程是一些預編譯的SQL語句。 更加直白的理解:儲存過程可以說是一個記錄集,它是由一些T-SQL語句組成的程式碼塊,這些T-SQL語句程式碼像一個方法一樣實現一些功能(對單表或多表的增刪改查),然後再給這個程式碼塊取一個名字,在用到這個功能的時候呼叫他就行了。

資料庫面試題整理

1、exists和in有什麼區別? EXISTS用於檢查子查詢是否至少會返回一行資料,該子查詢實際上並不返回任何資料,而是返回值True或False,而In子查詢則是返回具體的資料值,與指定的欄位比較 EXISTS與IN的使用效率的問題,通常情況下采用exists要比in

資料庫面試題以及優化整理

1:什麼是事務?什麼是鎖?** 事務:就是被繫結在一起作為一個邏輯工作單元的SQL語句分組, 如果任何一個語句操作失敗那麼整個操作就被失敗, 以後操作就會回滾到操作前狀態,或者是上有個節點。 為了確保要麼執行,要麼不執行,就可以使用事務。 要將有組語句作為事務考慮,就需要通過ACID測試,即(事

常見的oracle資料庫面試題、oracle資料庫開發面試題

選擇題(20分,每題4分) 1. 利用遊標來修改資料時,所用的..FOR UPDATE充分利用了事務的哪個特性?() A、原子性 B、一致性 C、永久性 D、隔離性 下列說法,正確的說法是() A、只要在儲存過程中有增刪改語句,一定加自

資料庫面試題1

1.資料庫自增主鍵可能的問題 【 1、當資料庫匯出之後重新匯入(備份再恢復),主鍵會重新生成,如果有其他的表以這個主鍵作為外來鍵,那麼會導致這個關聯關係不存在。  2、資料量特別大時,會導致查詢資料庫操作變慢。此時需要進行資料庫的水平拆分,劃分到不同的資料庫中,那麼當新增資料時

常見SQL面試題整理(實時更新)

1) 有一張表,裡面有3個欄位:語文,數學,英語。其中有3條記錄分別表示語文70分,數學80分,英語58分,請用一條SQL語句查詢出這三條記錄並按以下條件顯示出來: 大於或等於80表示優秀,大於或等於60表示及格,小於60分表示不及格。 select (case when 語文

sql資料庫面試題(概念類)

1.觸發器的作用?   答:觸發器是一中特殊的儲存過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護資料的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某表上的觸發器上包含對另一個表的資料操作,而該操作又會導致該表觸發器被

資料庫面試題---MySql

1、SQL的select語句完整的執行過程 SQL Select語句完整的執行順序: 1、from 子句組裝來自不同資料來源的資料; 2、where 子句基於指定的條件對記錄行進行篩選; 3、group by 子句將資料劃分為多個分組; 4、使用聚集函式進行計算; 5、使

關於MySQL資料庫面試題

一.基礎筆試命令考察 開啟MySQL服務 service mysqld start /init.d/mysqld start safe_mysql & 關閉mysql服務 service mysqld stop /etc/init.d/m

史上最全的資料庫面試題,不看絕對後悔

資料庫面試知識點彙總 一、基本概念 1.主鍵、外來鍵、超鍵、候選鍵 超鍵:在關係中能唯一標識元組的屬性集稱為關係模式的超鍵。一個屬性可以為作為一個超鍵,多個屬性組合在一起也可以作為一個超鍵。超鍵包含候選鍵和主鍵。 候選鍵:是最小超鍵,即沒有冗餘元素的超鍵。 主鍵:資料庫表中對儲存資料物件予以唯一和完

資料庫面試題---原理

1、觸發器的作用? 觸發器是一種特殊的儲存過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護資料的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某表上的觸發器上包含對另一個表的資料操作,而該操作又會導致該表觸發器被觸發。

資料庫面試題(mysql,nosql)

//2015年5月1日 一、索引 聚集索引、非聚集索引 前者B樹葉子節點包含資料,後者葉子節點包含資料地址 聚集索引優點:提升IO密集負載效能;缺點:插入代價高 索引缺點:維護索引耗時;佔用空間大 建索引須知:建在where,group by,排序等列上;不建在性別等少數類

資料庫面試題彙總

目錄 資料庫 資料庫的定義 SQL SQL語言包括 資料定義 資料操縱 資料控制 完整性約束 SQL約束 儲存過程 儲存過程的定義

J2EE面試題及其資料庫面試題集錦,附答案

<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><iframe name="google_ads_frame

Oracle資料庫面試題總結

1、SQL語句分類 DQL(資料查詢語言)select DML(資料操作語言)insert、delete、update DDL(資料定義語言)create、drop、alter DCL(資料控制語言)grant:把許可權授予使用者、revoke:把許可權從使用者收回 TP

資料庫面試題(2)

1、如何查詢表中前十條資料? 現有表users; 在mysql中 select * from users limit 0,10; 也可以把0去掉,即為: select * from users limit 10; 在oracle中 select * from users where rownum

機器學習演算法崗常見筆試面試題整理

資料庫中的主鍵、索引和外來鍵(資料分析崗經常問) 決策樹ID3和C4.5的差別?各自優點? Boost演算法 CART(迴歸樹用平方誤差最小化準則,分類樹用基尼指數最小化準則) GBDT與隨機森林演算法的原理以及區別。 優化演算法中常遇到的KKT條件?作用是? 最近鄰演算法KNN(分類與迴歸)

資料庫面試題(三)

41、查詢各職位的員工工資的最大值,最小值,平均值,總和 select job, max(sal),min(sal), avg(sal), sum(sal)  fromemp  groupby

Mysql有關的資料庫面試題

1.資料庫事務的四個特性:    原子性,一致性,隔離性,永續性2.檢視的作用: 檢視是虛擬的表,與包含資料的表不一樣,檢視只包含使用時動態檢索資料的查詢;不包含任何列或資料。使用檢視可以簡化複雜的sql操作,隱藏具體的細節,保護資料;檢視建立後,可以使用與表相同的方式利用它

資料試題整理——加拿大28原始碼軟體下載

JAVA相關 1-1)List 與set 的區別? 加拿大28原始碼軟體下載【大神原始碼論壇】dsluntan.com  【布丁原始碼論壇】budingbbs.com 企娥3393756370 掉牙的問題了,還在這裡老生常談:List特點:元素有放入順序,元素可重複 ,