1. 事務的ACID特性?如何通過日志保證原子性和持久性?
-
專業解答:
ACID:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。日志(如Redo/Undo Log)記錄操作,故障時重做或回滾。 -
初中生版:
事務像銀行轉賬:要么轉成功(原子性),要么全取消(回滾)。日志像監控錄像,出問題時按記錄恢復。
2. 數據庫索引的原理是什么?B+樹和哈希索引的區別是什么?
-
專業解答:
索引加速查詢。B+樹適合范圍查詢,葉節點鏈表結構;哈希索引基于哈希表,僅支持等值查詢。 -
初中生版:
B+樹像圖書館的分類書架,能快速找到某類書或范圍(比如A到C區);哈希索引像快遞柜,直接輸入編號(哈希值)取件。
3. 什么是臟讀、不可重復讀和幻讀?如何通過隔離級別解決?
-
專業解答:
- 臟讀:讀到未提交數據;
- 不可重復讀:同一事務兩次讀結果不同;
- 幻讀:同一事務兩次查詢行數不同。
通過隔離級別(如RC、RR)控制。
-
初中生版:
像考試時:- 臟讀:抄同學沒寫完的答案;
- 不可重復讀:第一次看同學得80分,第二次看被改成90分;
- 幻讀:第一次統計班里5人及格,第二次突然多出1人。
4. MySQL的InnoDB和MyISAM引擎的主要區別是什么?
-
專業解答:
InnoDB支持事務、行鎖、外鍵;MyISAM不支持事務,表鎖,但查詢更快。 -
初中生版:
InnoDB像帶鎖的日記本:能記錄交易(事務),單頁可修改;MyISAM像普通筆記本:寫得快但不能鎖頁。
5. 什么是MVCC(多版本并發控制)?如何實現快照讀?
-
專業解答:
MVCC通過保存數據多個版本,實現讀不阻塞寫。快照讀(如SELECT
)讀取歷史版本,避免加鎖。 -
初中生版:
MVCC像圖書館的舊書庫:讀者看舊版書(快照),作者同時修改新版,互不干擾。
6. 數據庫范式有哪些?第三范式(3NF)的要求是什么?
-
專業解答:
主要范式:1NF(字段原子性)、2NF(消除部分依賴)、3NF(消除傳遞依賴)。3NF要求非主鍵字段不依賴其他非主鍵字段。 -
初中生版:
范式像整理衣柜:1NF(不塞一堆衣服),2NF(按季節分類),3NF(不重復存放同款衣服)。
7. 什么是聚集索引和非聚集索引?InnoDB的主鍵索引結構是怎樣的?
-
專業解答:
聚集索引決定數據存儲順序(InnoDB主鍵),非聚集索引(二級索引)存鍵值和主鍵地址。 -
初中生版:
聚集索引像字典正文:按拼音排序;非聚集索引像目錄:查到頁碼再翻到對應頁。
8. SQL注入的原理是什么?如何防范?
-
專業解答:
攻擊者通過輸入惡意SQL拼接,繞過驗證。防范方法:參數化查詢(預編譯)、過濾特殊字符。 -
初中生版:
SQL注入像謊報密碼:假裝是管理員(' OR 1=1--
),騙過系統。防范:用保險鎖(參數化)封住漏洞。
9. 什么是查詢優化器?基于代價的優化(CBO)如何工作?
-
專業解答:
查詢優化器生成執行計劃。CBO根據統計信息(如行數、索引)估算成本,選擇最優方案。 -
初中生版:
查詢優化器像導航:根據路況(數據分布)選擇最短或最快路線。
10. 什么是鎖?行級鎖和表級鎖的區別是什么?
-
專業解答:
鎖保障并發安全。行級鎖粒度小并發高(如InnoDB),表級鎖粒度大并發低(如MyISAM)。 -
初中生版:
行級鎖像給單本書上鎖;表級鎖像鎖整個書柜。前者靈活,后者省事但影響多人使用。
11. 什么是死鎖?數據庫如何檢測和解決死鎖?
-
專業解答:
死鎖是循環等待資源。數據庫通過超時或等待圖檢測,回滾代價小的事務。 -
初中生版:
死鎖像四人各拿一本書等別人交換。數據庫會強制某人先放手(回滾),解開僵局。
12. 什么是視圖?它的作用和局限性是什么?
-
專業解答:
視圖是虛擬表,簡化查詢、提供安全隔離。局限:更新受限,性能可能下降。 -
初中生版:
視圖像定制窗口:只能看特定數據(如只顯示數學成績),但改數據可能受限制。
13. 什么是存儲過程?與普通SQL語句相比有何優缺點?
-
專業解答:
存儲過程是預編譯的SQL集合,減少網絡開銷,但調試困難,移植性差。 -
初中生版:
存儲過程像預制菜:提前做好菜譜(SQL),點菜(調用)更快,但換廚房(數據庫)可能不兼容。
14. 什么是分區表?如何選擇分區鍵?
-
專業解答:
分區表將大數據分片存儲(如按時間、范圍)。分區鍵應選擇高頻查詢條件字段。 -
初中生版:
分區表像分冊的百科全書:按年份或字母分冊,查資料更快。
15. 什么是數據庫的冷備份和熱備份?
-
專業解答:
冷備份在停止服務時拷貝數據;熱備份在運行時備份,可能丟失少量數據。 -
初中生版:
冷備份像關燈打掃房間;熱備份像邊用房間邊吸塵,可能漏掉角落。
16. 什么是NoSQL數據庫?與關系型數據庫的適用場景有何不同?
-
專業解答:
NoSQL支持非結構化數據,高擴展性(如MongoDB、Redis),適合大數據和高并發;關系型數據庫強一致性,適合事務場景。 -
初中生版:
NoSQL像雜貨店:能存各種奇怪的東西(JSON、圖片);關系型數據庫像超市:貨架整齊,分類明確。
17. 什么是CAP定理?如何權衡一致性、可用性和分區容忍性?
-
專業解答:
CAP定理:分布式系統無法同時滿足一致性(C)、可用性(A)、分區容忍性(P)。通常根據場景選擇CP或AP。 -
初中生版:
CAP像餐廳服務:- CP:必須等廚師做好菜(一致)才上桌,可能等很久;
- AP:直接上桌(可用),但可能菜沒做好。
18. 什么是Redis的數據持久化機制?RDB和AOF的區別是什么?
-
專業解答:
RDB定期快照,恢復快但可能丟數據;AOF記錄寫操作,數據更完整但體積大。 -
初中生版:
RDB像拍照存檔:定期拍一張全家福;AOF像錄像:記錄所有動作,恢復時重放。
19. 什么是數據庫的索引覆蓋(Covering Index)?
-
專業解答:
索引覆蓋指查詢字段全在索引中,無需回表,提升效率。 -
初中生版:
索引覆蓋像目錄包含答案:查書時直接看目錄,不用翻正文。
20. 什么是連接(JOIN)算法?嵌套循環、哈希連接和排序合并連接的區別是什么?
-
專業解答:
- 嵌套循環:遍歷兩表逐行匹配;
- 哈希連接:構建哈希表快速匹配;
- 排序合并:排序后順序合并。
-
初中生版:
- 嵌套循環像逐個問名字找朋友;
- 哈希連接像用學號快速匹配;
- 排序合并像按身高排隊后組隊。
21. 什么是慢查詢日志?如何分析和優化慢查詢?
-
專業解答:
慢查詢日志記錄超時SQL。通過EXPLAIN
分析執行計劃,優化索引或拆分查詢。 -
初中生版:
慢查詢日志像考卷錯題本:找出耗時的題目(SQL),分析原因(索引、算法),針對性練習。
22. 什么是數據庫的讀寫分離?如何實現?
-
專業解答:
讀寫分離將寫操作到主庫,讀操作到從庫。通過代理(如ProxySQL)或中間件路由。 -
初中生版:
讀寫分離像圖書館:主館(主庫)處理借書登記,分館(從庫)提供閱讀,減輕主館壓力。
23. 什么是分庫分表?如何解決跨庫查詢問題?
-
專業解答:
分庫分表按規則拆分數據。跨庫查詢需應用層聚合或全局表冗余。 -
初中生版:
分庫分表像分班管理:按學號分班,查全校數據時需合并各班結果。
24. 什么是事務的隔離級別?MySQL默認的隔離級別是什么?
-
專業解答:
隔離級別:RU(讀未提交)、RC(讀已提交)、RR(可重復讀)、S(串行化)。MySQL默認RR。 -
初中生版:
隔離級別像考試監考嚴格程度:- RU:能看到別人未寫完的答案;
- RR:考試期間答案被鎖定,只能看初始版本。
25. 什么是數據庫的WAL(Write-Ahead Logging)機制?
-
專業解答:
WAL先寫日志再修改數據,保證崩潰時可通過日志恢復。 -
初中生版:
WAL像先記賬再花錢:即使突然斷電,也能根據賬本(日志)找回數據。
26. 什么是數據庫的緩沖池(Buffer Pool)?如何管理頁的加載和淘汰?
-
專業解答:
緩沖池緩存磁盤頁,減少IO。通過LRU算法管理,頻繁訪問頁駐留,冷頁淘汰。 -
初中生版:
緩沖池像書桌:常用書放桌面(緩沖池),不常用的放書架(磁盤)。LRU像整理書桌,最近不用的先收起來。
27. 什么是數據庫的樂觀鎖和悲觀鎖?
-
專業解答:
悲觀鎖假設沖突多(如SELECT FOR UPDATE
),樂觀鎖假設沖突少(如版本號驗證)。 -
初中生版:
悲觀鎖像考試鎖卷子:怕人偷看,全程盯著;樂觀鎖像開放答題:提交時檢查是否被改過。
28. 什么是數據庫的物化視圖?與普通視圖的區別是什么?
-
專業解答:
物化視圖存儲查詢結果,定期刷新;普通視圖實時計算。 -
初中生版:
物化視圖像預制菜:提前做好存冰箱;普通視圖像現炒菜:點單后現做。
29. 什么是數據庫的自治事務?應用場景是什么?
-
專業解答:
自治事務獨立于主事務提交,用于日志記錄等需獨立提交的場景。 -
初中生版:
自治事務像獨立記賬本:主交易可能失敗,但賬本記錄必須保留。
30. 什么是數據庫的基數(Cardinality)?如何影響查詢優化?
-
專業解答:
基數是列唯一值的數量。高基數列(如身份證)適合建索引,低基數列(如性別)索引效果差。 -
初中生版:
基數像班級學號:如果學號唯一(高基數),按學號找人快;如果按性別(低基數),索引作用小。