數據庫基礎面試題(一)


● 請你說一說數據庫索引

參考回答:

索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息。如果想按特定職員的姓來查找他或她,則與在表中搜索所有的行相比,索引有助於更快地獲取信息。

索引的一個主要目的就是加快檢索表中數據的方法,亦即能協助信息搜索者盡快的找到符合限制條件的記錄ID的輔助數據結構。

● 請你說一說數據庫事務

參考回答:

數據庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要么完全地執行,要么完全地不執行。 事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向數據的資源。通過將一組相關操作組合為一個要么全部成功要么全部失敗的單元,可以簡化錯誤恢復並使應用程序更加可靠。一個邏輯工作單元要成為事務,必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性。事務是數據庫運行中的邏輯工作單位,由DBMS中的事務管理子系統負責事務的處理。

● 請你說一說數據庫事務隔離

參考回答:

同一時間,只允許一個事務請求同一數據,不同的事務之間彼此沒有任何干擾。比如A正在從一張銀行卡中取錢,在A取錢的過程結束前,B不能向這張卡轉賬。

● 請你說一說inner join和left join

參考回答:

left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄 right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄
inner join(等值連接) 只返回兩個表中聯結字段相等的行

● 請你聊一聊數據庫事物的一致性

參考回答:

事務(Transaction)是由一系列對系統中數據進行訪問與更新的操作所組成的一個程序執行邏輯單元。事務是DBMS中最基礎的單位,事務不可分割。

事務具有4個基本特征,分別是:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Duration),簡稱ACID。

1)原子性(Atomicity)

原子性是指事務包含的所有操作要么全部成功,要么全部失敗回滾,[刪刪刪]因此事務的操作如果成功就必須要完全應用到數據庫,如果操作失敗則不能對數據庫有任何影響。

2)一致性(Consistency)

一致性是指事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之后都必須處於一致性狀態。

拿轉賬來說,假設用戶A和用戶B兩者的錢加起來一共是5000,那么不管A和B之間如何轉賬,轉幾次賬,事務結束后兩個用戶的錢相加起來應該還得是5000,這就是事務的一致性。

3)隔離性(Isolation)

隔離性是當多個用戶並發訪問數據庫時,比如操作同一張表時,數據庫為每一個用戶開啟的事務,不能被其他事務的操作所干擾,多個並發事務之間要相互隔離。

即要達到這么一種效果:對於任意兩個並發的事務T1和T2,在事務T1看來,T2要么在T1開始之前就已經結束,要么在T1結束之后才開始,這樣每個事務都感覺不到有其他事務在並發地執行。

多個事務並發訪問時,事務之間是隔離的,一個事務不應該影響其它事務運行效果。這指的是在並發環境中,當不同的事務同時操縱相同的數據時,每個事務都有各自的完整數據空間。由並發事務所做的修改必須與任何其他並發事務所做的修改隔離。

不同的隔離級別:

Read Uncommitted(讀取未提交[添加中文釋義]內容):最低的隔離級別,什么都不需要做,一個事務可以讀到另一個事務未提交的結果。所有的並發事務問題都會發生。

Read Committed(讀取提交內容):只有在事務提交后,其更新結果才會被其他事務看見。可以解決臟讀問題。

Repeated Read(可重復讀):在一個事務中,對於同一份數據的讀取結果總是相同的,無論是否有其他事務對這份數據進行操作,以及這個事務是否提交。可以解決臟讀、不可重復讀。

Serialization(可串行化):事務串行化執行,隔離級別最高,犧牲了系統的並發性。可以解決並發事務的所有問題。

4)持久性(Durability)

持久性是指一個事務一旦被提交了,那么對數據庫中的數據的改變就是永久性的,即便是在數據庫系統遇到故障的情況下也不會丟失提交事務的操作。

例如我們在使用JDBC操作數據庫時,在提交事務方法后,提示用戶事務操作完成,當我們程序執行完成直到看到提示后,就可以認定事務以及正確提交,即使這時候數據庫出現了問題,也必須要將我們的事務完全執行完成,否則就會造成我們看到提示事務處理完畢,但是數據庫因為故障而沒有執行事務的重大錯誤。

 

 

 

● 請你說說索引是什么,多加索引一定會好嗎

參考回答:

1、索引

數據庫索引是為了增加查詢速度而對表字段附加的一種標識,是對數據庫表中一列或多列的值進行排序的一種結構。

DB在執行一條Sql語句的時候,默認的方式是根據搜索條件進行全表掃描,遇到匹配條件的就加入搜索結果集合。如果我們對某一字段增加索引,查詢時就會先去索引列表中一次定位到特定值的行數,大大減少遍歷匹配的行數,所以能明顯增加查詢的速度。

優點:

通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。

可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。

可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。

在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。

通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。

缺點:

創建索引和維護索引要耗費時間,這種時間隨着數據量的增加而增加。

索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。

當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。

2、添加索引原則

在查詢中很少使用或者參考的列不應該創建索引。這是因為,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。

只有很少數據值的列也不應該增加索引。這是因為,由於這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的數據行占了表中數據行的很大比例,即需要在表中搜索的數據行的比例很大。增加索引,並不能明顯加快檢索速度。

定義為text、image和bit數據類型的列不應該增加索引。這是因為,這些列的數據量要么相當大,要么取值很少。

當修改性能遠遠大於檢索性能時,不應該創建索引。這是因為,修改性能和檢索性能是互相矛盾的。當增加索引時,會提高檢索性能,但是會降低修改性能。當減少索引時,會提高修改性能,降低檢索性能。因此,當修改性能遠遠大於檢索性能時,不應該創建索引。

 

● 請你說一下數據庫事務以及四個特性

參考回答:

事務(Transaction)是由一系列對系統中數據進行訪問與更新的操作所組成的一個程序執行邏輯單元。事務是DBMS中最基礎的單位,事務不可分割。

事務具有4個基本特征,分別是:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Duration),簡稱ACID。

1. 原子性(Atomicity)

原子性是指事務包含的所有操作要么全部成功,要么全部失敗回滾,[刪刪刪]因此事務的操作如果成功就必須要完全應用到數據庫,如果操作失敗則不能對數據庫有任何影響。

2. 一致性(Consistency)

一致性是指事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之后都必須處於一致性狀態。

拿轉賬來說,假設用戶A和用戶B兩者的錢加起來一共是5000,那么不管A和B之間如何轉賬,轉幾次賬,事務結束后兩個用戶的錢相加起來應該還得是5000,這就是事務的一致性。

3. 隔離性(Isolation)

隔離性是當多個用戶並發訪問數據庫時,比如操作同一張表時,數據庫為每一個用戶開啟的事務,不能被其他事務的操作所干擾,多個並發事務之間要相互隔離。

即要達到這么一種效果:對於任意兩個並發的事務T1和T2,在事務T1看來,T2要么在T1開始之前就已經結束,要么在T1結束之后才開始,這樣每個事務都感覺不到有其他事務在並發地執行。

多個事務並發訪問時,事務之間是隔離的,一個事務不應該影響其它事務運行效果。

這指的是在並發環境中,當不同的事務同時操縱相同的數據時,每個事務都有各自的完整數據空間。由並發事務所做的修改必須與任何其他並發事務所做的修改隔離。

不同的隔離級別:

Read Uncommitted(讀取未提交[添加中文釋義]內容):最低的隔離級別,什么都不需要做,一個事務可以讀到另一個事務未提交的結果。所有的並發事務問題都會發生。

Read Committed(讀取提交內容):只有在事務提交后,其更新結果才會被其他事務看見。可以解決臟讀問題。

Repeated Read(可重復讀):在一個事務中,對於同一份數據的讀取結果總是相同的,無論是否有其他事務對這份數據進行操作,以及這個事務是否提交。可以解決臟讀、不可重復讀。

Serialization(可串行化):事務串行化執行,隔離級別最高,犧牲了系統的並發性。可以解決並發事務的所有問題。

4. 持久性(Durability)

持久性是指一個事務一旦被提交了,那么對數據庫中的數據的改變就是永久性的,即便是在數據庫系統遇到故障的情況下也不會丟失提交事務的操作。

例如我們在使用JDBC操作數據庫時,在提交事務方法后,提示用戶事務操作完成,當我們程序執行完成直到看到提示后,就可以認定事務以及正確提交,即使這時候數據庫出現了問題,也必須要將我們的事務完全執行完成,否則就會造成我們看到提示事務處理完畢,但是數據庫因為故障而沒有執行事務的重大錯誤。

 

● 請你說一說數據庫的三大范式

參考回答:

第一范式:當關系模式R的所有屬性都不能再分解為更基本的數據單位時,稱R是滿足第一范式,即屬性不可分

第二范式:如果關系模式R滿足第一范式,並且R得所有非主屬性都完全依賴於R的每一個候選關鍵屬性,稱R滿足第二范式

第三范式:設R是一個滿足第一范式條件的關系模式,X是R的任意屬性集,如果X非傳遞依賴於R的任意一個候選關鍵字,稱R滿足第三范式,即非主屬性不傳遞依賴於鍵碼

● 請你介紹一下數據庫的ACID特性

參考回答:

1)原子性:事務被視為不可分割的最小單元,事物的所有操作要不成功,要不失敗回滾,而回滾可以通過日志來實現,日志記錄着事務所執行的修改操作,在回滾時反向執行這些修改操作。

2)一致性:數據庫在事務執行前后都保持一致性狀態,在一致性狀態下,所有事務對一個數據的讀取結果都是相同的。

3)隔離性:一個事務所做的修改在最終提交以前,對其他事務是可不見的。

4)持久性:一旦事務提交,則其所做的修改將會永遠保存到數據庫中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM