天天看點

備戰秋招——資料庫(1)

備戰秋招——資料庫(1)

● 請你說一說資料庫索引

參考回答:

索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速通路資料庫表中的特定資訊。如果想按特定職員的姓來查找他或她,則與在表中搜尋所有的行相比,索引有助于更快地擷取資訊。

索引的一個主要目的就是加快檢索表中資料的方法,亦即能協助資訊搜尋者盡快的找到符合限制條件的記錄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)

原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗復原,[删删删]是以事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響。

  1. 一緻性(Consistency)

一緻性是指事務必須使資料庫從一個一緻性狀态變換到另一個一緻性狀态,也就是說一個事務執行之前和執行之後都必須處于一緻性狀态。

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

  1. 隔離性(Isolation)

隔離性是當多個使用者并發通路資料庫時,比如操作同一張表時,資料庫為每一個使用者開啟的事務,不能被其他事務的操作所幹擾,多個并發事務之間要互相隔離。

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

多個事務并發通路時,事務之間是隔離的,一個事務不應該影響其它事務運作效果。

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

不同的隔離級别:

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

Read Committed(讀取送出内容):隻有在事務送出後,其更新結果才會被其他事務看見。可以解決髒讀問題。

Repeated Read(可重複讀):在一個事務中,對于同一份資料的讀取結果總是相同的,無論是否有其他事務對這份資料進行操作,以及這個事務是否送出。可以解決髒讀、不可重複讀。

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

  1. 持久性(Durability)

持久性是指一個事務一旦被送出了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丢失送出事務的操作。

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

**

● 請你說一說資料庫的三大範式

**

參考回答:

第一範式:當關系模式R的所有屬性都不能再分解為更基本的資料機關時,稱R是滿足第一範式,即屬性不可分

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

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

**

● 請你介紹一下資料庫的ACID特性

**

參考回答:

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

2)一緻性:資料庫在事務執行前後都保持一緻性狀态,在一緻性狀态下,所有事務對一個資料的讀取結果都是相同的。

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

4)持久性:一旦事務送出,則其所做的修改将會永遠儲存到資料庫中。

備戰秋招——資料庫(1)

繼續閱讀