- 數據庫常見面試題 推薦度:
- 相關推薦
數據庫常見面試題
數據庫的求職者應該要做好面試準備,提前了解面試常見試題很重要。下面陽光網小編已經為你們整理了數據庫常見面試題,一起來看看吧。
數據庫常見面試題一
1. 在一個查詢中,使用哪一個關鍵字能夠除去重復列值?
答案:使用distinct關鍵字
2. 什么是快照?它的作用是什么?
答案:快照Snapshot是一個文件系統在特定時間里的鏡像,對于在線實時數據備份非常有用。快照對于擁有不能停止的應用或具有常打開文件的文件系統的備份非常重要。對于只能提供一個非常短的備份時間而言,快照能保證系統的完整性。
3. 解釋存儲過程和觸發器
答案:
存儲過程是一組Transact-SQL語句,在一次編譯后可以執行多次。因為不必重新編譯Transact-SQL語句,所以執行存儲過程可以提高性能。
觸發器是一種特殊類型的存儲過程,不由用戶直接調用。創建觸發器時會對其進行定義,以便在對特定表或列作特定類型的數據修改時執行。
4. SQL Server是否支持行級鎖,有什么好處?
答案:支持動態行級鎖定
SQL Server 2000動態地將查詢所引用的每一個表的鎖定粒度調整到合適的級別。當查詢所引用的少數幾行分散在一個大型表中時,優化數據并行訪問的最佳辦法是使用粒度鎖,如行鎖。但是,如果查詢引用的是一個表中的大多數行或所有行,優化數據并行訪問的最佳辦法可以是鎖定整個表,以盡量減少鎖定開銷并盡快完成查詢。
SQL Serve 2000通過為每個查詢中的.每個表選擇適當的鎖定級別,在總體上優化了數據并發訪問。對于一個查詢,如果只引用一個大型表中的幾行,則數據庫引擎可以使用行級鎖定;如果引用一個大型表的幾頁中的多行,則使用頁級鎖定;如果引用一個小型表中的所有行,則使用表級鎖定。
5. 數據庫日志干什么用,數據庫日志滿的時候再查詢數據庫時會出現什么情況。
答案:每個數據庫都有事務日志,用以記錄所有事務和每個事務對數據庫所做的修改。
6. 存儲過程和函數的區別?
答案:存儲過程是用戶定義的一系列SQL語句的集合,涉及特定表或其它對象的任務,用戶可以調用存儲過程,而函數通常是數據庫已定義的方法,它接收參數并返回某種類型的值并且不涉及特定用戶表
數據庫常見面試題二
1. 事務是什么?
答案:事務是作為一個邏輯單元執行的一系列操作,一個邏輯工作單元必須有四個屬性,稱為 ACID(原子性、一致性、隔離性和持久性)屬性,只有這樣才能成為一個事務:
(1) 原子性
事務必須是原子工作單元;對于其數據修改,要么全都執行,要么全都不執行。
(2) 一致性
事務在完成時,必須使所有的數據都保持一致狀態。在相關數據庫中,所有規則都必須應用于事務的修改,以保持所有數據的完整性。事務結束時,所有的內部數據結構(如 B 樹索引或雙向鏈表)都必須是正確的。
(3) 隔離性
由并發事務所作的修改必須與任何其它并發事務所作的修改隔離。事務查看數據時數據所處的狀態,要么是另一并發事務修改它之前的狀態,要么是另一事務修改它之后的狀態,事務不會查看中間狀態的數據。這稱為可串行性,因為它能夠重新裝載起始數據,并且重播一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同。
(4) 持久性
事務完成之后,它對于系統的`影響是永久性的。該修改即使出現系統故障也將一直保持。
2. 游標的作用?如何知道游標已經到了最后?
答案:游標用于定位結果集的行,通過判斷全局變量@@FETCH_STATUS可以判斷是否到了最后,通常此變量不等于0表示出錯或到了最后。
3. 觸發器分為事前觸發和事后觸發,這兩種觸發有何區別?語句級觸發和行級觸發有何區別?
答案:
事前觸發器運行于觸發事件發生之前,而事后觸發器運行于觸發事件發生之后。通常事前觸發器可以獲取事件之前和新的字段值。
語句級觸發器可以在語句執行前或后執行,而行級觸發在觸發器所影響的每一行觸發一次。
4. 解決死鎖的方法有哪些?
答案:
解決手段一:SQL Server自動檢測和消除死鎖
解決手段二:設置死鎖優先級
解決手段三:設置鎖定超時
解決手段四:使用更新鎖避免死鎖
數據庫常見面試題三
1. 提高數據庫運行效率的辦法有哪些?
答案:在給定的系統硬件和系統軟件條件下,提高數據庫系統的運行效率的辦法是:
(1) 在數據庫物理設計時,降低范式,增加冗余, 少用觸發器, 多用存儲過程。
(2) 當計算非常復雜、而且記錄條數非常巨大時(例如一千萬條),復雜計算要先在數據庫外面,以文件系統方式用C++語言計算處理完成之后,最后才入庫追加到表中去。這是電信計費系統設計的經驗。
(3) 發現某個表的記錄太多,例如超過一千萬條,則要對該表進行水平分割。水平分割的做法是,以該表主鍵PK的某個值為界線,將該表的記錄水平分割為兩個表。若發現某個表的字段太多,例如超過八十個,則垂直分割該表,將原來的一個表分解為兩個表。
(4) 對數據庫管理系統DBMS進行系統優化,即優化各種系統參數,如緩沖區個數。
(5) 在使用面向數據的SQL語言進行程序設計時,盡量采取優化算法。總之,要提高數據庫的運行效率,必須從數據庫系統級優化、數據庫設計級優化、程序實現級優化,這三個層次上同時下功夫。
2. 通俗地理解三個范式
答案:通俗地理解三個范式,對于數據庫設計大有好處。在數據庫設計中,為了更好地應用三個范式,就必須通俗地理解三個范式(通俗地理解是夠用的理解,并不是最科學最準確的.理解):
第一范式:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解;
第二范式:2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟 一性;
第三范式:3NF是對字段冗余性的約束,即任何字段不能由其他字段派生出來,它要求字段沒有冗余。沒有冗余的數據庫設計可以做到。但是,沒有冗余的數據庫未必是最好的數據庫,有時為了提高運行效率,就必須降低范式標準,適當保留冗余數據。具體做法是:在概念數據模型設計時遵守第三范式,降低范式標準的工作放到物理數據模型設計時考慮。降低范式就是增加字段,允許冗余。
3. 簡述存儲過程的優缺點
優點:
1. 更快的執行速度:存儲過程只在創造時進行編譯,以后每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高數據庫執行速度;
2. 與事務的結合,提供更好的解決方案:當對數據庫進行復雜操作時(如對多個表進行Update、Insert、Query和Delete時),可將此復雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用;
3. 支持代碼重用:存儲過程可以重復使用,可減少數據庫開發人員的工作量;4. 安全性高:可設定只有某此用戶才具有對指定存儲過程的使用權。
缺點:
1. 如果更改范圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則您仍需要更新程序集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣了。
2. 可移植性差由于存儲過程將應用程序綁定到 SQL Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。如果應用程序的可移植性在您的環境中非常重要,則將業務邏輯封裝在不特定于 RDBMS 的中間層中可能是一個更佳的選擇。
【數據庫常見面試題】相關文章:
數據庫常見面試題04-09
數據庫面試題04-04
女生常見的面試題12-09
酒店前臺常見的經典面試題12-09
常見的壓力面試題及回答12-09
常見軟件測試面試題04-03
java常見面試題04-04
2017常見的php面試題04-05
android常見面試題04-04