資料庫面試題

2021-05-08 08:50:06 字數 5525 閱讀 4965

維護資料庫的完整性、一致性、你喜歡用觸發器還是自寫業務邏輯?為什麼?

答:盡可能用約束(包括check、主鍵、唯一鍵、外來鍵、非空字段)實現,這種方式的效率最好;其次用觸發器,這種方式可以保證無論何種業務系統訪問資料庫都能維持資料庫的完整性、一致性;最後再考慮用自寫業務邏輯實現,但這種方式效率最低、程式設計最複雜,當為下下之策。

什麼是事務?什麼是鎖?

答:事務是指乙個工作單元,它包含了一組資料操作命令,並且所有的命令作為乙個整體一起向系統提交或撤消請求操作,即這組命令要麼都執行,要麼都不執行。

鎖是在多使用者環境中對資料的訪問的限制。sqlserver自動鎖定特定記錄、欄位或檔案,防止使用者訪問,以維護資料安全或防止併發資料操作問題,鎖可以保證事務的完整性和併發性。

什麼是索引,有什麼優點?

答:索引象書的目錄類似,索引使資料庫程式無需掃瞄整個表,就可以在其中找到所需要的資料,索引包含了乙個表中包含值的列表,其中包含了各個值的行所儲存的位置,索引可以是單個或一組列,索引提供的表中資料的邏輯位置,合理劃分索引能夠大大提高資料庫效能。

檢視是什麼?游標是什麼?

答:檢視是一種虛擬表,虛擬表具有和物理表相同的功能,可以對虛擬表進行增該查操作,檢視通常是乙個或多個表的行或列的子集,檢視的結果更容易理解(修改檢視對基表不影響),獲取資料更容易(相比多表查詢更方便),限制資料檢索(比如需要隱藏某些行或列),維護更方便。

游標對查詢出來的結果集作為乙個單元來有效的處理,游標可以定位在結果集的特定行、從結果集的當前位置檢索一行或多行、可以對結果集中當前位置進行修改、

什麼是儲存過程?有什麼優點?

答:儲存過程是一組予編譯的sql語句,它的優點有1.允許模組化程式設計,就是說只需要建立一次過程,以後在程式中就可以呼叫該過程任意次。

2.允許更快執行,如果某操作需要執行大量sql語句或重複執行,儲存過程比sql語句執行的要快。3.

減少網路流量,例如乙個需要數百行的sql**的操作有一條執行語句完成,不需要在網路中傳送數百行**。4.更好的安全機制,對於沒有許可權執行儲存過程的使用者,也可授權他們執行儲存過程。

什麼是觸發器?

答:出發器是一種特殊型別的儲存過程,出發器主要通過事件觸發而被執行的,觸發器的優點:1.

強化約束,觸發器能夠提供比check約束。2.跟蹤變化,觸發器可以跟蹤資料庫內的操作,從而不允許未經允許許可的更新和變化。

3.聯級運算,比如某個表上的觸發器中包含對另乙個表的資料操作,而該操作又導致該錶上的觸發器被觸發。

1. 在乙個查詢中,使用哪乙個關鍵字能夠除去重複列值?

答案:使用distinct關鍵字

2. 什麼是快照?它的作用是什麼?

答案:快照snapshot是乙個檔案系統在特定時間裡的映象,對於**實時資料備份非常有用。快照對於擁有不能停止的應用或具有常開啟檔案的檔案系統的備份非常重要。

對於只能提供乙個非常短的備份時間而言,快照能保證系統的完整性。

3. 解釋儲存過程和觸發器

答案:儲存過程是一組transact-sql語句,在一次編譯後可以執行多次。因為不必重新編譯transact-sql語句,所以執行儲存過程可以提高效能。

觸發器是一種特殊型別的儲存過程,不由使用者直接呼叫。建立觸發器時會對其進行定義,以便在對特定表或列作特定型別的資料修改時執行。

4. sql server是否支援行級鎖,有什麼好處?

答案:支援動態行級鎖定

sql server 2000動態地將查詢所引用的每乙個表的鎖定粒度調整到合適的級別。當查詢所引用的少數幾行分散在乙個大型表中時,優化資料並行訪問的最佳辦法是使用粒度鎖,如行鎖。但是,如果查詢引用的是乙個表中的大多數行或所有行,優化資料並行訪問的最佳辦法可以是鎖定整個表,以儘量減少鎖定開銷並盡快完成查詢。

sql serve 2000通過為每個查詢中的每個表選擇適當的鎖定級別,在總體上優化了資料併發訪問。對於乙個查詢,如果只引用乙個大型表中的幾行,則資料庫引擎可以使用行級鎖定;如果引用乙個大型表的幾頁中的多行,則使用頁級鎖定;如果引用乙個小型表中的所有行,則使用表級鎖定。

5. 資料庫日誌幹什麼用,資料庫日誌滿的時候再查詢資料庫時會出現什麼情況。

答案:每個資料庫都有事務日誌,用以記錄所有事務和每個事務對資料庫所做的修改。

6. 儲存過程和函式的區別?

答案:儲存過程是使用者定義的一系列sql語句的集合,涉及特定表或其它物件的任務,使用者可以呼叫儲存過程,而函式通常是資料庫已定義的方法,它接收引數並返回某種型別的值並且不涉及特定使用者表

7. 事務是什麼?

答案:事務是作為乙個邏輯單元執行的一系列操作,乙個邏輯工作單元必須有四個屬性,稱為 acid(原子性、一致性、隔離性和永續性)屬性,只有這樣才能成為乙個事務:

(1) 原子性

事務必須是原子工作單元;對於其資料修改,要麼全都執行,要麼全都不執行。

(2) 一致性

事務在完成時,必須使所有的資料都保持一致狀態。在相關資料庫中,所有規則都必須應用於事務的修改,以保持所有資料的完整性。事務結束時,所有的內部資料結構(如 b 樹索引或雙向鍊錶)都必須是正確的。

(3) 隔離性

由併發事務所作的修改必須與任何其它併發事務所作的修改隔離。事務檢視資料時資料所處的狀態,要麼是另一併發事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會檢視中間狀態的資料。這稱為可序列性,因為它能夠重新裝載起始資料,並且重播一系列事務,以使資料結束時的狀態與原始事務執行的狀態相同。

(4) 永續性

事務完成之後,它對於系統的影響是永久性的。該修改即使出現系統故障也將一直保持。

8. 游標的作用?如何知道游標已經到了最後?

答案:游標用於定位結果集的行,通過判斷全域性變數@@fetch_status可以判斷是否到了最後,通常此變數不等於0表示出錯或到了最後。

9. 觸發器分為事前觸發和事後觸發,這兩種觸發有何區別?語句級觸發和行級觸發有何區別?

答案:事前觸發器執行於觸發事件發生之前,而事後觸發器執行於觸發事件發生之後。通常事前觸發器可以獲取事件之前和新的字段值。

語句級觸發器可以在語句執行前或後執行,而行級觸發在觸發器所影響的每一行觸發一次。

10. 解決死鎖的方法有哪些?

答案:解決手段一:sql server自動檢測和消除死鎖

解決手段二:設定死鎖優先順序

解決手段三:設定鎖定超時

解決手段四:使用更新鎖避免死鎖

11. 提高資料庫執行效率的辦法有哪些?

答案:在給定的系統硬體和系統軟體條件下,提高資料庫系統的執行效率的辦法是:

(1) 在資料庫物理設計時,降低正規化,增加冗餘, 少用觸發器, 多用儲存過程。

(2) 當計算非常複雜、而且記錄條數非常巨大時(例如一千萬條),複雜計算要先在資料庫外面,以檔案系統方式用c++語言計算處理完成之後,最後才入庫追加到表中去。這是電信計費系統設計的經驗。

(3) 發現某個表的記錄太多,例如超過一千萬條,則要對該錶進行水平分割。水平分割的做法是,以該錶主鍵pk的某個值為界線,將該錶的記錄水平分割為兩個表。若發現某個表的字段太多,例如超過八十個,則垂直分割該錶,將原來的乙個表分解為兩個表。

(4) 對資料庫管理系統dbms進行系統優化,即優化各種系統引數,如緩衝區個數。

(5) 在使用面向資料的sql語言進行程式設計時,盡量採取優化演算法。總之,要提高資料庫的執行效率,必須從資料庫系統級優化、資料庫設計級優化、程式實現級優化,這三個層次上同時下功夫。

12. 通俗地理解三個正規化

答案:通俗地理解三個正規化,對於資料庫設計大有好處。在資料庫設計中,為了更好地應用三個正規化,就必須通俗地理解三個正規化(通俗地理解是夠用的理解,並不是最科學最準確的理解):

第一正規化:1nf是對屬性的原子性約束,要求屬性具有原子性,不可再分解; 第二正規化:2nf是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟

一性;第三正規化:3nf是對字段冗餘性的約束,即任何字段不能由其他字段派生出來,它要求字段沒有冗餘。沒有冗餘的資料庫設計可以做到。

但是,沒有冗餘的資料庫未必是最好的資料庫,有時為了提高執行效率,就必須降低正規化標準,適當保留冗餘資料。具體做法是:在概念資料模型設計時遵守第三正規化,降低正規化標準的工作放到物理資料模型設計時考慮。

降低正規化就是增加字段,允許冗餘。

13. 簡述儲存過程的優缺點

優點:1. 更快的執行速度:儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般sql語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度;

2. 與事務的結合,提供更好的解決方案:當對資料庫進行複雜操作時(如對多個表進行update、insert、query和delete時),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用;

3. 支援**重用:儲存過程可以重複使用,可減少資料庫開發人員的工作量;4. 安全性高:可設定只有某此使用者才具有對指定儲存過程的使用權。

缺點:1. 如果更改範圍大到需要對輸入儲存過程的引數進行更改,或者要更改由其返回的資料,則您仍需要更新程式集中的**以新增引數、更新 getvalue() 呼叫,等等,這時候估計比較繁瑣了。

2. 可移植性差由於儲存過程將應用程式繫結到 sql server,因此使用儲存過程封裝業務邏輯將限制應用程式的可移植性。如果應用程式的可移植性在您的環境中非常重要,則將業務邏輯封裝在不特定於 rdbms 的中間層中可能是乙個更佳的選擇。

14. 主鍵和唯一索引有什麼區別?

答案:相同點:它們都屬於實體完整性約束。

不同點:

(1) 唯一性約束所在的列允許空值,但是主鍵約束所在的列不允許空值。

(2) 可以把唯一性約束放在乙個或者多個列上,這些列或列的組合必須有唯一的。但是,唯一性約束所在的列並不是表的主鍵列。

(3) 唯一性約束強制在指定的列上建立乙個唯一性索引。在預設情況下,建立唯一性的非聚簇索引,但是,也可以指定所建立的索引是聚簇索引。

(4) 建立主鍵的目的是讓外來鍵來引用。

(5) 乙個表最多只有乙個主鍵,但可以有很多唯一鍵。

15. 簡述索引訪問的方法的作用和建立索引的原則

作用:加快查詢速度。

原則:(1) 如果某屬性或屬性組經常出現在查詢條件中,考慮為該屬性或屬性組建立索引;

(2) 如果某個屬性常作為最大值和最小值等聚集函式的引數,考慮為該屬性建立索引;

(3) 如果某屬性經常出現在連線操作的連線條件中,考慮為該屬性或屬性組建立索引;

16. 簡述資料庫的設計過程

資料庫設計分為五個階段:

需求分析:主要是準確收集使用者資訊需求和處理需求,並對收集的結果進行整理和分析,形成需求說明。

概念結構設計:對使用者需求進行綜合、歸納、抽象,形成乙個與與具體的dbms無關概念模型(一般為er模型)。

邏輯結構設計:將概念結構設計的概念模型轉化為某個特定的dbms所支援的資料模型,建立資料庫邏輯模式,並對其進行優化,同時為各種使用者和應用設計外模式。

物理結構設計:為設計好的邏輯模型選擇物理結構,包括儲存結構和訪問方法等,建立資料庫物理模式。

實施和維護:實施就是使用dll語言建立資料庫模式,將實際資料載入資料庫,建立真正的資料庫。維護階段是對執行中的資料庫進行評價、調整和修改。

17. 什麼是記憶體洩漏?

答案:一般我們所說的記憶體洩漏指的是堆記憶體的洩漏。堆記憶體是程式從堆中為其分配的,大小任意的,使用完後要顯示釋放記憶體。

當應用程式用關鍵字new等建立物件時,就從堆中為它分配一塊記憶體,使用完後程式呼叫free或者delete釋放該記憶體,否則就說該記憶體就不能被使用,我們就說該記憶體被洩漏了。

資料庫面試題 SQL ORACLE

資料庫基礎 面試常見題 一 資料庫基礎 1.資料抽象 物理抽象 概念抽象 檢視級抽象,內模式 模式 外模式 2.sql語言包括資料定義 資料操縱 data manipulation 資料控制 data control 資料定義 create table,alter table,drop table,...

資料庫面試題 SQL ORACLE

一 資料庫基礎 1.資料抽象 物理抽象 概念抽象 檢視級抽象,內模式 模式 外模式 2.sql語言包括資料定義 資料操縱 data manipulation 資料控制 data control 資料定義 create table,alter table,drop table,craete drop ...

資料庫DBA面試題 2019版 資料庫DBA

資料庫管理員dba筆試題目 姓名日期 1 oracle系統程序主要有哪些,作用是什麼?2 簡單描述table segment extent block之間的關係 3 sga主要有那些部分,主要作用是什麼?4 oracle資料庫備份可以分為哪幾類?5 歸檔是什麼含義,歸檔與備份有什麼不同?6 對於乙個...