todo【面經(jīng)】??途W(wǎng)數(shù)據(jù)庫(kù)相關(guān)面經(jīng)題

1. mybatisplus和mysql的區(qū)別

【todo頭一個(gè)是啥。。】

2. Innodb索引,說(shuō)原理,如何創(chuàng)建索引

【todo放link】見(jiàn)其他文章

3. ACID特性

【todo放link】見(jiàn)其他文章

4. sql注入原理,防止sql注入

【todo】

5. 刪除表中所有的數(shù)據(jù)保留表結(jié)構(gòu)

使用truncate操作【todo其他刪除操作 drop、truncate、 delete】

6. mysql聯(lián)合索引能否命中

【todo】

7. 索引是什么,索引底層

  • 索引是對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),使用索引可快速訪問(wèn)數(shù)據(jù)庫(kù)表中的特定信息。
    在MySQL中,存儲(chǔ)引擎現(xiàn)在索引中查找對(duì)應(yīng)的值,然后根據(jù)匹配的索引記錄找到對(duì)應(yīng)的數(shù)據(jù)行,最后將數(shù)據(jù)結(jié)果集返回給客戶端。
  • 優(yōu)點(diǎn):
  1. 在查詢過(guò)程中提高系統(tǒng)的性能
  2. 通過(guò)創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性
  3. 在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),可以減少查詢中分組和排序的時(shí)間。
  • 缺點(diǎn):
  1. 創(chuàng)建所有和維護(hù)索引要耗費(fèi)時(shí)間,而且隨著數(shù)據(jù)量的增大而增大。
  2. 索引需要占用物理空間,如果要建立聚類索引,所需要的空間會(huì)更大。
  3. 在對(duì)表中的數(shù)據(jù)進(jìn)行增刪改時(shí)需要耗費(fèi)較多的時(shí)間,因?yàn)樗饕惨獎(jiǎng)討B(tài)地維護(hù)。
  • 分類:
  1. 單例索引(主鍵索引、唯一索引、普通索引):
    一個(gè)索引只包含一個(gè)列,一個(gè)表可以有多個(gè)單例索引。
  2. 組合索引:
    一個(gè)組合索引包含兩個(gè)或兩個(gè)以上的列。

2.1 單例索引

普通索引

最常見(jiàn)的索引,沒(méi)有任何限制

唯一索引

與普通索引類似,但是要求所有的列的值都是唯一的,允許有空值

主鍵索引

要求所有的列的值是唯一的,且不允許有空值

2.2 組合索引

如果建立了組合索引,那么它實(shí)際建立了多層單例索引。
在使用查詢的時(shí)候,遵循最左匹配原則。

  • 如果不按索引最左列開始查詢則不能使用組合索引。
  • 如果查詢的某個(gè)列有范圍查詢,則其右邊的所有列都無(wú)法使用該組合索引。
  • 不能跳過(guò)某個(gè)字段進(jìn)行查詢,這樣利用不到組合索引。

【todo, b+樹】

8. 事務(wù)是什么,事務(wù)的特性,具體的事務(wù)例子

【todo】

9. mysql死鎖

【todo】

10. 慢查詢

【todo】

11. mysql連接

【todo】

12. 數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程

【todo】

13. 分布式事務(wù)

【todo】

14. 為什么線上常用可重復(fù)度隔離級(jí)別

【todo】

15. 聚類索引

【todo】

16. 主鍵和外鍵

  1. 主鍵用來(lái)唯一標(biāo)識(shí)一條記錄,不能有重復(fù),不允許為空,而外鍵可以重復(fù),可以為空。
  2. 如果公共關(guān)系字在一個(gè)關(guān)系中是主鍵,那么這個(gè)公共關(guān)鍵字被稱為另一個(gè)關(guān)系的外鍵。
  3. 主鍵用來(lái)保證實(shí)例完整性,外鍵用來(lái)建立與其他表的聯(lián)系,需要保證參照完整性。
  4. 主鍵在一個(gè)關(guān)系里只能有一個(gè),外鍵可以有多個(gè)。

17. 查詢語(yǔ)句中:先分組還是先排序,為什么?

【todo】

18. order by 和group by 是什么,區(qū)別是什么,

order by 和group by 同時(shí)使用的時(shí)候是什么順序,為什么。
【todo】

19. 范式

  • 符合高一級(jí)范式的設(shè)計(jì)必定符合低一級(jí)范式。
  • 規(guī)范化:一個(gè)低一級(jí)的關(guān)系模式通過(guò)模式分解可以轉(zhuǎn)化為若干個(gè)高一級(jí)范式的關(guān)系模式的集合,這個(gè)過(guò)程叫做規(guī)范化。
  • 候選鍵:若關(guān)系中的某一屬性組的值能唯一標(biāo)識(shí)一個(gè)元組,而其子集不能,則稱該屬性組為候選鍵。若一個(gè)關(guān)系中有多個(gè)候選鍵,則選定其中一個(gè)為主鍵。
  1. 第一范式1NF:
    屬于第一范式關(guān)系的所有屬性都不可再分,即數(shù)據(jù)項(xiàng)不可分。
  2. 第二范式2NF:
    若某關(guān)系R屬于第一范式,且每一個(gè)非主屬性完全依賴于任何一個(gè)候選鍵,則關(guān)系R屬于第二范式
  3. 第三范式3NF
    在第二范式基礎(chǔ)上,任何非主屬性不依賴于其他非主屬性。
  4. 巴斯-科德范式BCNF
    在第三范式基礎(chǔ)上,任何非主屬性不能對(duì)主鍵子集依賴。

20. 左連接、右連接和內(nèi)連接的區(qū)別

【todo】

21. mysql的范圍查找

【todo】

22. innodb和myisam

  1. InnoDB支持事務(wù),MyISAM不支持。
  2. InnoDB支持外鍵,而MyISAM不支持。
  3. InnoDB是聚類索引,使用B+樹作為索引結(jié)構(gòu),數(shù)據(jù)文件是和(主鍵)索引綁在一起的(表數(shù)據(jù)文件本身就是按B+樹組織的一個(gè)索引結(jié)構(gòu)),必須有主鍵,通過(guò)主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然后再通過(guò)主鍵查詢到數(shù)據(jù)。因此,主鍵不應(yīng)該過(guò)大,因?yàn)橹麈I太大,其他索引也都會(huì)很大。
    MyISAM是非聚類索引,也是使用B+樹作為索引結(jié)構(gòu),索引和數(shù)據(jù)文件是分離的,索引保存的是數(shù)據(jù)文件的指針。主鍵索引和輔助索引是獨(dú)立的。
  4. InnoDB不保存表的具體行數(shù),執(zhí)行count(*)時(shí)需要進(jìn)行全表掃描,而MyISAM用一個(gè)變量保存了整個(gè)表的行數(shù)
    因?yàn)镮nnoDB的事務(wù)特性,在同一時(shí)刻表中的行數(shù)對(duì)于不同的事務(wù)而言是不一樣的,因此count(*)統(tǒng)計(jì)會(huì)計(jì)算對(duì)于當(dāng)前事務(wù)而言可以統(tǒng)計(jì)到的行數(shù)。
  5. InnoDB支持表、行(默認(rèn))級(jí)鎖,而MyISAM支持表級(jí)鎖。
    InnoDB的行級(jí)鎖是實(shí)現(xiàn)在索引上的,而不是鎖在物理行記錄上。
  6. InnoDB表必須有唯一索引(如主鍵),用戶沒(méi)有指定的話,會(huì)找/生成一個(gè)隱藏列Row_id來(lái)充當(dāng)默認(rèn)主鍵,而MyISAM可以沒(méi)有。

23. 數(shù)據(jù)庫(kù)優(yōu)化

【todo,后悔不好好學(xué)習(xí)】

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容