數據庫面試常見問題

 

 http://www.cnblogs.com/andy-zhou/p/5316023.html    也能夠看看 html

http://blog.csdn.net/ghevinn/article/details/8674058  一些sql語句面試

(一)什麼是存儲過程?有哪些優缺點?http://www.cnblogs.com/knowledgesea/archive/2013/01/02/2841588.html  sql

存儲過程是一些預編譯的SQL語句。                                                                              Transact-Structured Query Language 結構化查詢語言數據庫

什麼是存儲過程:存儲過程能夠說是一個記錄集吧,它是由一些T-SQL語句組成的代碼塊,這些T-SQL語句代碼像一個方法同樣實現一些功能(對單表或多表的增刪改查),而後再給這個代碼塊取一個名字,在用到這個功能的時候調用他就好了。

存儲過程的好處

1.因爲數據庫執行動做時,是先編譯後執行的。然而存儲過程是一個編譯過的代碼塊,因此執行效率要比T-SQL語句高。

2.一個存儲過程在程序在網絡中交互時能夠替代大堆的T-SQL語句,因此也能下降網絡的通訊量,提升通訊速率。

3.經過存儲過程可以使沒有權限的用戶在控制之下間接地存取數據庫,從而確保數據的安全。編程

五、觸發器的做用?

觸發器是一中特殊的存儲過程,主要是經過事件來觸發而被執行的。它能夠強化約束,來維護數據的完整性和一致性,能夠跟蹤數據庫內的操做從而不容許未經許可的更新和變化。能夠聯級運算。如,某表上的觸發器上包含對另外一個表的數據操做,而該操做又會致使該表觸發器被觸發。c#

六、 維護數據庫的完整性和一致性,你喜歡用觸發器仍是自寫業務邏輯?爲何?

儘量使用約束,如 check, 主鍵,外鍵,非空字段等來約束,這樣作效率最高,也最方便。其次是使用觸發器,這種方法能夠保證,不管什麼業務系統訪問數據庫均可以保證數據的完整新和一致性。最後考慮的是自寫業務邏輯,但這樣作麻煩,編程複雜,效率低下。安全

 

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

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

你也能夠這樣理解:索引就是加快檢索表中數據的方法。數據庫的索引相似於書籍的索引。在書籍中,索引容許用戶沒必要翻閱完整個書就能迅速地找到所須要的信息。在數據庫中,索引也容許數據庫程序迅速地找到表中的數據,而沒必要掃描整個數據庫。併發

MySQL數據庫幾個基本的索引類型:普通索引、惟一索引、主鍵索引、全文索引

  • 索引加快數據庫的檢索速度
  • 索引下降了插入、刪除、修改等維護任務的速度
  • 惟一索引能夠確保每一行數據的惟一性
  • 經過使用索引,能夠在查詢的過程當中使用優化隱藏器,提升系統的性能
  • 索引須要佔物理和數據空間

(三)什麼是事務?

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

http://www.cnblogs.com/fjdingsd/p/5273008.html       本篇講訴數據庫中事務的四大特性(ACID),而且將會詳細地說明事務的隔離級別。  

⑴ 原子性(Atomicity):要嘛成功,要嘛成仁。

  原子性是指事務包含的全部操做要麼所有成功,要麼所有失敗回滾,這和前面兩篇博客介紹事務的功能是同樣的概念,所以事務的操做若是成功就必需要徹底應用到數據庫,若是操做失敗則不能對數據庫有任何影響。

⑵ 一致性(Consistency):好比 轉帳先後 兩人總錢數保存一致

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

  拿轉帳來講,假設用戶A和用戶B二者的錢加起來一共是5000,那麼無論A和B之間如何轉帳,轉幾回帳,事務結束後兩個用戶的錢相加起來應該還得是5000,這就是事務的一致性。

⑶ 隔離性(Isolation):好比上廁所,只能一我的進去蹲。

  隔離性是當多個用戶併發訪問數據庫時,好比操做同一張表時,數據庫爲每個用戶開啓的事務,不能被其餘事務的操做所幹擾,多個併發事務之間要相互隔離。

  即要達到這麼一種效果:對於任意兩個併發的事務T1和T2,在事務T1看來,T2要麼在T1開始以前就已經結束,要麼在T1結束以後纔開始,這樣每一個事務都感受不到有其餘事務在併發地執行。

  關於事務的隔離性數據庫提供了多種隔離級別,稍後會介紹到。

⑷ 持久性(Durability):不管成功仍是成仁,毫不後悔。

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

  例如咱們在使用JDBC操做數據庫時,在提交事務方法後,提示用戶事務操做完成,當咱們程序執行完成直到看到提示後,就能夠認定事務以及正確提交,即便這時候數據庫出現了問題,也必需要將咱們的事務徹底執行完成,不然就會形成咱們看到提示事務處理完畢,可是數據庫由於故障而沒有執行事務的重大錯誤。

(四)數據庫的樂觀鎖和悲觀鎖是什麼?

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

    truncate刪除表中數據,再插入時自增加id又從1開始 。

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

超鍵:在關係中能惟一標識元組的屬性集稱爲關係模式的超鍵。一個屬性能夠爲做爲一個超鍵,多個屬性組合在一塊兒也能夠做爲一個超鍵。超鍵包含候選鍵和主鍵。

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

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

外鍵:在一個表中存在的另外一個表的主鍵稱此表的外鍵。

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

視圖是一種虛擬的表,具備和物理表相同的功能。能夠對視圖進行增,改,查,操做,試圖一般是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得咱們獲取數據更容易,相比多表查詢。

以下兩種場景通常會使用到視圖:

  • 只暴露部分字段給訪問者,因此就建一個虛表,就是視圖
  • 查詢的數據來源於不一樣的表,而查詢者但願以統一的方式查詢,這樣也能夠創建一個視圖,把多個表查詢結果聯合起來,查詢者只須要直接從視圖中獲取數據,沒必要考慮數據來源於不一樣表所帶來的差別

(十)說一說三個範式。

第一範式(1NF):數據庫表中的字段都是單一屬性的,不可再分。這個單一屬性由基本類型構成,包括整型、實數、字符型、邏輯型、日期型等。

第二範式(2NF):數據庫表中不存在非關鍵字段對任一候選關鍵字段的部分函數依賴(部分函數依賴指的是存在組合關鍵字中的某些字段決定非關鍵字段的狀況),也即全部非關鍵字段都徹底依賴於任意一組候選關鍵字。 

第三範式(3NF):在第二範式的基礎上,數據表中若是不存在非關鍵字段對任一候選關鍵字段的傳遞函數依賴則符合第三範式。所謂傳遞函數依賴,指的是如 果存在"A → B → C"的決定關係,則C傳遞函數依賴於A。所以,知足第三範式的數據庫表應該不存在以下依賴關係: 關鍵字段 → 非關鍵字段 x → 非關鍵字段y

 

 

數據庫面試中經常使用的10個問題

  (2012-12-15 09:52:41)

1.觸發器的做用?
答:觸發器是一中特殊的存儲過程,主要是經過事件來觸發而被執行的。它能夠強化約束,來維護數據的完整性和一致性,能夠跟蹤數據庫內的操做從而不容許未經許可的更新和變化。能夠聯級運算。如,某表上的觸發器上包含對另外一個表的數據操做,而該操做又會致使該表觸發器被觸發。
2。什麼是存儲過程?用什麼來調用?
答:存儲過程是一個預編譯的SQL語句,優勢是容許模塊化的設計,就是說只需建立一次,之後在該程序中就能夠調用屢次。若是某次操做須要執行屢次SQL,使用存儲過程比單純SQL語句執行要快。能夠用一個命令對象來調用存儲過程。
3。索引的做用?和它的優勢缺點是什麼?
答:索引就一種特殊的查詢表,數據庫的搜索引擎能夠利用它加速對數據的檢索。它很相似與現實生活中書的目錄,不須要查詢整本書內容就能夠找到想要的數據。索引能夠是惟一的,建立索引容許指定單個列或者是多個列。缺點是它減慢了數據錄入的速度,同時也增長了數據庫的尺寸大小。
3。什麼是內存泄漏?
答:通常咱們所說的內存泄漏指的是堆內存的泄漏。堆內存是程序從堆中爲其分配的,大小任意的,使用完後要顯示釋放內存。當應用程序用關鍵字new等建立對象時,就從堆中爲它分配一塊內存,使用完後程序調用free或者delete釋放該內存,不然就說該內存就不能被使用,咱們就說該內存被泄漏了。
4。維護數據庫的完整性和一致性,你喜歡用觸發器仍是自寫業務邏輯?爲何?
答:我是這樣作的,儘量使用約束,如check,主鍵,外鍵,非空字段等來約束,這樣作效率最高,也最方便。其次是使用觸發器,這種方法能夠保證,不管什麼業務系統訪問數據庫均可以保證數據的完整新和一致性。最後考慮的是自寫業務邏輯,但這樣作麻煩,編程複雜,效率低下。
5。什麼是事務?什麼是鎖?
答:事務就是被綁定在一塊兒做爲一個邏輯工做單元的SQL語句分組,若是任何一個語句操做失敗那麼整個操做就被失敗,之後操做就會回滾到操做前狀態,或者是上有個節點。爲了確保要麼執行,要麼不執行,就可使用事務。要將有組語句做爲事務考慮,就須要經過ACID測試,即原子性,一致性,隔離性和持久性。
鎖:在DBMS中,鎖是實現事務的關鍵,鎖能夠保證事務的完整性和併發性。與現實生活中鎖同樣,它可使某些數據的擁有者,在某段時間內不能使用某些數據或數據結構。固然鎖還分級別的。
6。什麼叫視圖?遊標是什麼?
答:視圖是一種虛擬的表,具備和物理表相同的功能。能夠對視圖進行增,改,查,操做,視圖一般是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得咱們獲取數據更容易,相比多表查詢。
遊標:是對查詢出來的結果集做爲一個單元來有效的處理。遊標能夠定在該單元中的特定行,從結果集的當前行檢索一行或多行。能夠對結果集當前行作修改。通常不使用遊標,可是須要逐條處理數據的時候,遊標顯得十分重要。
7。爲管理業務培訓信息,創建3個表:
S(S#,SN,SD,SA)S#,SN,SD,SA分別表明學號,學員姓名,所屬單位,學員年齡
C(C#,CN)C#,CN分別表明課程編號,課程名稱
SC(S#,C#,G) S#,C#,G分別表明學號,所選的課程編號,學習成績
(1)使用標準SQL嵌套語句查詢選修課程名稱爲’稅收基礎’的學員學號和姓名?
答案:select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=’稅收基礎’)
(2) 使用標準SQL嵌套語句查詢選修課程編號爲’C2’的學員姓名和所屬單位?
答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=’c2’
(3) 使用標準SQL嵌套語句查詢不選修課程編號爲’C5’的學員姓名和所屬單位?
答:select sn,sd from s where s# not in(select s# from sc where c#=’c5’)
(4)查詢選修了課程的學員人數
答:select 學員人數=count(distinct s#) from sc
(5) 查詢選修課程超過5門的學員學號和所屬單位?
答:select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)>5)
相關文章
相關標籤/搜索