常見的數(shù)據(jù)庫面試題有哪些
(一)什么是存儲過程?有哪些優(yōu)缺點氛悬?
存儲過程是一些預編譯的SQL語句则剃。
更加直白的理解:存儲過程可以說是一個記錄集耘柱,它是由一些T-SQL語句組成的代碼塊,這些T-SQL語句代碼像一個方法一樣實現(xiàn)一些功能(對單表或多表的增刪改查)棍现,然后再給這個代碼塊取一個名字调煎,在用到這個功能的時候調用他就行了。
存儲過程是一個預編譯的代碼塊己肮,執(zhí)行效率比較高
一個存儲過程替代大量T_SQL語句 士袄,可以降低網絡通信量,提高通信速率
可以一定程度上確保數(shù)據(jù)安全
(二)索引是什么谎僻?有什么作用以及優(yōu)缺點娄柳?
索引是對數(shù)據(jù)庫表中一或多個列的值進行排序的結構,是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結構
你也可以這樣理解:索引就是加快檢索表中數(shù)據(jù)的方法戈稿。數(shù)據(jù)庫的索引類似于書籍的索引西土。在書籍中,索引允許用戶不必翻閱完整個書就能迅速地找到所需要的信息鞍盗。在數(shù)據(jù)庫中需了,索引也允許數(shù)據(jù)庫程序迅速地找到表中的數(shù)據(jù),而不必掃描整個數(shù)據(jù)庫般甲。
MySQL數(shù)據(jù)庫幾個基本的索引類型:普通索引肋乍、唯一索引、主鍵索引敷存、全文索引
索引加快數(shù)據(jù)庫的檢索速度
索引降低了插入墓造、刪除、修改等維護任務的速度
唯一索引可以確保每一行數(shù)據(jù)的唯一性
通過使用索引锚烦,可以在查詢的過程中使用優(yōu)化隱藏器觅闽,提高系統(tǒng)的性能
索引需要占物理和數(shù)據(jù)空間?
(三)什么是事務?
事務(Transaction)是并發(fā)控制的基本單位涮俄。所謂的事務蛉拙,它是一個操作序列,這些操作要么都執(zhí)行彻亲,要么都不執(zhí)行孕锄,它是一個不可分割的工作單位。事務是數(shù)據(jù)庫維護數(shù)據(jù)一致性的單位苞尝,在每個事務結束時畸肆,都能保持數(shù)據(jù)一致性。
(四)數(shù)據(jù)庫的樂觀鎖和悲觀鎖是什么宙址?
數(shù)據(jù)庫管理系統(tǒng)(DBMS)中的并發(fā)控制的任務是確保在多個事務同時存取數(shù)據(jù)庫中同一數(shù)據(jù)時不破壞事務的隔離性和統(tǒng)一性以及數(shù)據(jù)庫的統(tǒng)一性轴脐。
樂觀并發(fā)控制(樂觀鎖)和悲觀并發(fā)控制(悲觀鎖)是并發(fā)控制主要采用的技術手段。
悲觀鎖:假定會發(fā)生并發(fā)沖突豁辉,屏蔽一切可能違反數(shù)據(jù)完整性的操作
樂觀鎖:假設不會發(fā)生并發(fā)沖突令野,只在提交操作時檢查是否違反數(shù)據(jù)完整性舀患。
(五) 使用索引查詢一定能提高查詢的性能嗎徽级?為什么
通常,通過索引查詢數(shù)據(jù)比全表掃描要快.但是我們也必須注意到它的代價.
索引需要空間來存儲,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁盤I/O. 因為索引需要額外的存儲空間和處理,那些不必要的索引反而會使查詢反應時間變慢.使用索引查詢不一定能提高查詢性能,索引范圍查詢(INDEX RANGE SCAN)適用于兩種情況:
基于一個范圍的檢索,一般查詢返回結果集小于表中記錄數(shù)的30%
基于非唯一性索引的檢索
(六)簡單說一說drop低匙、delete與truncate的區(qū)別
SQL中的drop旷痕、delete强重、truncate都表示刪除绞呈,但是三者有一些差別
delete和truncate只刪除表的數(shù)據(jù)不刪除表的結構
速度,一般來說:?drop> truncate >delete?
delete語句是dml,這個操作會放到rollback segement中,事務提交之后才生效;
如果有相應的trigger,執(zhí)行的時候將被觸發(fā).?truncate,drop是ddl, 操作立即生效,原數(shù)據(jù)不放到rollback segment中,不能回滾. 操作不觸發(fā)trigger.?
(七)drop、delete與truncate分別在什么場景之下使用间景?
不再需要一張表的時候佃声,用drop
想刪除部分數(shù)據(jù)行時候,用delete倘要,并且?guī)蟱here子句
保留表而刪除所有數(shù)據(jù)的時候用truncate
(八) 超鍵圾亏、候選鍵、主鍵封拧、外鍵分別是什么志鹃?
超鍵:在關系中能唯一標識元組的屬性集稱為關系模式的超鍵。一個屬性可以為作為一個超鍵泽西,多個屬性組合在一起也可以作為一個超鍵曹铃。超鍵包含候選鍵和主鍵。
候選鍵:是最小超鍵尝苇,即沒有冗余元素的超鍵铛只。
主鍵:數(shù)據(jù)庫表中對儲存數(shù)據(jù)對象予以唯一和完整標識的數(shù)據(jù)列或屬性的組合。一個數(shù)據(jù)列只能有一個主鍵糠溜,且主鍵的取值不能缺失淳玩,即不能為空值(Null)。
外鍵:在一個表中存在的另一個表的主鍵稱此表的外鍵非竿。
(九)什么是視圖蜕着?以及視圖的使用場景有哪些?
視圖是一種虛擬的表,具有和物理表相同的功能承匣”统耍可以對視圖進行增,改韧骗,查嘉抒,操作,試圖通常是有一個表或者多個表的行或列的子集袍暴。對視圖的修改不影響基本表些侍。它使得我們獲取數(shù)據(jù)更容易,相比多表查詢政模。
只暴露部分字段給訪問者岗宣,所以就建一個虛表,就是視圖淋样。
查詢的數(shù)據(jù)來源于不同的表耗式,而查詢者希望以統(tǒng)一的方式查詢,這樣也可以建立一個視圖趁猴,把多個表查詢結果聯(lián)合起來刊咳,查詢者只需要直接從視圖中獲取數(shù)據(jù),不必考慮數(shù)據(jù)來源于不同表所帶來的差異
(十)說一說三個范式躲叼。
第一范式(1NF):數(shù)據(jù)庫表中的字段都是單一屬性的芦缰,不可再分。這個單一屬性由基本類型構成枫慷,包括整型让蕾、實數(shù)、字符型或听、邏輯型探孝、日期型等。
第二范式(2NF):數(shù)據(jù)庫表中不存在非關鍵字段對任一候選關鍵字段的部分函數(shù)依賴(部分函數(shù)依賴指的是存在組合關鍵字中的某些字段決定非關鍵字段的情況)誉裆,也即所有非關鍵字段都完全依賴于任意一組候選關鍵字顿颅。?
第三范式(3NF):在第二范式的基礎上,數(shù)據(jù)表中如果不存在非關鍵字段對任一候選關鍵字段的傳遞函數(shù)依賴則符合第三范式足丢。所謂傳遞函數(shù)依賴粱腻,指的是如 果存在"A → B → C"的決定關系,則C傳遞函數(shù)依賴于A斩跌。因此绍些,滿足第三范式的數(shù)據(jù)庫表應該不存在如下依賴關系: 關鍵字段 → 非關鍵字段 x → 非關鍵字段y
需要面試題匯總可以加一下QQ:1547737063即可免費獲取
附加java開發(fā)的資料(面試資源與經驗總結,Dubbo耀鸦、Redis柬批、設計模式、Netty、zookeeper氮帐、Spring cloud嗅虏、分布式、高并發(fā)等架構技術視頻教程資料,架構思維導圖上沐,以及面試資料皮服,了解最新的學習動態(tài);了解最新的阿里奄容、京東招聘資訊)